一键安装lamp/lnmp脚本

Z先森 2018-11-14 PM 2094℃ 0条

一键安装lamp/lnmp

  • lamp:linux+apache+mysql+php
  • lnmp:linux+nginx+mysql+php

各组件版本

  • apache 2.4.29
  • nginx 1.14.2
  • mysql 5.6.42
  • redis 4.0.1
  • php 7.2.2

特点

  • 兼容centos6<后续将加入centos7的兼容>
  • 基于源码编译一键安装lamp或lnmp
  • 可选择组建单独安装
  • nginx添加ngfw防火墙模块
  • php添加redis和tidy等常用扩展
  • 自动添加了80端口iptables通过条例
  • 需手动添加环境变量至/etc/profile
  • 所有源码包均来自官方
  • 自动配置redis和mysql高强度密码

一键脚本

#!/bin/bash
#一键安装lnmp/lamp脚本<apache nginx mysql redis>
set -e
logdir="/tmp/onekeyinstall/" #临时目录
basedir="/usr/local/" #安装目录

#安装包地址
#----apache----
apache_pac="http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.gz" #apache 2.4.29
apr_pac="https://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2" #apr 1.5.2
apr_util_pac="https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.bz2" #apr-util 1.5.4
pcre_pac="https://ftp.pcre.org/pub/pcre/pcre-8.38.zip" #pcre 8.38
#----nginx----
nginx_pac="http://nginx.org/download/nginx-1.14.2.tar.gz" #nginx 1.14.2
LuaJIT_pac="http://luajit.org/download/LuaJIT-2.0.5.tar.gz" #LuaJIT 2.0.5
ngx_devel_kit_pac="https://codeload.github.com/simpl/ngx_devel_kit/zip/master" #ngx_devel_kit
openresty_pac="https://github.com/openresty/lua-nginx-module/archive/v0.10.14.tar.gz" #openresty
ngx_cache_purge_pac="http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz" #ngx_cache_purge 2.3
ngx_http_substitutions_filter_module="https://github.com/yaoweibin/ngx_http_substitutions_filter_module/archive/master.zip" #ngx_http_substitutions_filter_module
nginx_vts="https://github.com/vozlt/nginx-module-vts/archive/master.zip"
#----mysql----
mysql_pac="https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.42.tar.gz" #mysql 5.6.42
#----redis----
redis_pac="http://download.redis.io/releases/redis-4.0.1.tar.gz" #redis 4.0.1
#----php----
php_pac="http://cl1.php.net/get/php-7.2.2.tar.gz/from/a/mirror" #php 7.2.2
php_redis_pac="http://pecl.php.net/get/redis-4.2.0.tgz" #php-redis 4.2.0扩展


#安装编译环境    
function install_make()
{
    yum install cmake wget epel-release vim perl perl-devel -y
    yum groupinstall "Development Tools" -y
}
install_make
mkdir -p ${logdir}

#生成随机密码
#例(随机生成20位高强度密码): random_passwd 20
function random_passwd()
{
    MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~#$%^&*()_+="
    LENGTH="$1"
    while [ "${n:=1}" -le "$LENGTH" ]
    do
            PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
            let n+=1
    done
    echo $PASS
}

#判断是否存在源码包,不存在则下载
function download_pac()
{
    cd ${logdir}
    if [[ `ls | grep -E "tar|zip" | grep $2` -eq 0 ]];then
        wget -c -t 3 "$1" $3
    fi
}

#安装apache
function install_apache()
{
    #卸载残余环境
    #rpm -e `rpm -qa|grep -E "httpd"`
    cd ${logdir}
    download_pac "${apache_pac}" http #apache 2.4.29
    download_pac "${apr_pac}" apr #apr 1.5.2
    download_pac "${apr_util_pac}" apr-util #apr-util 1.5.4
    download_pac "${pcre_pac}" pcre #pcre 8.38
    
    #解压所有安装包
    tar -xvf apr-1.5.2.tar.bz2
    tar -xvf apr-util-1.5.4.tar.bz2
    unzip pcre-8.38.zip
    tar -xvf httpd-2.4.29.tar.gz
    
    #安装apr 1.5.2
    cd ${logdir}apr-1.5.2
    ./configure --prefix=${basedir}apr
    make && make install
    
    #安装apr-util 1.5.4
    cd ${logdir}apr-util-1.5.4
    ./configure --prefix=${basedir}apr-util --with-apr=${basedir}apr
    make && make install
    
    #安装pcre 8.38
    cd ${logdir}pcre-8.38
    ./configure --prefix=${basedir}pcre
    make && make install
    
    #安装apache 2.4.29
    cd ${logdir}httpd-2.4.29
    ./configure --prefix=${basedir}apache --with-apr=${basedir}apr --with-apr-util=${basedir}apr-util --with-pcre=${basedir}pcre --enable-so --enable-rewrite --with-mpm=prefork
    make && make install
    
    #修改http配置文件
    sed -i 's/User daemon/User www/g' ${basedir}apache/conf/httpd.conf
    sed -i 's/Group daemon/Group www/g' ${basedir}apache/conf/httpd.conf
    sed -i 's/\#ServerName www.example.com:80/ServerName localhost:80/g' ${basedir}apache/conf/httpd.conf
    useradd -M -s /sbin/nologin www
    cp ${basedir}apache/bin/apachectl /etc/rc.d/init.d/httpd
    echo "${basedir}apache/bin/apachectl -k start" >>/etc/rc.local
    #chkconfig --add httpd
    #chkconfig httpd on
    #启动apache
    service httpd start
    #防火墙添加80端口
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    service iptables save
    echo "-----apache安装并启动完毕-----" >${logdir}apache.log
    echo "[http]" >>${logdir}apache.log
    echo "版本:`${basedir}apache/bin/httpd -v | grep version | awk '{print $3}' | awk -F/ '{print $2}'`" >>${logdir}apache.log
    echo "安装目录:${basedir}apache" >>${logdir}apache.log
}

#安装php
function install_php()
{
    #rpm -e `rpm -qa|grep -E "php"` #卸载残余
    yum install libwebp libwebp-devel ImageMagick libxml2-devel.x86_64 openssl.x86_64 openssl-devel.x86_64 bzip2-devel.x86_64 libcurl.x86_64 libcurl-devel.x86_64 libjpeg libpng.x86_64 freetype.x86_64 libjpeg-devel libpng-devel.x86_64 freetype-devel.x86_64 libmcrypt libmcrypt-devel mysql-devel -y #解决依赖
    cd ${logdir}
    download_pac "${php_pac}" php #php 7.2.2
    mv mirror php-7.2.2.tar.gz
    #解压安装包
    tar -xvf php-7.2.2.tar.gz
    
    #安装php
    cd ${logdir}php-7.2.2
    ./configure --prefix=${basedir}php --with-libxml-dir --with-apxs2=${basedir}apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-gd --enable-gd-native-ttf --with-jpeg-dir --with-png-dir --with-webp-dir --with-zlib --enable-xml --disable-rpath --enable-magic-quotes --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
    make && make install
    cp php.ini-development ${basedir}php/lib/php.ini
    #php安全配置
    sed -i 's/disable_classes =/disable_classes = COM,pcntl_exec,putenv,mail,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,popen,dl,syslog,show_source,socket_create/g' ${basedir}php/lib/php.ini
    sed -i 's/disable_functions =/disable_functions = COM,pcntl_exec,putenv,mail,passthru,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,popen,dl,syslog,show_source,socket_create/g' ${basedir}php/lib/php.ini
    echo "-----php安装完毕-----" >${logdir}php.log
    echo "[php]" >>${logdir}php.log
    echo "版本:`${basedir}php/bin/php -v | head -1 | awk '{print $2}'`" >>${logdir}php.log
    echo "安装目录:${basedir}php" >>${logdir}php.log
}

#安装nginx
function install_nginx()
{
#    rpm -e `rpm -qa|grep -E "nginx"` #卸载残余
    yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
    cd ${logdir}
    download_pac "${nginx_pac}" nginx #nginx 1.14.2
    download_pac "${LuaJIT_pac}" LuaJIT #LuaJIT 2.0.5
    download_pac "${ngx_devel_kit_pac}" ngx_devel_kit "-O ngx_devel_kit.zip" #ngx_devel_kit
    download_pac "${openresty_pac}" openresty "-O openresty.zip" #openresty
    download_pac "${ngx_cache_purge_pac}" ngx_cache_purge #ngx_cache_purge 2.3
    download_pac "${ngx_http_substitutions_filter_module}" ngx_http_substitutions "-O ngx_http_substitutions_filter_module.zip"
    download_pac "${nginx_vts}" nginx-vts "-O nginx-vts.zip"
    #解压安装包
    tar -xvf nginx-1.14.2.tar.gz
    tar -xvf LuaJIT-2.0.5.tar.gz
    unzip ngx_devel_kit.zip
    tar -xvf v0.10.14.tar.gz
    unzip ngx_http_substitutions_filter_module.zip
    unzip nginx-vts.zip
    tar -xvf ngx_cache_purge-2.3.tar.gz
    
    cd ${logdir}LuaJIT-2.0.5
    make && make install
    export LUAJIT_LIB=${basedir}lib
    export LUAJIT_INC=${basedir}include/luajit-2.0
    export LD_LIBRARY_PATH=${basedir}lib:$LD_LIBRARY_PATH
    cd ${logdir}nginx-1.14.2
    ./configure --prefix=${basedir}nginx --user=www --group=www --with-mail --with-mail_ssl_module --with-http_ssl_module --with-http_flv_module --with-http_dav_module --with-http_sub_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --add-module=${logdir}ngx_cache_purge-2.3/ --add-module=${logdir}ngx_devel_kit-master/ --add-module=${logdir}lua-nginx-module-0.10.14/ --add-module=${logdir}ngx_http_substitutions_filter_module-master/ --add-module=${logdir}nginx-module-vts-master/
    make && make install
    ln -s ${basedir}nginx/sbin/nginx /usr/bin/nginx
    ln -s ${basedir}lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
    echo -e '#!/bin/sh\n# chkconfig: - 85 15 \n# description: nginx is a World Wide Web server. It is used to serve \n#               proxy and IMAP/POP3 proxy server\n# Description:        Start and Stop Nginx\n# Provides:        nginx\n# Default-Start:    2 3 4 5\n# Default-Stop:        0 1 6\nPATH=${basedir}sbin:${basedir}bin:/sbin:/bin:/usr/sbin:/usr/bin\nNAME=nginx\nNGINX_BIN=${basedir}nginx/sbin/$NAME\nCONFIGFILE=${basedir}nginx/conf/$NAME.conf\nPIDFILE=/home/www/pid/$NAME.pid\nSCRIPTNAME=/etc/init.d/$NAME\ncase "$1" in\nstart)\necho -n "Starting $NAME... "\nif netstat -tnpl | grep -q nginx;then\necho "$NAME (pid `pidof $NAME`) already running."\nexit 1\nfi\n$NGINX_BIN -c $CONFIGFILE\nif [ "$?" != 0 ] ; then\necho " failed"\nexit 1\nelse\necho " done"\nfi\n;;\nstop)\necho -n "Stoping $NAME... "\nif ! netstat -tnpl | grep -q nginx; then\necho "$NAME is not running."\nexit 1\nfi\n$NGINX_BIN -s stop\nif [ "$?" != 0 ] ; then\necho " failed. Use force-quit"\nexit 1\nelse\necho " done"\nfi\n;;\nstatus)\nif netstat -tnpl | grep -q nginx; then\nPID=`pidof nginx`\necho "$NAME (pid $PID) is running..."\nelse\necho "$NAME is stopped"\nexit 0       \nfi\n;;\nforce-quit)\necho -n "Terminating $NAME... "\nif ! netstat -tnpl | grep -q nginx; then\necho "$NAME is not running."\nexit 1\nfi\nkill `pidof $NAME`\nif [ "$?" != 0 ] ; then\necho " failed"\nexit 1\nelse\necho " done"   \nfi\n;;\nrestart)\n$SCRIPTNAME stop\nsleep 1\n$SCRIPTNAME start\n;;\nreload)                                                                                      \necho -n "Reload service $NAME... "\nif netstat -tnpl | grep -q nginx; then\n$NGINX_BIN -s reload\necho " done"\nelse\necho "$NAME is not running, can not reload."\nexit 1\nfi\n;;\nconfigtest)\necho -n "Test $NAME configure files... "\n$NGINX_BIN -t\n;;\n*)\necho "Usage: $SCRIPTNAME {start|stop|force-quit|restart|reload|status|configtest}"\nexit 1\n;;\nesac\n' >/etc/init.d/nginx
    chmod a+x /etc/init.d/nginx
    chkconfig --add nginx
    chkconfig --level 2345 nginx on
    #启动nginx
    service nginx start
    #防火墙添加80端口
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    service iptables save
    echo "-----nginx安装并启动完毕-----" >${logdir}nginx.log
    echo "[nginx]" >>${logdir}nginx.log
    echo "版本:1.14.2" >>${logdir}nginx.log
    echo "安装目录:${basedir}nginx" >>${logdir}nginx.log
}

#安装redis
function install_redis()
{
#    rpm -e `rpm -qa|grep -E "redis"` #卸载残余
        cd ${logdir}
    download_pac "${redis_pac}" redis  #redis 4.0.1
    
    #解压安装包
    tar -xvf redis-4.0.1.tar.gz
    
    #安装redis 4.0.1
    cd ${logdir}redis-4.0.1
    make
    cd src
    make install PREFIX=${basedir}redis
    cd ..
    cp ${basedir}redis/redis.conf ${basedir}redis/redis.conf.bak
    #修改redis默认数据目录为/home/data/redis
    sed -i 's/dir .\//dir \/home\/data\/redis/g' ${basedir}redis/redis.conf
    mkdir -p /home/data/redis
    #后台运行
    sed -i 's/daemonize no/daemonize yes/g' ${basedir}redis/redis.conf
    #开机启动
    echo  "${basedir}redis/bin/redis-server ${basedir}redis/redis.conf" >> /etc/rc.local
    #添加随机高安全redis口令
    redis_passwd=`random_passwd 20`
    sed "/SECURITY/a\requirepass ${redis_passwd}" ${basedir}redis/redis.conf
    #启动redis
    ${basedir}redis/bin/redis-server ${basedir}redis/redis.conf
    echo "-----redis安装并启动完毕-----" >${logdir}redis.log
        echo "[redis]" >>${logdir}redis.log
        echo "版本:`${basedir}redis/bin/redis-server -v | awk '{print $3}' | awk -F= '{print $2}'`" >>${logdir}redis.log
        echo "安装目录:${basedir}redis" >>${logdir}redis.log
        echo "数据目录:/home/data/redis" >>${logdir}redis.log
    echo "密码:${redis_passwd}" >>${logdir}redis.log
}

#安装mysql
function install_mysql()
{
    rm -fr /etc/my.cnf #删除默认mysql配置文件
    groupadd mysql && useradd -g mysql -s /bin/false mysql #添加用户
        cd ${logdir}
    yum install -y bison bison-devel ncurses ncurses-devel perl
    download_pac "${mysql_pac}" mysql #mysql 5.6.38
    
    #解压安装包
    tar -xvf mysql-5.6.42.tar.gz
    
    #安装mysql 5.6.42
    cd ${logdir}mysql-5.6.42
    #设置mysql默认数据目录为/home/data/mysql
    mkdir -p /home/data/mysql && chown -R mysql.mysql /home/data/mysql
    cmake . -DCMAKE_INSTALL_PREFIX=${basedir}mysql -DMYSQL_DATADIR=/home/data/mysql -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci
    make && make install
    #初始化mysql
    ${basedir}mysql/scripts/mysql_install_db --user=mysql --basedir=${basedir}mysql --datadir=/home/data/mysql
    ln -s ${basedir}mysql/my.cnf /etc/my.cnf
    cp ${basedir}mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
    #添加开机启动
    chmod 755 /etc/init.d/mysqld
    chkconfig mysqld on
    #启动mysql
    service mysqld start
    #添加20位随机高安全root密码
    mysql_passwd=`random_passwd 20`
    ${basedir}mysql/bin/mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '${mysql_passwd}' WITH GRANT OPTION;"
    ${basedir}mysql/bin/mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '${mysql_passwd}' WITH GRANT OPTION;"
    echo "-----mysql安装并启动完毕-----" >${logdir}mysql.log
        echo "[mysql]" >>${logdir}mysql.log
        echo "版本:`${basedir}mysql/bin/mysqld -V | awk '{print $3}'`" >>${logdir}mysql.log
        echo "安装目录:${basedir}mysql" >>${logdir}mysql.log
        echo "数据目录:/home/data/mysql" >>${logdir}mysql.log
    echo "root密码:${mysql_passwd}" >>${logdir}mysql.log
}

#apache添加php支持
function apache_add_php()
{
    sed -i 's/#LoadModule rewrite_module modules/LoadModule rewrite_module modules/g' ${basedir}apache/conf/httpd.conf
    echo -e "<FilesMatch \.php$>\n\tSetHandler application/x-httpd-php\n</FilesMatch>" >>${basedir}apache/conf/httpd.conf
    sed -i "s/DirectoryIndex\ index.html/DirectoryIndex\ index.html\ index.php/g" ${basedir}apache/conf/httpd.conf
    service httpd restart
}

#php安装redis扩展
function install_php_redis()
{
    cd ${logdir}
    download_pac "${php_redis_pac}" redis #php_redis 4.2.0 扩展
    tar -zxvf redis-4.2.0.tgz
    cd ${logdir}redis-4.2.0
    ${basedir}php/bin/phpize
    ./configure --with-php-config=${basedir}php/bin/php-config
    make && make install
    sed -i 's/\;extension=php_bz2/extension=redis.so\n\;extension=php_bz2/g' ${basedir}php/lib/php.ini
}

#php安装tidy扩展
function install_php_tidy()
{
    yum install libtidy libtidy-devel -y
    cd ${logdir}php-7.1.10
    cd ext
    cd tidy
    ${basedir}php/bin/phpize
    ./configure --with-php-config=${basedir}php/bin/php-config
    make && make install
    sed -i 's/\;extension=php_bz2/extension=tidy.so\n\;extension=php_bz2/g' ${basedir}php/lib/php.ini
}

echo "################################################"
echo "##                                            ##"
echo "##                                            ##"
echo "##  redis mysql apache nginx php 一键安装脚本 ##"
echo "##                                            ##"
echo "##                                            ##"
echo "################################################"
echo "1.一键安装lamp:<apache mysql php>"
echo "2.一键安装lnmp:<nginx mysql php>"
echo "3.单独安装redis 4.1.0"
echo "4.单独安装mysql 5.6.38"
echo "5.单独安装apache 2.4.29"
echo "6.单独安装nginx 1.15.5"
echo "7.单独安装php 7.1.10"
echo "8.单独安装php-redis扩展"
echo "9.单独安装php-tidy扩展"
echo "10.http添加php解析<如果单独安装php并且本地安装了apache在/usr/local/apache,则需选择此项添加php解析>"

read -t 30 -p "请输入你的选择: 1-7 " choose
case "$choose" in
    "1")
        echo "1.一并安装php扩展redis.so、tidy.so"
        echo "2.不安装php扩展redis.so、tidy.so"
        read -t 30 -p "请输入你的选择: 1或2 " addso
        case "${addso}" in
            "1")
                echo 你的选择是1.一键安装lamp,并安装redis.so,tidy.so
                install_apache
                install_php
                install_mysql
                apache_add_php
                install_php_redis
                install_php_tidy
            ;;
            "2")
                echo 你的选择是1.一键安装lamp,不安装redis.so,tidy.so
                install_apache
                install_php
                install_mysql
                apache_add_php
            ;;
            "*")
                echo "请输入1或2"
        esac
    ;;
    "2")
                echo "1.一并安装php扩展redis.so、tidy.so"
                echo "2.不安装php扩展redis.so、tidy.so"
                read -t 30 -p "请输入你的选择: 1或2 " noaddso
                case "${noaddso}" in
                        "1")
                echo 你的选择是1.一键安装lnmp,并安装redis.so,tidy.so
                install_nginx
                install_php
                install_mysql
                install_php_redis
                install_php_tidy
                        ;;
                        "2")
                echo 你的选择是1.一键安装lnmp,不安装redis.so,tidy.so
                install_nginx
                install_php
                install_mysql
                        ;;
                        "*")
                                echo "请输入1或2"
                esac    
    ;;
    "3")
        echo 你的选择是3.单独安装redis 4.1.0
        install_redis
    ;;
    "4")
        
        echo 你的选择是4.单独安装mysql 5.6.38
        install_mysql
    ;;
    "5")
        echo 你的选择是5.单独安装apache 2.4.29
        install_apache
    ;;
    "6")
        echo 你的选择是6.单独安装nginx 1.15.5    
        install_nginx
    ;;
    "7")
        echo 你的选择是7.单独安装php 7.1.10    
        echo "1.一并安装php扩展redis.so、tidy.so"
                echo "2.不安装php扩展redis.so、tidy.so"
                read -t 30 -p "请输入你的选择: 1或2 " php
                case "${php}" in
                        "1")
                                echo 你的选择是1.单独安装php,并安装redis.so,tidy.so
                                install_php
                                install_php_redis
                                install_php_tidy
                        ;;
                        "2")
                                echo 你的选择是1.单独安装php,不安装redis.so,tidy.so
                                install_php
                        ;;
                        "*")
                echo "请选择1或2"
        esac
    ;;
    "8")
            echo 你的选择是8.单独安装php-redis扩展
            install_php_redis
    ;;
    "9")
            echo 你的选择是9.单独安装php-tidy扩展
            install_php_tidy
    ;;
    "10")
            echo 你的选择是10.http添加php解析
            apache_add_php
    ;;
    "*")
    echo "请输入1-7"
esac

#输出信息
cat ${logdir}*.log

#清除临时文件
cd ${logdir}
rm -fr `ls | grep -E "tar|zip"`

下载一键脚本

标签: iptables, linux, vim, yum, php, apache, sed, root, chmod, mysql

如无特殊说明,本博所有文章均为博主原创。

评论啦~