#!/bin/bash
. /etc/init.d/functions
set -u
MYSQL="mariadb-10.2.31-linux-systemd-x86_64.tar.gz"
PHP="php-7.4.12.tar.bz2"
HTTPD="httpd-2.4.46.tar.gz"
APR="apr-1.7.0.tar.bz2"
ARP_UTIL="apr-util-1.6.1.tar.bz2"
APP="wordpress-5.4.2-zh_CN.zip"
COLOR='echo -e \e[01;35m'
END='\e[0m'
SRC_DIR="/usr/local/src" #源码包路径
CPU=`lscpu| awk '/^CPU\(s\):/{print $NF}'`
PASS="heshizhe" #数据库密码
MYSQL_WORD="heshizhe" #wordpress密码
APR_DIR=${APR%.tar*} #变量高级用法用来去解压缩文件之后的名称
HTTP_DIR=${HTTPD%.tar*}
APR_UTIL_DIR=${ARP_UTIL%.tar*}
PHP_DIR=${PHP%.tar*}
FILE_HTTP="/apps/httpd" #安装HTTPD路径
check_file () {
cd $SRC_DIR
if [ ! -e $MYSQL ];then
$COLOR"缺少文件${MYSQL}"$END
exit 10
elif [ ! -e $PHP ];then
$COLOR"缺少文件${PHP}"$END
exit 20
elif [ ! -e $HTTPD ];then
$COLOR"缺少文件${HTTPD}"$END
exit 30
elif [ ! -e $APR ];then
$COLOR"缺少文件${APR}"$END
exit 40
elif [ ! -e $ARP_UTIL ];then
$COLOR"缺少文件${ARP_UTIL}"$END
exit 50
elif [ ! -e $APP ];then
$COLOR"缺少文件${APP}"$END
exit 60
else
$COLOR"相关文件已准备好"$END
fi
}
install_package(){
$COLOR"开始安装环境包"$END
yum install -y bzip2 unzip numactl-libs libaio perl-Data-Dumper gcc make pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel &> /dev/null
}
install_mysql() {
local DATA_DIR="/data/mysql" #数据库目录
local FILE_DIR=${SRC_DIR}/${MYSQL}
if [ -e /usr/local/mysql ];then
action "数据库已存在" false
else
$COLOR"解压数据库"$END
tar xf $FILE_DIR -C /usr/local/ &> /dev/null
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
fi
if id mysql &> /dev/null;then
$COLOR"用户已存在跳过用户和组创建"$END
else
groupadd -r -g 306 mysql &> /dev/null
useradd -r -g 306 -s /sbin/nologin/ mysql &> /dev/null
action "用户和组创建完成"
fi
if [ -f $DATA_DIR ];then
$COLOR"数据库目录已存在"$END
else
$COLOR"创建数据库目录"$END
mkdir -p ${DATA_DIR}
chown mysql.mysql ${DATA_DIR}
fi
cat > /etc/my.cnf<<-EOF
[mysqld]
datadir=/data/mysql #指定数据库目录
socket=/data/mysql/mysql.sock #套接字文件
skip_name_resolve=1 #禁止域名解析
log-error=/data/mysql/mysql.log #日志文件位置
pid-file=/data/mysql/mysql.pid #记录当前 mysqld 进程的 pid
[client]
socket=/data/mysql/mysql.sock
EOF
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
mysqld --initialize --user=mysql --datadir=/data/mysql
mysql_pass=`awk '/root@localhost:/{print $NF}' /data/mysql/mysql.log `
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl start mysqld
[ $? -ne 0 ] && { $COLOR"数据库启动失败退出"$END;exit; }
mysqladmin -uroot -p$mysql_pass password $PASS &> /dev/null
action "数据库安装完成"
mysql -uroot -p$PASS -e 'create database wordpress'
mysql -uroot -p$PASS -e "grant all on wordpress.* to wordpress@'localhost' identified by '$MYSQL_WORD'"
}
install_httpd() {
$COLOR"开始安装HTTPD"$END
cd $SRC_DIR
$COLOR"开始解压源代码包并且三合一"$END
tar xf ${HTTPD}
tar xf ${APR}
tar xf ${ARP_UTIL}
mv ${APR_DIR} ${HTTP_DIR}/srclib/apr
mv ${APR_UTIL_DIR} ${HTTP_DIR}/srclib/apr-util
[ -a ${FILE_HTTP} ] || mkdir ${FILE_HTTP} -p
cd $SRC_DIR/${HTTP_DIR}
$COLOR"将三者同时编译安装"$END
./configure --prefix=${FILE_HTTP} --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork &> /dev/null
make -j $CPU && make install &> /dev/null
$COLOR"编译完成"$END
if id apache &> /dev/null;then
action "用户已存在跳过创建用户"
else
useradd -s /sbin/nologin -r apache &> /dev/null
$COLOR"创建账号apache"$END
fi
sed -i 's/user daemon/user apache/' ${FILE_HTTP}/conf/httpd.conf
sed -i 's/group daemon/group apache/' ${FILE_HTTP}/conf/httpd.conf
$COLOR"开始配置环境变量"$END
echo "PATH=${FILE_HTTP}/bin/:$PATH" > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh
$COLOR"配置帮助"$END
echo "MANDATORY_MANPATH ${FILE_HTTP}/man" >>/etc/man_db.conf
$COLOR"创建service文件"$END
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=${FILE_HTTP}/bin/apachectl start
#ExecStart=/apps/httpd24/bin/httpd \$OPTIONS -k start
ExecReload=${FILE_HTTP}/bin/apachectl graceful
#ExecReload=/apps/httpd24/bin/httpd \$OPTIONS -k graceful
ExecStop=${FILE_HTTP}/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
#修改配置文件支持FPM
sed -i 's/User daemon/User apache/' $FILE_HTTP/conf/httpd.conf
sed -i 's/Group daemon/Group apache/' $FILE_HTTP/conf/httpd.conf
sed -i 's@\#LoadModule proxy_module modules\/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@' $FILE_HTTP/conf/httpd.conf
sed -i 's@\#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@' $FILE_HTTP/conf/httpd.conf
sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/' $FILE_HTTP/conf/httpd.conf
sed -i '/<IfModule mime_module>/ a\AddType application/x-httpd-php .php \nProxyRequests Off\n#AddType application/x-httpd-php-source .phps' $FILE_HTTP/conf/httpd.conf
}
install_php() {
FILE_PHP="/apps/php"
cd $SRC_DIR
tar xf $PHP
cd $PHP_DIR
$COLOR"开始编译安装PHP"$END
./configure \
--prefix=$FILE_PHP \
--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 &> /dev/null
make -j $CPU && make install &> /dev/null
$COLOR"开始配置PHP环境变量"$END
echo "PATH=$FILE_PHP/bin:$FILE_HTTP/bin:$PATH" > /etc/profile.d/php.sh
source /etc/profile.d/php.sh
$COLOR"准备php配置文件和启动文件"$END
cp php.ini-production /etc/php.ini
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
cp $FILE_PHP/etc/php-fpm.conf.default $FILE_PHP/etc/php-fpm.conf
cp $FILE_PHP/etc/php-fpm.d/www.conf.default $FILE_PHP/etc/php-fpm.d/www.conf
#修改进程所有者
sed -i 's/user daemon/user apache/' $FILE_PHP/etc/php-fpm.d/www.conf
sed -i 's/group daemon/group apache/' $FILE_PHP/etc/php-fpm.d/www.conf
#指定套接字文件路径
sed -i 's/mysqli.default_socket =/mysqli.default_socket = \/data\/mysql\/mysql.sock/' /etc/php.ini
#配置opcache加速
mkdir $FILE_PHP/etc/php.d/
cat >$FILE_PHP/etc/php.d/opcache.ini<<-EOF
[opcache]
zend_extension=opcache.so
opcache.enable=1
EOF
}
install_wordpress() {
$COLOR"开始安装wordpress"$END
cd $SRC_DIR
unzip $APP
mv wordpress /data/
#设置权限#
setfacl ?R ?m u:apache:rwx /data/wordpress/
$COLOR"配置虚拟机"$END
echo 'includeOptional conf.d/*.conf' >> $FILE_HTTP/conf/httpd.conf
mkdir $FILE_HTTP/conf.d
cat >$FILE_HTTP/conf.d/wordpress.conf<<-EOF
<virtualhost *:80>
servername blog.heshizhe.org
documentroot /data/wordpress
<directory /data/wordpress>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/\$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
EOF
source /etc/profile.d/mysqld.sh
systemctl daemon-reload
systemctl enable --now php-fpm httpd
}
check_file
install_package
install_mysql
install_httpd
install_php
install_wordpress
测试结果
如果需要更改上传文件大小在/etc/php.ini文件里修改
post_max_size = 8M ; PHP将接受的POST数据最大大小。
upload_max_filesize = 2M ; 上载文件的最大许可大小