通过编写 shell 脚本实现二进制安装 LAMP 架构的 word press

1. 准备httpd脚本

  1. #!/bin/bash
  2. install_httpd(){
  3. . /etc/init.d/functions
  4. install_dir=/apps/httpd
  5. make_dir=/usr/local
  6. APR=https://downloads.apache.org//apr/apr-1.7.0.tar.bz2
  7. APR_FILE=${APR##*/}
  8. APR_DIR=${APR_FILE%.tar*}
  9. APR_UTIL=https://downloads.apache.org//apr/apr-util-1.6.1.tar.gz
  10. APR_UTIL_FILE=${APR_UTIL##*/}
  11. APR_UTIL_DIR=${APR_UTIL_FILE%.tar*}
  12. HTTPD=https://downloads.apache.org//httpd/httpd-2.4.46.tar.gz
  13. HTTPD_FILE=${HTTPD##*/}
  14. HTTPD_DIR=${HTTPD_FILE%.tar*}
  15. echo "开始编译安装httpd..."
  16. #安装httpd相关的包
  17. yum install -y wget gcc make pcre-devel openssl-devel expat-devel bzip2 &> /dev/null || { action "安装相关包失败" false; exit; }
  18. #下载并解压源码包
  19. cd $make_dir/src
  20. #wget $APR || { action "下载apr源码包失败" false; exit; }
  21. #wget $APR_UTIL || { action "下载apr-util源码包失败" false; exit; }
  22. #wget $HTTPD || { action "下载httpd源码包失败" false; exit; }
  23. tar xf $APR_FILE -C $make_dir
  24. tar xf $APR_UTIL_FILE -C $make_dir
  25. tar xf $HTTPD_FILE -C $make_dir
  26. cd $make_dir
  27. mv $APR_DIR $HTTPD_DIR/srclib/apr
  28. mv $APR_UTIL_DIR $HTTPD_DIR/srclib/apr-util
  29. cd $HTTPD_DIR
  30. echo "正在生成httpd数据文件..."
  31. ./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
  32. make &> /dev/null && make install &> /dev/null && action "编译成功!" || { action "编译失败" false; exit; }
  33. #创建apache账户及htppd用户
  34. id apache &> /dev/null || useradd -s /sbin/nologin -r apache
  35. sed -i "s/^User .*/User apache/" $install_dir/conf/httpd.conf
  36. sed -i "s/^Group .*/Group apache/" $install_dir/conf/httpd.conf
  37. #配置path变量
  38. echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
  39. source /etc/profile.d/httpd.sh
  40. #创建service unit文件(CentOS 7 以上版本)
  41. cat > /usr/lib/systemd/system/httpd.service <<EOF
  42. [Unit]
  43. Description=The Apache HTTP Server
  44. After=network.target remote-fs.target nss-lookup.target
  45. Documentation=man:httpd(8)
  46. Documentation=man:apachectl(8)
  47. [Service]
  48. Type=forking
  49. #EnvironmentFile=/etc/sysconfig/httpd
  50. ExecStart=/apps/httpd/bin/apachectl start
  51. #ExecStart=/apps/httpd/bin/httpd $OPTIONS -k start
  52. ExecReload=/apps/httpd/bin/apachectl graceful
  53. #ExecReload=/apps/httpd/bin/httpd $OPTIONS -k graceful
  54. ExecStop=/apps/httpd/bin/apachectl stop
  55. KillSignal=SIGCONT
  56. PrivateTmp=true
  57. [Install]
  58. WantedBy=multi-user.target
  59. EOF
  60. #修改httpd的配置支持php-fpm
  61. sed -i 's/^#LoadModule proxy_module .*/LoadModule proxy_module modules\/mod_proxy.so/ ' $install_dir/conf/httpd.conf
  62. sed -i "s/^#LoadModule proxy_fcgi_module .*/LoadModule proxy_fcgi_module modules\/mod_proxy_fcgi.so/" $install_dir/conf/httpd.conf
  63. sed -i "s/^ DirectoryIndex .*/ DirectoryIndex index.php index.html/" $install_dir/conf/httpd.conf
  64. echo '
  65. AddType application/x-httpd-php .php
  66. #AddType application/x-httpd-php-source .phps
  67. ProxyRequests Off
  68. <virtualhost *:80>
  69. servername blog.magedu.org
  70. documentroot /data/wordpress
  71. <directory /data/wordpress>
  72. require all granted
  73. </directory>
  74. ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
  75. #实现status和ping页面
  76. ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
  77. CustomLog "logs/access_wordpress_log" common
  78. </virtualhost>
  79. ' >> /apps/httpd/conf/httpd.conf
  80. systemctl daemon-reload
  81. systemctl enable --now httpd &> /dev/null && action "httpd 服务启动成功" || { action "httpd 启动失败" false ;exit; }
  82. }

2. 准备数据库脚本

  1. install_mariadb(){
  2. #FILE="https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.2.34/bintar-linux-systemd-x86_64/mariadb-10.2.34-linux-systemd-x86_64.tar.gz"
  3. NAME=mariadb-10.2.31-linux-systemd-x86_64.tar.gz
  4. MARIADB='mariadb-10.2.31-linux-systemd-x86_64'
  5. BASEDIR='/usr/local/mysql'
  6. PASSWORD='123456'
  7. echo "开始安装${MARIADB}..."
  8. #yum install libaio numactl-libs wget &> /dev/null
  9. if id mysql &> /dev/null ;then
  10. echo "mysql用户已经创建,"
  11. else
  12. useradd -r -s /sbin/nologin mysql
  13. echo "mysql用户创建成功"
  14. fi
  15. #wget -P /usr/local/src $FILE
  16. cd /usr/local/src
  17. echo "正在解压二进制包,请稍等..."
  18. tar xf $NAME -C /usr/local && echo "解压完成!" || { echo "解压失败,自动退出" ; exit ; }
  19. ln -s /usr/local/$MARIADB $BASEDIR
  20. chown -R mysql:mysql $BASEDIR
  21. echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
  22. source /etc/profile.d/mysql.sh
  23. cp /etc/my.cnf{,.bak}
  24. cat > /etc/my.cnf <<EOF
  25. [mysqld]
  26. datadir=/data/mysql
  27. skip_name_resolve=1
  28. socket=/data/mysql/mysql.sock
  29. log-error=/data/mysql/mysql.log
  30. pid-file=/data/mysql/mysql.pid
  31. [client]
  32. socket=/data/mysql/mysql.sock
  33. EOF
  34. echo "数据库安装文件准备成功,正在生成数据库文件..."
  35. cd $BASEDIR
  36. bash scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql --basedir=$BASEDIR &> /dev/null
  37. if [ $? = 0 ];then
  38. echo "数据库文件生成成功,正在启动..."
  39. else
  40. echo "数据库文件生成失败,自动退出!"
  41. exit
  42. fi
  43. cp support-files/systemd/mariadb.service /etc/systemd/system/
  44. systemctl daemon-reload
  45. if systemctl start mariadb ;then
  46. echo "数据库启动成功,正在执行安全加固脚本..."
  47. else
  48. echo "数据库启动失败,自动退出"
  49. exit
  50. fi
  51. ln -s /data/mysql/mysql.sock /tmp/mysql.sock
  52. bash $BASEDIR/bin/mysql_secure_installation &> /dev/null <<EOF
  53. y
  54. $PASSWORD
  55. $PASSWORD
  56. y
  57. y
  58. y
  59. y
  60. EOF
  61. echo "${MARIADB}已经安装完成"
  62. #为wordprss创建数据库用户账号
  63. /usr/local/mysql/bin/mysql -uroot -p123456 -e 'create database wordpress'
  64. /usr/local/mysql/bin/mysql -uroot -p123456 -e "grant all on wordpress.* to wordpress@'10.0.%.%' identified by '123456'"
  65. }

3. 准备php脚本

  1. install_php(){
  2. . /etc/init.d/functions
  3. make_dir=/usr/local
  4. PHP=https://www.php.net/distributions/php-7.3.15.tar.xz
  5. PHP_FILE=${PHP##*/}
  6. PHP_DIR=${PHP_FILE%.tar*}
  7. INSTALL_DIR=/apps/php
  8. echo "正在准备安装${PHP_DIR}..."
  9. #安装php的相关包
  10. yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel openssl-devel wget &> /dev/null || { action "PHP安装相
  11. 关包失败" false; exit; }
  12. #下载php源码包
  13. #wget -P $make_dir/src $PHP || { action "下载php包失败" false; exit; }
  14. cd $make_dir/src
  15. tar xf $PHP_FILE -C $make_dir
  16. cd $make_dir/$PHP_DIR
  17. echo "php正在编译中,请稍等..."
  18. ./configure --prefix=/apps/php --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --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
  19. make && make install && action "php编译成功!" || { action "php编译失败" false; exit; }
  20. #配置path变量
  21. echo 'PATH=/apps/php/bin:$PATH' > /etc/profile.d/php.sh
  22. source /etc/profile.d/php.sh
  23. #准备php配置文件和启动脚本
  24. cp $make_dir/$PHP_DIR/php.ini-production $INSTALL_DIR/etc/php.ini
  25. cp $make_dir/$PHP_DIR/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
  26. cd $INSTALL_DIR/etc
  27. cp php-fpm.conf.default php-fpm.conf
  28. cd php-fpm.d/
  29. cp www.conf.default www.conf
  30. sed -i "s/^user .*/user = apache/" $INSTALL_DIR/etc/php-fpm.d/www.conf
  31. sed -i "s/^group .*/group = apache/" $INSTALL_DIR/etc/php-fpm.d/www.conf
  32. #sed -i.bak "s/^;pm.status_path .*/pm.status_path = //fpm_status/" $INSTALL_DIR/etc/php-fpm.d/www.conf
  33. #sed -i.bak "s/^;ping.path .*/ping.path = //ping/" $INSTALL_DIR/etc/php-fpm.d/www.conf
  34. echo 'pm.status_path = /fpm_status' >> $INSTALL_DIR/etc/php-fpm.d/www.conf
  35. echo 'ping.path = /ping' >> $INSTALL_DIR/etc/php-fpm.d/www.conf
  36. mkdir $INSTALL_DIR/etc/php.d/
  37. cat > $INSTALL_DIR/etc/php.d/opcache.ini <<EOF
  38. [opcache]
  39. zend_extension=opcache.so
  40. opcache.enable=1
  41. EOF
  42. systemctl daemon-reload
  43. systemctl enable --now php-fpm.service &> /dev/null && action "php 服务启动成功" || { action "php 启动失败" false ;exit; }
  44. }

4. 准备wordpress文件

  1. echo "准备wordpress文件..."
  2. #wget -P /usr/local/src https://cn.wordpress.org/latest-zh_CN.zip &> /dev/null
  3. tar xf wordpress-5.4.2-zh_CN.tar.gz
  4. mv wordpress/ /data
  5. chown -R apache.apache wordpress/

5. 最后修改windows的hosts文件

image.png
在最末尾加上10.0.1.17 blog.magedu.org
image.png
image.png
完成,接下来根据提示配置即可
**