1. #!/bin/bash
    2. #Description: LNMP wordpress 博客系统
    3. SRC_DIR=/usr/local/src
    4. NGINX='nginx-1.18.0.tar.gz'
    5. MYSQL='mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz'
    6. PHP='php-7.4.10.tar.xz'
    7. APP='wordpress-5.6.2-zh_CN.tar.gz'
    8. COLOR="echo -e \\033[01;31m"
    9. END='\033[0m'
    10. MYSQL_ROOT_PASSWORD=laowang
    11. MYSQL_WORDPRESS_PASSWORD=laowang
    12. CPU=`lscpu| awk '/^CPU\(s\):/{print $NF}'`
    13. ${COLOR}'开始安装基于LNMP的wordpress'$END
    14. sleep 3
    15. check_file (){
    16. cd $SRC_DIR
    17. $COLOR"请将相关软件放在${SRC_DIR}目录下"$END
    18. if [ ! -e $NGINX ];then
    19. $COLOR"缺少${NGINX}文件"$END
    20. exit
    21. elif [ ! -e $MYSQL ];then
    22. $COLOR"缺少${MYSQL}文件"$END
    23. exit
    24. elif [ ! -e $PHP ];then
    25. $COLOR"缺少${PHP}文件"$END
    26. exit
    27. elif [ ! -e $APP ];then
    28. $COLOR"缺少${APP}文件"$END
    29. exit
    30. else
    31. $COLOR"相关文件已准备好"$END
    32. fi
    33. }
    34. install_mysql(){
    35. $COLOR"开始安装MySQL数据库"$END
    36. cd $SRC_DIR
    37. tar xf $MYSQL -C /usr/local/
    38. if [ -e /usr/local/mysql ];then
    39. $COLOR"数据库已存在,安装失败"$END
    40. exit
    41. fi
    42. MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`
    43. ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
    44. chown -R root.root /usr/local/mysql/
    45. id mysql &> /dev/null || { useradd -s /sbin/nologin -r mysql ; $COLOR"创建mysql用户"$END; }
    46. yum -y -q install numactl-libs libaio &> /dev/null
    47. echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/lamp.sh
    48. . /etc/profile.d/lamp.sh
    49. cat > /etc/my.cnf <<-EOF
    50. [mysqld]
    51. server-id=1
    52. log-bin
    53. datadir=/data/mysql
    54. socket=/data/mysql/mysql.sock
    55. log-error=/data/mysql/mysql.log
    56. pid-file=/data/mysql/mysql.pid
    57. [client]
    58. socket=/data/mysql/mysql.sock
    59. EOF
    60. [ -d /data ] || mkdir /data
    61. mysqld --initialize --user=mysql --datadir=/data/mysql
    62. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    63. chkconfig --add mysqld
    64. chkconfig mysqld on
    65. service mysqld start
    66. [ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }
    67. MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`
    68. mysqladmin -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/null
    69. $COLOR"数据库安装完成"$END
    70. }
    71. install_nginx(){
    72. ${COLOR}"开始安装NGINX"$END
    73. id nginx &> /dev/null || { useradd -s /sbin/nologin -r nginx; $COLOR"创建nginx用户"$END; }
    74. $COLOR"安装nginx相关包"$END
    75. yum -q -y install gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed git &> /dev/null
    76. cd $SRC_DIR
    77. tar xf $NGINX
    78. # git clone https://github.com/openresty/echo-nginx-module.git || { $COLOR"下载NGINX第三方模块失败,退出!"$END;exit; }
    79. NGINX_DIR=`echo $NGINX| sed -nr 's/^(.*[0-9]).*/\1/p'`
    80. cd $NGINX_DIR
    81. ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_perl_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
    82. make -j $CPU && make install
    83. [ $? -eq 0 ] && $COLOR"NGINX编译安装成功"$END || { $COLOR"NGINX编译安装失败,退出!"$END;exit; }
    84. [ -d /data/www ] || mkdir -pv /data/www/
    85. cat > /apps/nginx/conf/nginx.conf <<EOF
    86. worker_processes auto;
    87. events {
    88. worker_connections 10240;
    89. }
    90. http {
    91. include mime.types;
    92. default_type application/octet-stream;
    93. server_tokens off;
    94. log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" '
    95. sendfile on;
    96. client_max_body_size 100m;
    97. keepalive_timeout 65;
    98. server {
    99. listen 80 default_server;
    100. server_name localhost ;
    101. root /data/www ;
    102. access_log logs/nginx.access.log main;
    103. location / {
    104. root /data/www/;
    105. index index.php index.html index.htm;
    106. }
    107. error_page 500 502 503 504 /50x.html;
    108. location = /50x.html {
    109. root html;
    110. }
    111. location ~ \.php$ {
    112. root /data/www;
    113. fastcgi_pass 127.0.0.1:9000;
    114. fastcgi_index index.php;
    115. fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
    116. include fastcgi_params;
    117. }
    118. }
    119. }
    120. EOF
    121. echo 'PATH=/apps/nginx/sbin:$PATH' >> /etc/profile.d/lamp.sh
    122. cat > /usr/lib/systemd/system/nginx.service <<EOF
    123. [Unit]
    124. After=network.target remote-fs.target nss-lookup.target
    125. [Service]
    126. Type=forking
    127. ExecStart=/apps/nginx/sbin/nginx
    128. ExecReload=/apps/nginx/sbin/nginx -s reload
    129. ExecStop=/apps/nginx/sbin/nginx -s stop
    130. [Install]
    131. WantedBy=multi-user.target
    132. EOF
    133. systemctl daemon-reload
    134. systemctl start nginx
    135. systemctl is-active nginx &> /dev/null || { $COLOR"NGINX 启动失败,退出!"$END ; exit; }
    136. $COLOR"NGINX安装完成"
    137. }
    138. install_php (){
    139. ${COLOR}"开始安装PHP"$END
    140. yum -y -q install gcc make libxml2-devel bzip2-devel libmcrypt-devel libsqlite3x-devel oniguruma-devel &>/dev/null
    141. cd $SRC_DIR
    142. tar xf $PHP
    143. PHP_DIR=`echo $PHP| sed -nr 's/^(.*[0-9]).*/\1/p'`
    144. cd $PHP_DIR
    145. ./configure --prefix=/apps/php74 --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
    146. make -j $CPU && make install
    147. [ $? -eq 0 ] && $COLOR"PHP编译安装成功"$END || { $COLOR"PHP编译安装失败,退出!"$END;exit; }
    148. cp php.ini-production /etc/php.ini
    149. mkdir /etc/php.d/
    150. cat > /etc/php.d/opcache.ini <<EOF
    151. [opcache]
    152. zend_extension=opcache.so
    153. opcache.enable=1
    154. EOF
    155. cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    156. cd /apps/php74/etc
    157. cp php-fpm.conf.default php-fpm.conf
    158. cd php-fpm.d/
    159. cp www.conf.default www.conf
    160. id nginx &> /dev/null || { useradd -s /sbin/nologin -r nginx; $COLOR"创建nginx用户"$END; }
    161. sed -i.bak -e 's/^user.*/user = nginx/' -e 's/^group.*/group = nginx/' /apps/php74/etc/php-fpm.d/www.conf
    162. systemctl daemon-reload
    163. systemctl start php-fpm
    164. systemctl is-active php-fpm &> /dev/null || { $COLOR"PHP-FPM 启动失败,退出!"$END ; exit; }
    165. $COLOR"PHP安装完成"
    166. }
    167. install_wordpress(){
    168. cd $SRC_DIR
    169. tar xf $APP
    170. [ -d /data/www ] || mkdir -pv /data/www
    171. mv wordpress/* /data/www/
    172. chown -R nginx.nginx /data/www/wp-content/
    173. cd /data/www/
    174. mv wp-config-sample.php wp-config.php
    175. mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create database wordpress;grant all on wordpress.* to wordpress@'127.0.0.1' identified by '$MYSQL_WORDPRESS_PASSWORD'" &>/dev/null
    176. sed -i.bak -e 's/database_name_here/wordpress/' -e 's/username_here/wordpress/' -e 's/password_here/'''$MYSQL_WORDPRESS_PASSWORD'''/' -e 's/localhost/127.0.0.1/' wp-config.php
    177. $COLOR"WORDPRESS安装完成"
    178. }
    179. check_file
    180. install_mysql
    181. install_nginx
    182. install_php
    183. install_wordpress