zoukankan      html  css  js  c++  java
  • lamp架构之一键编译安装lamp搭建wordpress和discuz脚本(基于centos)

    源码包准备:

    apr-1.7.0.tar.bz2

    apr-util-1.6.1.tar.bz2

    wordpress-5.4.2-zh_CN.zip

    Discuz_X3.4_SC_UTF8【20191201】.zip

    httpd-2.4.46.tar.bz2

    mariadb-10.2.31-linux-systemd-x86_64.tar.gz

    oniguruma5php-6.9.5+rev1-4.el8.remi.x86_64.rpm

    oniguruma5php-devel-6.9.5+rev1-4.el8.remi.x86_64.rpm

    php-7.4.12.tar.bz2

    #!/bin/sh
    . /etc/init.d/functions
    set -e
    
    #定义变量
    PACKAGE="
    gcc
    make
    pcre-devel
    openssl-devel
    expat-devel
    bzip2
    wget
    openssl
    bzip2-devel
    unzip
    perl-Data-Dumper
    libaio-devel
    ncurses-compat-libs
    ncurses-libs
    libaio
    ncurses-c++-libs
    libxml2-devel
    libmcrypt-devel
    sqlite-devel
    oniguruma-devel
    "
    http_file=/apps/httpd
    ML=/root
    PHPPAGE=php-7.4.12.tar.bz2
    cudirectory=/root
    php_file=/apps/php74
    phpversion=php-7.4.12
    
    #php特定包,需事先放在root家目录下
    yum -y install oniguruma5php-6.9.5+rev1-4.el8.remi.x86_64.rpm && action "oniguruma5php-6.9.5安装完成" || { action "oniguruma5php-6.9.5安装失败,请检查包是否存在!" false;exit; }
    yum -y install oniguruma5php-devel-6.9.5+rev1-4.el8.remi.x86_64.rpm && action "oniguruma5php-devel-6.9.5安装完成"
    for PACK in $PACKAGE;do
        rpm -q $PACK &> /dev/null || yum -y -q install $PACK
    done
    
    #安装httpd
    function install_httpd {
    #判断是否在源码包目录
    [[ `pwd` == /root ]] || cd
    #下载相关源码包
    [ -f /root/apr-1.7.0.tar.bz2 ] || wget https://downloads.apache.org//apr/apr-1.7.0.tar.bz2 &> /dev/null
    [ -f /root/apr-util-1.6.1.tar.bz2 ] || wget https://downloads.apache.org//apr/apr-util-1.6.1.tar.bz2 &> /dev/null
    [ -f /root/httpd-2.4.46.tar.bz2 ] || wget https://downloads.apache.org//httpd/httpd-2.4.46.tar.bz2 &> /dev/null
    
    #解压相关源码包
    tar xf httpd-2.4.46.tar.bz2
    tar xf apr-1.7.0.tar.bz2 && mv apr-1.7.0 ${ML}/httpd-2.4.46/srclib/apr
    tar xf apr-util-1.6.1.tar.bz2 && mv ${ML}/apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
    
    #编译
    [ -d $http_file ] || mkdir -p $http_file
    cd ${ML}/httpd-2.4.46
    ./configure --prefix=$http_file --enable-so --with-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork  &> /dev/null && action "编译完成" || { action "编译失败" false; exit; }
    
    #安装
    make -j `lscpu | awk '/^CPU(s)/{print $2}'` &> /dev/null  && { make install &> /dev/null; action "httpd安装完成"; }
    
    #创建用户
    id apache &> /dev/null || useradd -s /sbin/nologin -r apache
    
    #修改配置文件中的启动用户
    sed -i 's/^User.*/User apache/' ${http_file}/conf/httpd.conf
    sed -i 's/^Group.*/Group apache/' ${http_file}/conf/httpd.conf
    
    #配置httpd支持php-fpm
    cat >> ${http_file}/conf/httpd.conf <<EOF
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    AddType application/x-httpd-php .php
    ProxyRequests Off
    IncludeOptional conf.d/*.conf
    EOF
    sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/' ${http_file}/conf/httpd.conf
    [ -d ${http_file}/conf.d ] || mkdir -p ${http_file}/conf.d
    [ -f ${http_file}/conf.d/server.conf ] || touch ${http_file}/conf.d/server.conf
    cat > ${http_file}/conf.d/server.conf << EOF
    <virtualhost *:80>
    servername www.blog.org
    documentroot /data/wordpress
    <directory /data/wordpress>
    require all granted
    </directory>
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
    #实现status和ping页面
    ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
    CustomLog "logs/access_wordpress_log" common
    </virtualhost>
    
    <virtualhost *:80>
    servername www.forum.org
    documentroot /data/discuz
    <directory /data/discuz/>
    require all granted
    </directory>
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/discuz/$1
    CustomLog "logs/access_discuz_log" common
    </virtualhost> 
    EOF
    
    #配置环境变量
    echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
    source /etc/profile.d/httpd.sh
    
    #配置man帮助
    echo 'MANDATORY_MANPATH          /apps/httpd/man' >> /etc/man_db.conf
    
    #创建服务启动文件
    cat > /usr/lib/systemd/system/httpd.service <<EOF
    [Unit]
    Description=The Apache HTTP Server
    After=network.target remote-fs.target nss-lookup.target
    Documentation=man:httpd(8)
    Documentation=man:apachectl(8)
    
    [Service]
    Type=forking
    #EnvironmentFile=/etc/sysconfig/httpd
    ExecStart=/apps/httpd/bin/apachectl start
    #ExecStart=/apps/httpd/bin/httpd $OPTIONS -k start
    ExecReload=/apps/httpd/bin/apachectl graceful
    #ExecReload=/apps/httpd/bin/httpd $OPTIONS -k graceful
    ExecStop=/apps/httpd/bin/apachectl stop
    KillSignal=SIGCONT
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    #启动服务
    systemctl daemon-reload
    systemctl enable --now httpd.service &> /dev/null && action "httpd服务启动成功" || action "httpd服务启动失败,请检查配置文件" false
    }
    
    #安装数据库
    function install_mysql {
    #判断是否在源码包目录
    [[ `pwd` == /root ]] || cd
    
    #创建mysql用户
    id mysql &> /dev/null || { useradd -r -d /data/mysql -s /sbin/nologin mysql ; action "创建用户成功"; }
    
    #创建mysql的家目录文件夹
    mkdir -pv /data/mysql && chown mysql:mysql  /data/mysql
    
    #解压二进制程序
    tar xvf mariadb-10.2.31-linux-systemd-x86_64.tar.gz -C /usr/local
    
    #将原文件创建为软链接
    ln -sv /usr/local/mariadb-10.2.31-linux-systemd-x86_64 /usr/local/mysql
    chown -R root:root /usr/local/mysql/
    
    #环境变量
    echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
    source /etc/profile.d/mysql.sh
    
    #准备配置文件
    cp -b /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
    cat > /etc/my.cnf <<EOF
    [mysqld]
    datadir = /data/mysql
    innodb_file_per_table = on
    skip_name_resolve = on
    socket=/data/mysql/mysql.sock
    log-error=/data/mysql/mysql.log
    pid-file=/data/mysql/mysql.pid
    
    [client]
    port=3306 
    socket=/data/mysql/mysql.sock
    EOF
    
    #创建数据库文件
    /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql
    
    #服务启动文件
    cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    service mysqld start
    #创建wordpress和discuz数据库
    /usr/local/mysql/bin/mysql -e "create database wordpress;"
    /usr/local/mysql/bin/mysql -e "create database discuz;"
    /usr/local/mysql/bin/mysql -e "grant all on wordpress.* to wordpress@'10.0.0.%' identified by '123456';"
    /usr/local/mysql/bin/mysql -e "grant all on discuz.* to discuz@'10.0.0.%' identified by '123456';"
    }
    
    #安装php
    function install_php {
    #判断是否在包文件目录
    [[ `pwd` == /root ]] || cd
    
    #解压文件
    tar -jxvf $PHPPAGE  &> /dev/null && action "php源码包解压完成"
    [ -d $php_file ] || mkdir -p $php_file
    
    #编译
    cd ${cudirectory}/$phpversion
    ./configure 
        --prefix=$php_file 
        --enable-mysqlnd 
        --with-mysqli=mysqlnd 
        --with-pdo-mysql=mysqlnd 
        --with-openssl   
        --with-zlib 
        --with-config-file-path=/etc 
        --with-config-file-scan-dir=/etc/php.d 
        --enable-mbstring 
        --enable-xml 
        --enable-sockets 
        --enable-fpm 
        --enable-maintainer-zts 
        --disable-fileinfo
    
    #安装
    make -j `lscpu | awk '/^CPU(s)/{print $2}'` && make install
    
    #准备环境变量
    echo "PATH=${php_file}/bin:$PATH" > /etc/profile.d/php.sh
    source /etc/profile.d/php.sh
    
    #准备配置文件
    cp $cudirectory/${phpversion}/php.ini-production /etc/php.ini
    cp ${php_file}/etc/php-fpm.conf.default ${php_file}/etc/php-fpm.conf
    cp ${php_file}/etc/php-fpm.d/www.conf.default ${php_file}/etc/php-fpm.d/www.conf 
    
    #准备服务启动文件
    cp $cudirectory/${phpversion}/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    
    #修改进程所有者
    sed -i 's/^user.*/user = apache/' ${php_file}/etc/php-fpm.d/www.conf
    sed -i 's/^group.*/group = apache/' ${php_file}/etc/php-fpm.d/www.conf
    
    #支持status和ping页面
    echo 'pm.status_path = /fpm_status' >> ${php_file}/etc/php-fpm.d/www.conf
    echo 'ping.path = /ping' >> ${php_file}/etc/php-fpm.d/www.conf
    
    #设置支持opcache加速
    [ -d /etc/php.d ] || mkdir -p /etc/php.d/
    cat > /etc/php.d/opcache.ini <<EOF
    [opcache]
    zend_extension=opcache.so              
    opcache.enable=1
    EOF
    
    #启动服务
    systemctl daemon-reload
    systemctl enable --now php-fpm.service && action "php-fpm服务启动成功" || action "php-fpm服务启动失败,请检查配置文件" false
    }
    
    #安装mysql
    if [[ `systemctl status mysql | awk '/Active/{print $2}'` == active ]] ;then
        action "数据库已安装过,跳过"
    else
        install_mysql && action "数据库安装完成" || action "数据库安装失败,请检查配置文件" false
    fi
    
    #安装apache
    if [[ `systemctl status httpd | awk '/Active/{print $2}'` == active ]] ;then
        action "apache已安装过,跳过"
    else
        install_httpd && action "apache安装完成" || action "apache安装失败,请检查配置文件" false
    fi
    
    #安装php
    if [[ `systemctl status php-fpm | awk '/Active/{print $2}'` == active ]] ;then
        action "apache已安装过,跳过"
    else
        install_php action "php安装完成" || action "php安装失败,请检查配置文件" false
    fi
    
    #配置wordpress
    function install_wordpress {
    [[ `pwd` == /root ]] || cd
    rpm -q unzip || yum -y install unzip &> /dev/null
    [ -f /root/wordpress-5.4.2-zh_CN.zip ] && unzip wordpress-5.4.2-zh_CN.zip || action "wordpress源码包不存在"
    mv /root/wordpress /data
    setfacl -R -m u:apache:rwx /data/wordpress/
    }
    
    #配置discuz
    function install_discuz {
    [[ `pwd` == /root ]] || cd
    [ -f Discuz_X3.4_SC_UTF8【20191201】.zip ] && unzip Discuz_X3.4_SC_UTF8【20191201】.zip || action "discuz源码包不存在"
    [ -d /data/discuz ] || mkdir -p /data/discuz
    mv /root/DiscuzX/upload/* /data/discuz
    setfacl -R -m u:apache:rwx /data/discuz/
    }
    
    install_wordpress && action "wordpress配置完成" || action "wordpress配置失败,请检查文件" false
    install_discuz && action "discuz配置完成" || action "discuz配置失败,请检查文件" false
  • 相关阅读:
    SAP分析云及协同计划
    使用SSH命令行远程登录运行在CloudFoundry上的应用
    如何远程调试部署在CloudFoundry平台上的nodejs应用
    Apache httpclient的execute方法调试
    如何用Java代码在SAP Marketing Cloud里创建contact数据
    nodejs request module里的json参数的一个坑
    如何在调用Marketing Cloud contact创建API时增加对扩展字段的支持
    Efim and Strange Grade
    Vitya in the Countryside
    Anatoly and Cockroaches
  • 原文地址:https://www.cnblogs.com/nj-duzi/p/13909568.html
Copyright © 2011-2022 走看看