一键部署 LNMP(源码安装版本)

不啰嗦,直接上脚本代码:

#!/bin/bash
# 一键部署 LNMP(源码安装版本)

menu() {
    clear
    echo " ##############----Menu----##############"
    echo "# 1. Install Nginx"
    echo "# 2. Install MySQL"
    echo "# 3. Install PHP"
    echo "# 4. Exit Program"
    echo " ########################################"
}

choice() {
    read -p "Please choose a menu [1-4]: " select
}

install_nginx() {
    id nginx &>/dev/null
    if [ $? -ne 0 ]; then
        useradd -s /sbin/nologin nginx
    fi

    if [ -f nginx-1.8.0.tar.gz ]; then
        tar -xf nginx-1.8.0.tar.gz
        cd nginx-1.8.0
        yum -y install gcc pcre-devel openssl-devel zlib-devel make
        ./configure --prefix=/usr/local/nginx --with-http_ssl_module
        make
        make install
        ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
        cd ..
    else
        echo "没有 Nginx 源码包"
    fi
}

install_mysql() {
    yum -y install gcc gcc-c++ cmake ncurses-devel perl

    id mysql &>/dev/null
    if [ $? -ne 0 ]; then
        useradd -s /sbin/nologin mysql
    fi

    if [ -f mysql-5.6.25.tar.gz ]; then
        tar -xf mysql-5.6.25.tar.gz
        cd mysql-5.6.25
        cmake .
        make
        make install
        /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/ --basedir=/usr/local/mysql/
        chown -R root.mysql /usr/local/mysql
        chown -R mysql /usr/local/mysql/data
        /bin/cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
        chmod +x /etc/init.d/mysqld
        /bin/cp -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
        echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
        ldconfig
        echo 'PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile
        export PATH
    else
        echo "没有 mysql 源码包"
        exit
    fi
}

install_php() {
    # 安装 php 时没有指定启动哪些模块功能,用户可以根据实际情况自行添加额外功能如 --with-gd 等
    yum -y install gcc libxml2-devel

    if [ -f mhash-0.9.9.9.tar.gz ]; then
        tar -xf mhash-0.9.9.9.tar.gz
        cd mhash-0.9.9.9
        ./configure
        make
        make install
        cd ..
        if [ ! -f /usr/lib/libmhash.so ]; then
            ln -s /usr/local/lib/libmhash.so /usr/lib/
        fi
        ldconfig
    else
        echo "没有 mhash 源码包文件"
        exit
    fi

    if [ -f libmcrypt-2.5.8.tar.gz ]; then
        tar -xf libmcrypt-2.5.8.tar.gz
        cd libmcrypt-2.5.8
        ./configure
        make
        make install
        cd ..
        if [ ! -f /usr/lib/libmcrypt.so ]; then
            ln -s /usr/local/lib/libmcrypt.so /usr/lib/
        fi
        ldconfig
    else
        echo "没有 libmcrypt 源码包文件"
        exit
    fi

    if [ -f php-5.4.24.tar.gz ]; then
        tar -xf php-5.4.24.tar.gz
        cd php-5.4.24
        ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --enable-fpm --enable-mbstring --with-mcrypt --with-mhash --with-config-file-path=/usr/local/php5/etc --with-mysqli=/usr/local/mysql/bin/mysql_config
        make && make install
        /bin/cp -f php.ini-production /usr/local/php5/etc/php.ini
        /bin/cp -f /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
        cd ..
    else
        echo "没有 php 源码包文件"
        exit
    fi
}

while :
do
    menu
    choice
    case $select in
        1)
            install_nginx
            ;;
        2)
            install_mysql
            ;;
        3)
            install_php
            ;;
        4)
            exit
            ;;
        *)
            echo "Sorry! Invalid option."
            ;;
    esac
done
脚本功能概述

该脚本用于在 Linux 环境中一键部署 LNMP (Linux, Nginx, MySQL, PHP) 环境,通过源码安装的方式依次安装 Nginx、MySQL 和 PHP。脚本提供了一个简单的菜单,用户可以选择安装特定的组件。

详细代码描述
1. menu 函数

该函数用于显示菜单选项,用户可以从中选择要安装的组件。

menu() {
    clear
    echo " ##############----Menu----##############"
    echo "# 1. Install Nginx"
    echo "# 2. Install MySQL"
    echo "# 3. Install PHP"
    echo "# 4. Exit Program"
    echo " ########################################"
}
  • clear:清除屏幕上的内容,使菜单显示更加整洁。
  • echo:打印菜单选项供用户选择。
2. choice 函数

该函数用于读取用户的选择。

choice() {
    read -p "Please choose a menu [1-4]: " select
}

read -p "Please choose a menu [1-4]: " select:提示用户输入选择,并将输入值存储在变量 select 中。

3. install_nginx 函数

该函数用于安装 Nginx。

install_nginx() {
    id nginx &>/dev/null
    if [ $? -ne 0 ]; then
        useradd -s /sbin/nologin nginx
    fi

    if [ -f nginx-1.8.0.tar.gz ]; then
        tar -xf nginx-1.8.0.tar.gz
        cd nginx-1.8.0
        yum -y install gcc pcre-devel openssl-devel zlib-devel make
        ./configure --prefix=/usr/local/nginx --with-http_ssl_module
        make
        make install
        ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
        cd ..
    else
        echo "没有 Nginx 源码包"
    fi
}
  • id nginx &>/dev/null:检查是否存在 nginx 用户。
  • useradd -s /sbin/nologin nginx:如果不存在 nginx 用户,则创建一个。
  • if [ -f nginx-1.8.0.tar.gz ]; then ... else ... fi:检查是否存在 Nginx 源码包,如果存在则进行解压、安装等操作,否则提示缺少源码包。
  • 安装 Nginx 所需的依赖包(gccpcre-developenssl-develzlib-develmake)。
  • 配置、编译和安装 Nginx,并创建 Nginx 的软链接到 /usr/sbin/
4. install_mysql 函数

该函数用于安装 MySQL。

install_mysql() {
    yum -y install gcc gcc-c++ cmake ncurses-devel perl

    id mysql &>/dev/null
    if [ $? -ne 0 ]; then
        useradd -s /sbin/nologin mysql
    fi

    if [ -f mysql-5.6.25.tar.gz ]; then
        tar -xf mysql-5.6.25.tar.gz
        cd mysql-5.6.25
        cmake .
        make
        make install
        /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/ --basedir=/usr/local/mysql/
        chown -R root.mysql /usr/local/mysql
        chown -R mysql /usr/local/mysql/data
        /bin/cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
        chmod +x /etc/init.d/mysqld
        /bin/cp -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
        echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
        ldconfig
        echo 'PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile
        export PATH
    else
        echo "没有 mysql 源码包"
        exit
    fi
}
  • 安装 MySQL 所需的依赖包(gccgcc-c++cmakencurses-develperl)。
  • 检查是否存在 mysql 用户,如果不存在则创建。
  • 检查是否存在 MySQL 源码包,如果存在则进行解压、安装等操作,否则提示缺少源码包。
  • 使用 CMake 配置、编译和安装 MySQL。
  • 初始化 MySQL 数据库,设置目录权限,将服务脚本复制到 /etc/init.d/ 并赋予执行权限。
  • 更新共享库配置,并将 MySQL 二进制目录添加到系统 PATH 中。
5. install_php 函数

该函数用于安装 PHP。

install_php() {
    yum -y install gcc libxml2-devel

    if [ -f mhash-0.9.9.9.tar.gz ]; then
        tar -xf mhash-0.9.9.9.tar.gz
        cd mhash-0.9.9.9
        ./configure
        make
        make install
        cd ..
        if [ ! -f /usr/lib/libmhash.so ]; then
            ln -s /usr/local/lib/libmhash.so /usr/lib/
        fi
        ldconfig
    else
        echo "没有 mhash 源码包文件"
        exit
    fi

    if [ -f libmcrypt-2.5.8.tar.gz ]; then
        tar -xf libmcrypt-2.5.8.tar.gz
        cd libmcrypt-2.5.8
        ./configure
        make
        make install
        cd ..
        if [ ! -f /usr/lib/libmcrypt.so ]; then
            ln -s /usr/local/lib/libmcrypt.so /usr/lib/
        fi
        ldconfig
    else
        echo "没有 libmcrypt 源码包文件"
        exit
    fi

    if [ -f php-5.4.24.tar.gz ]; then
        tar -xf php-5.4.24.tar.gz
        cd php-5.4.24
        ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --enable-fpm --enable-mbstring --with-mcrypt --with-mhash --with-config-file-path=/usr/local/php5/etc --with-mysqli=/usr/local/mysql/bin/mysql_config
        make && make install
        /bin/cp -f php.ini-production /usr/local/php5/etc/php.ini
        /bin/cp -f /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
        cd ..
    else
        echo "没有 php 源码包文件"
        exit
    fi
}
  • 安装 PHP 所需的依赖包(gcclibxml2-devel)。
  • 安装 mhash 库,如果源码包存在则进行解压、配置、编译和安装。
  • 安装 libmcrypt 库,如果源码包存在则进行解压、配置、编译和安装。
  • 安装 PHP,如果源码包存在则进行解压、配置、编译和安装。
  • 将 PHP 配置文件复制到相应目录。
6. 主循环

主循环用于显示菜单,并根据用户的选择执行相应的安装函数。

while :
do
    menu
    choice
    case $select in
        1)
            install_nginx
            ;;
        2)
            install_mysql
            ;;
        3)
            install_php
            ;;
        4)
            exit
            ;;
        *)
            echo "Sorry! Invalid option."
            ;;
    esac
done
  • while ::无限循环,直到用户选择退出。
  • menu:显示菜单。
  • choice:读取用户选择。
  • case $select in ... esac:根据用户的选择调用相应的安装函数。

总结

该脚本通过菜单界面和函数调用,实现了 Nginx、MySQL 和 PHP 的源码安装,方便用户在 Linux 环境中快速部署 LNMP 环境。用户可以根据实际需求添加或修改配置选项,以满足不同的应用场景。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!对于一键部署 LNMPLinux + Nginx + MySQL + PHP)环境,可以使用 Ansible 来自动化部署。Ansible 是一种配置管理工具,可以通过编写 YAML 或 JSON 格式的配置文件来描述所需的部署步骤。 下面是一个简单的 Ansible playbook 示例,用于一键部署 LNMP 环境: ```yaml --- - name: Deploy LNMP hosts: your_servers become: yes tasks: - name: Install dependencies apt: name: - nginx - mysql-server - php-fpm state: latest - name: Configure Nginx template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf - name: Start Nginx service: name: nginx state: started enabled: yes - name: Configure MySQL template: src: my.cnf.j2 dest: /etc/mysql/my.cnf - name: Start MySQL service: name: mysql state: started enabled: yes - name: Configure PHP-FPM template: src: php-fpm.conf.j2 dest: /etc/php/7.4/fpm/php-fpm.conf - name: Start PHP-FPM service: name: php-fpm state: started enabled: yes ``` 在上面的示例中,您需要将 `your_servers` 替换为目标服务器的 IP 地址或主机名。该 playbook 的任务包括安装依赖软件包、配置 NginxMySQLPHP-FPM,以及启动相应的服务。 您还需要编写对应的模板文件,例如 `nginx.conf.j2`、`my.cnf.j2` 和 `php-fpm.conf.j2`,用于生成配置文件。这些模板文件中可以包含您自定义的配置内容。 通过运行以下命令来执行 Ansible playbook: ```shell ansible-playbook deploy_lnmp.yml ``` 以上是一个简单的示例,您可以根据实际需求进行修改和扩展。希望对您有帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向日葵般灿烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值