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

#!/bin/bash
. /etc/init.d/functions

echo -e "\e[1;32m检查安装环境\e[0m"
sleep 3
# 检查所有安装包
version1=mariadb-10.2.31-linux-systemd-x86_64
version2=httpd-2.4.46
version3=apr-1.7.0
version4=apr-util-1.6.1
version5=php-7.4.7
#version6=
#version7=
bao1=${version1}.tar.gz
bao2=${version2}.tar.bz2
bao3=${version3}.tar.bz2
bao4=${version4}.tar.bz2
bao5=${version5}.tar.bz2
bao6=wordpress-5.4.2-zh_CN.tar.gz
bao7=Discuz_X3.4_SC_UTF8【20191201】.zip

[ -f $bao1 ] || { echo -e "\e[1;32m请将<mariadb>源码包放入当前目录\e[0m"; exit; }
[ -f $bao2 ] || wget https://mirrors.bfsu.edu.cn/apache//httpd/$bao2 || { echo '下载httpd失败'; exit; }
[ -f $bao3 ] || wget https://mirror.bit.edu.cn/apache//apr/$bao3 || { echo '下载apr失败'; exit; }
[ -f $bao4 ] || wget https://mirror.bit.edu.cn/apache//apr/$bao4 || { echo '下载apr-util失败'; exit; }
[ -f $bao5 ] || wget https://www.php.net/distributions/$bao5 || { echo '下载php失败'; exit; }
[ -f $bao6 ] || wget https://cn.wordpress.org/$bao6 || { echo '下载wordpress失败'; exit; }
[ -f $bao7 ] || { echo -e "\e[1;32m请将<Discuz>源码包放入当前目录\e[0m"; exit; }

echo -e "\e[1;32m所有安装包准备完毕!\e[0m"
#-------------------------------------------------------------------------------
sleep 3
echo -e "\e[1;32m开始安装相关依赖包...\e[0m"
sleep 3
yum install -y libaio perl-Data-Dumper libncurses* ncurses* \
libxml2-devel deltarpm expat-devel gcc gcc-c++ gcc-g77 \
flex bison autoconf automake bzip2-devel zlib-devel libjpeg-devel \
libtiff-devel freetype-devel pam-devel openssl-devel \
libmcrypt-devel sqlite-devel oniguruma-devel libpng-devel

echo -e "\e[1;32m<<<<<<<<<<开始安装MariaDB>>>>>>>>>>\e[0m"
sleep 3

INS_DIR="/usr/local"

# 安装环境检查
[ -h ${INS_DIR}/mysql ] && { echo "MariaDB is already installed"; exit; }

# mysql用户检查
[ id mysql ] &> /dev/null && userdel -f -r mysql || useradd -r -s /sbin/nologin mysql

# 解压、软链接、文件属性
tar xvf $bao1 -C $INS_DIR
ln -s $INS_DIR/${version1}  $INS_DIR/mysql  &> /dev/null
chown -R root.root $INS_DIR/mysql/    # 必须斜线结尾!否则软链接无法递归

# 设置PATH路径
ln -s $INS_DIR/mysql/bin/*  /usr/bin/  &> /dev/null
# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve
#socket=/data/mysql/mysql.sock
#log-error=/data/mysql/mysql.log
#pid-file=/data/mysql/mysql.pid
EOF

# 初始化数据库
cd $INS_DIR/mysql
./scripts/mysql_install_db  --user=mysql --datadir=/data/mysql &> /dev/null

# 服务启动脚本与开机自启
cp -a $INS_DIR/mysql/support-files/mysql.server  /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start

# 安全加固
mysql_secure_installation &> /dev/null << EOF

y
centos
centos
y
y
y
y
EOF

ss -ntl | grep -q '3306' && action '数据库启动成功' || { action '数据库安装失败' false ; exit; }
sleep 3
#-----------------------------------------------------------------------------------------------
echo -e "\e[1;32m<<<<<<<<<<开始编译安装httpd>>>>>>>>>>\e[0m"
# 解压
cd
tar xvf $bao2
tar xvf $bao3
tar xvf $bao4

# 整合
mv $version3  $version2/srclib/apr
mv $version4  $version2/srclib/apr-util

# 开始编译
cd $version2/
./configure \
--prefix=/apps/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre=/usr/local/pcre \
--with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork \

# 火力全开
m=`lscpu | awk 'NR==4 {print $2}'`
n=`lscpu | awk 'NR==7 {print $4}'`
j=$((m*n))
make -j $j && make install && action 'http编译完成,开始配置' || { action '编译http失败!!!' false; exit; }
###################################
# 开始配置
# 用户
[ id apache ] &> /dev/null && userdel -r -f apache || useradd -r -s /sbin/nologin apache
# 指定 apache 运行
sed -ri -e 's/^(user ).*/\1apache/' -e 's/^(group ).*/\1apache/' /apps/httpd24/conf/httpd.conf
# PATH
ln -s /apps/httpd24/bin/*  /usr/bin/ &> /dev/null
# HELP
sed -i '/#MANDATORY_MANPATH/a MANDATORY_MANPATH /apps/httpd24/man' /etc/man_db.conf
# 开机自启
echo '/apps/httpd24/bin/httpd start' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

# service文件
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/httpd24/bin/apachectl start
#ExecStart=/apps/httpd24/bin/httpd \$OPTIONS -k start
ExecReload=/apps/httpd24/bin/apachectl graceful
#ExecReload=/apps/httpd24/bin/httpd \$OPTIONS -k graceful
ExecStop=/apps/httpd24/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

# servername
sed -ri 's/#(ServerName www.example.com:80)/\1/' /apps/httpd24/conf/httpd.conf

# 配置httpd支持php-fpm !!!!!!!!!
# 开启代理模块、修改优先的主页面,并设置识别 php 资源
sed -ri \
-e 's/#(LoadModule proxy_module .*)/\1/' \
-e 's/#(LoadModule proxy_fcgi_module .*)/\1/' \
-e 's/(.*DirectoryIndex )index.html/\1index.php index.html/' \
/apps/httpd24/conf/httpd.conf
#############################
echo -e "\e[1;32m<<<<<<<<<<开始配置虚拟主机>>>>>>>>>>\e[0m"
echo -e "\e[1;32m此处重启httpd较慢!请等待...\e[0m"
cat >> /apps/httpd24/conf/httpd.conf <<EOF
listen 8001
listen 8002

<virtualhost *:8001>
documentroot /data/wordpress
CustomLog "logs/access_wordpress_log" common
<directory /data/wordpress>
    require all granted
</directory>
ProxyPassMatch ^/(.*\\.php)$ fcgi://127.0.0.1:9000/data/wordpress/\$1
ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/\$1
</virtualhost>

<virtualhost *:8002>
documentroot /data/discuz
CustomLog "logs/access_discuz_log" common
<directory /data/discuz/>
    require all granted
</directory>
ProxyPassMatch ^/(.*\\.php)$ fcgi://127.0.0.1:9000/data/discuz/\$1
ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/\$1
</virtualhost>
EOF


# 语法
httpd -t || { action 'http配置文件错误'; exit; }

# 启动
systemctl daemon-reload
systemctl enable --now httpd && action '配置成功!httpd已启动'|| { action 'httpd配置失败!'; exit; }
sleep 5
#-----------------------------------------------------------------------------------------------
echo -e "\e[1;32m<<<<<<<<<<开始编译安装php-fpm>>>>>>>>>>\e[0m"
# 解压
cd
tar xvf $bao5

# 编译
cd $version5/
./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

make -j $j && make install && action 'php编译成功,开始配置' || { action 'php编译失败!!!' false; exit; }
sleep 3
###############################
# php配置
cd /root/$version5/
cp php.ini-production /etc/php.ini

# service unit文件
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

# 其他配置
cd /apps/php74/etc/  # 与编译时指定安装目录一致!!!php74
cp php-fpm.conf.default  php-fpm.conf
cp php-fpm.d/www.conf.default  php-fpm.d/www.conf
# 修改进程执行者、支持status和ping页面
sed -ri \
-e 's/nobody/apache/' \
-e '/pm.status_path/c pm.status_path = /fpm_status' \
-e 's/(ping.path.*)/\1/' \
/apps/php74/etc/php-fpm.d/www.conf

# 支持opcache加速
cat >> /etc/php.ini<<EOF
[opcache]
zend_extension=opcache.so
opcache.enable=1
EOF

# PATH
ln -s /apps/php74/bin/*  /usr/bin/ &> /dev/null

# 启动
systemctl daemon-reload
systemctl enable --now  php-fpm && action '配置成功!PHP已启动' || { action 'PHP配置失败' false; exit; }
sleep 3
#-----------------------------------------------------------------------------------------------
# 准备wordpress和discuz! 相关文件
[ -d /data ] || mkdir /data

# 解压
cd
tar xvf $bao6
mv  wordpress/  /data
chown -R apache.apache /data/wordpress

# 配置WordPress首页信息
cd /data/wordpress
mv  wp-config-sample.php  wp-config.php

mysql -uroot -p"centos" \
-e "create database wordpress;grant all on wordpress.* to wordpress@'127.0.0.1' identified by \
'centos'" &>/dev/null

sed -i.bak \
-e 's/database_name_here/wordpress/' \
-e 's/username_here/wordpress/' \
-e 's/password_here/centos/' \
-e 's/localhost/127.0.0.1/' \
wp-config.php

# DiscuzX
unzip $bao7
mv  DiscuzX/upload/  /data/discuz
setfacl -R -m u:apache:rwx /data/discuz

systemctl is-active httpd php-fpm &> /dev/null && action '所有项目配置完成' || { action '配置失败!!!' false; exit; }

ip=`hostname -I | tr -d ' '`
echo -e "\e[1;32m请使用浏览器访问 http://$ip:8001 和 http://$ip:8002 分别进行初始化和安装\e[0m"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值