作业七--二进制安装搭建 LAMP 架构

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

#!/bin/bash

SRC_DIR=/usr/local/src
HTTPD='httpd-2.4.46.tar.bz2'
APR='apr-1.7.0.tar.bz2'
APR_UTIL='apr-util-1.6.1.tar.bz2'
MYSQL='mariadb-10.2.31-linux-x86_64.tar.gz'
PHP='php-7.4.7.tar.bz2'
APP='wordpress-5.4.2-zh_CN.tar.gz'
COLOR="echo -e \\033[01;31m"
END='\033[0m'
MYSQL_ROOT_PASSWORD=123456
MYSQL_WORDPRESS_PASSWORD=wppass
CPU=`lscpu| awk '/^CPU\(s\):/{print $NF}'`

${COLOR}'开始安装基于LAMP的wordpress'$END
sleep 3

check_file (){
cd $SRC_DIR
if [ ! -e $HTTPD ];then
$COLOR"缺少${HTTPD}文件"$END
$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
exit
elif [ ! -e $APR ];then
$COLOR"缺少${APR}文件"$END
$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
exit
elif [ ! -e $APR_UTIL ];then
$COLOR"缺少${APR_UTIL}文件"$END
$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
exit
elif [ ! -e $MYSQL ];then
$COLOR"缺少${MYSQL}文件"$END
exit
elif [ ! -e $PHP ];then
$COLOR"缺少${PHP}文件"$END
$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
exit
elif [ ! -e $APP ];then
$COLOR"缺少${APP}文件"$END
$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
exit
else
$COLOR"相关文件已准备好"$END
fi
}


install_httpd(){
yum -y install gcc pcre-devel openssl-devel expat-devel
cd ${SRC_DIR}
tar jxf ${HTTPD}
tar jxf ${APR}
tar jxf ${APR_UTIL}
APR_DIR=`echo ${APR} | sed -nr 's/^(.*[0-9])\.tar.*/\1/p'`
APR_UTIL_DIR=`echo ${APR_UTIL} | sed -nr 's/^(.*[0-9])\.tar.*/\1/p'`
HTTPD_DIR=`echo ${HTTPD} | sed -nr 's/^(.*[0-9])\.tar.*/\1/p'`
mv ${APR_DIR} ${HTTPD_DIR}/srclib/apr
mv ${APR_UTIL_DIR} ${HTTPD_DIR}/srclib/apr-util
${SRC_DIR}/${HTTPD_DIR}/configure --prefix=/apps/httpd24 --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
make -j ${CPU} && make install
id apache &> /dev/null || { useradd -s /sbin/nologin -r apache ; $COLOR"创建apache用户"$END; }
sed -i -e 's/^User.*/User apache/' -e 's/^Group.*/Group apache/' /apps/httpd24/conf/httpd.conf
sed -i 's/^DirectoryIndex index.html/DirectoryIndex index.php index.html/' /apps/httpd24/conf/httpd.conf
cat >> /apps/httpd24/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

<virtualhost *:80>
servername blog.magedu.org
documentroot /data/wordpress
<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
CustomLog "logs/access_wordpress_log" common
</virtualhost>
EOF

echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/lamp.sh
. /etc/profile.d/lamp.sh
echo 'MANDATORY_MANPATH  /apps/httpd/man' >> /etc/man_db.conf
cat > /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
ExecStart=/apps/httpd24/bin/apachectl start
ExecReload=/apps/httpd24/bin/apachectl graceful
ExecStop=/apps/httpd24/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now httpd.service
systemctl is-active httpd &> /dev/null && $COLOR"HTTP安装完成"$END || { $COLOR"HTTP启动失败,退出!"$END ; exit; }
}

install_php (){
${COLOR}"开始安装PHP"$END
yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel &>/dev/null
cd $SRC_DIR
tar jxf $PHP
PHP_DIR=`echo $PHP| sed -nr 's/^(.*[0-9])\.tar.*/\1/p'`
cd $SRC_DIR/$PHP_DIR
./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 $CPU && make install
[ $? -eq 0 ] && $COLOR"PHP编译安装成功"$END || { $COLOR"PHP编译安装失败,退出!"$END;exit; }
echo 'PATH=/apps/php74/bin::$PATH' > /etc/profile.d/lamp.sh
. /etc/profile.d/lamp.sh
cd $SRC_DIR/$PHP_DIR
cp php.ini-production /etc/php.ini
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
cd /apps/php74/etc
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
id apache &> /dev/null || { useradd -s /sbin/nologin -r apache; $COLOR"创建apache用户"$END; }
sed -i.bak -e 's/^user.*/user apache/' -e 's/^group.*/group apache/' /apps/php74/etc/php-fpm.d/www.conf
cat >> /apps/php74/etc/php-fpm.d/www.conf << EOF
pm.status_path = /fpm_status
ping.path = /ping
EOF

mkdir /etc/php.d/
cat > /etc/php.d/opcache.ini <<EOF
[opcache]
zend_extension=opcache.so
opcache.enable=1
EOF
systemctl daemon-reload
systemctl start php-fpm
systemctl is-active php-fpm &> /dev/null && $COLOR"PHP安装完成"$END || { $COLOR"PHP-FPM 启动失败,退出!"$END ; exit; }

}

install_mysql(){
$COLOR"开始安装MySQL数据库..."$END
yum  -y -q install libaio numactl-libs &> /dev/null
   cd $SRC_DIR
tar zxf $MYSQL -C /usr/local/
   MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`
   ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
   chown -R root.root /usr/local/mysql/
  id mysql &> /dev/null || { useradd -s /sbin/nologin -r mysql ; $COLOR"创建mysql用户"$END; }
   echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
  . /etc/profile.d/mysql.sh
   cat > /etc/my.cnf <<EOF
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock               
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
 [ -d /data ] || mkdir /data
mysqld --initialize --user=mysql --datadir=/data/mysql
   cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  chkconfig --add mysqld
  chkconfig mysqld on
   service mysqld start
  [ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }
   MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`
  mysqladmin  -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &> /dev/null
  $COLOR"数据库安装完成"$END
}

install_wordpress(){
cd ${SRC_DIR}
tar zxf ${APP}
mv wordpress /data/
chown -R apache.apache /data/wordpress
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
$COLOR"WORDPRESS安装完成"
}

check_file
install_httpd
install_php
install_mysql
install_wordpress

posted @ 2020-10-31 21:07  Zintent  阅读(181)  评论(0)    收藏  举报