文章目录
- 1 实验目标
- 2 环境准备
- 3 实现步骤
- 3.1.1 二进制安装
- 3.1.2为wordprss和discuz应用准备数据库和用户帐号
- 3.2 编译安装 httpd 2.4
- 3.3 编译安装 fastcgi 方式的 php 7.4
- 3.4 修改配置 httpd 支持 php-fpm
- 3.5 准备wordpress和discuz! 相关文件
- 3.6 测试访问
- 3.7 安装成功
1 实验目标
- 实现CentOS 8 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构
欢迎访问我的个人博客:www.zhangkangjia.info
2 环境准备
一台主机:
- httpd+php(fastcgi模式)
- mysql服务器
软件版本:
- CentOS 8 Steam
- mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
- apr-1.7.0.tar.bz2
- apr-util-1.6.1.tar.bz2
- httpd-2.4.43.tar.gz
- php-7.4.33.tar.gz
- wordpress-6.1.1-zh_CN.zip
- Discuz_X3.4_SC_UTF8_20220811.zip
- install_mysql5.7or8.0_for_centos.sh
3 实现步骤
3.1.1 二进制安装
install_mysql5.7or8.0_for_centos.sh
编译安装mysql
脚本
#!/bin/bash
. /etc/init.d/functions
SRC_DIR=`pwd`
MYSQL='mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz'
COLOR='echo -e \E[01;31m'
END='\E[0m'
MYSQL_ROOT_PASSWORD=123456
ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5
check (){
if [ $UID -ne 0 ]; then
action "当前用户不是root,安装失败" false
exit 1
fi
cd $SRC_DIR
if [ ! -e $MYSQL ];then
$COLOR"缺少${MYSQL}件"$END
$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
exit
elif [ -e /usr/local/mysql ];then
action "数据库已存在,安装失败" false
exit
else
return
fi
}
install_mysql(){
$COLOR"开始安装MySQL数据库..."$END
yum -y -q install libaio numactl-libs libaio &> /dev/null
cd $SRC_DIR
xz -dk mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
tar xf mysql-8.0.19-linux-glibc2.12-x86_64.tar -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 ; action "创建mysql用户"; }
echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
ln -s /usr/local/mysql/bin/* /usr/bin/
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
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
action "数据库安装完成"
}
check
install_mysql
3.1.2为wordprss和discuz应用准备数据库和用户帐号
mysql -uroot -p123456
mysql> create database wordpress;
mysql> create database discuz;
mysql> create user wordpress@'IP或网段' identified by '密码';
mysql> grant all on wordpress.* to wordpress@'IP或网段';
mysql> create user discuz@'IP或网段' identified by '密码';
mysql> grant all on discuz.* to discuz@'IP或网段';
3.2 编译安装 httpd 2.4
#安装相关包
yum install gcc pcre-devel openssl-devel expat-devel -y
#编译安装httpd
tar xvf apr-1.7.0.tar
tar xvf apr-util-1.6.1.tar
tar xf httpd-2.4.46.tar
mv apr-1.7.0 httpd-2.4.46/srclib/apr
mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
cd httpd-2.4.46/
./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
make && make install
编译完成:
准备PATH变量:
vim /etc/profile.d/lamp.sh
PATH=/apps/httpd/bin:$PATH
. /etc/profile.d/lamp.sh
创建和配置用户和组:
useradd -s /sbin/nologin -r -u 88 apache
编辑配置文件:
vim /apps/httpd/conf/httpd.conf
user apache
group apache
修改为event模式,编译时已指定,此项不再需修改,可选:
vim /apps/httpd/conf/httpd.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
httpd -M |grep mpm
mpm_event_module (shared)
启动apache:
apachectl start
修改为以下内容:
[root@VM-0-3-centos ~]#vim /usr/lib/systemd/system/httpd.service
[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/httpd/bin/apachectl start
#ExecStart=/apps/httpd/bin/httpd $OPTIONS -k start
ExecReload=/apps/httpd/bin/apachectl graceful
#ExecReload=/apps/httpd/bin/httpd $OPTIONS -k graceful
ExecStop=/apps/httpd/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动成功:
3.3 编译安装 fastcgi 方式的 php 7.4
#安装相关包,依赖EPEL源
- php 7.4 相关包
yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
启用PowerTools
源安装oniguruma-devel
php7.4 编译
#解压
tar xvf php-7.4.33.tar.gz
#进入php目录
cd php-7.4.7/
./configure \
--prefix=/apps/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
编译安装
make && make install
准备PATH变量:
- 创建启动变量脚本
vim /etc/profile.d/lamp.sh
PATH=/apps/php/bin:/apps/httpd/bin:$PATH
- 初始化启动脚本
. /etc/profile.d/lamp.sh
查看php版本,检查是否安装成功
php --version
准备php配置文件和启动文件
cp php.ini-production /etc/php.ini
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
cd /apps/php/etc
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
修改进程所有者
vim /apps/php/etc/php-fpm.d/www.conf
user apache
group apache
支持status和ping页面
vim /apps/php/etc/php-fpm.d/www.conf
pm.status_path = /fpm_status
ping.path = /ping
支持opcache加速
mkdir /etc/php.d/
vim /etc/php.d/opcache.ini
[opcache]
zend_extension=opcache.so
opcache.enable=1
初始化启动
systemctl daemon-reload
systemctl status php-fpm.service
systemctl enable --now php-fpm.service
验证9000端口是否启动
可以看到9000端口已经启动!
3.4 修改配置 httpd 支持 php-fpm
vim /apps/httpd/conf/httpd.conf
- 取消下面两行的注释
- 修改下面行
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
更改为:
- 在文件最后面加上下面两行
AddType application/x-httpd-php .php
ProxyRequests Off
- 在文件最后面加上下面内容
#实现第一个虚拟主机
<virtualhost *:80>
servername blog.test.org
documentroot /data/wordpress
<directory /data/wordpress>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
#实现status和ping页面
ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
#第二个虚拟主机
<virtualhost *:80>
servername forum.test.org
documentroot /data/discuz
<directory /data/discuz/>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/discuz/$1
CustomLog "logs/access_discuz_log" common
</virtualhost>
- 创建主文件夹
mkdir /data/wordpress
mkdir /data/discuz
- 重新启动apache
apachectl restart
3.5 准备wordpress和discuz! 相关文件
- 准备wordpress程序文件
upzip wordpress-6.1.1-zh_CN.zip
mv wordpress/ /data/wordpress/
#准备discuz!程序文件
unzip Discuz_X3.4_SC_UTF8_20220811.zip
mv upload/* /data/discuz/
chown -R apache.apache /data/*
3.6 测试访问
vim /etc/hosts
ip地址 forum.test.org blog.test.org
打开浏览器访问 http://blog.test.org
和http://forum.test.org
分别进行初始化和安装
云服务器一定打开3306端口,否则数据库会连接不上
3.7 安装成功
博客安装成功!
论坛安装成功!
欢迎访问我的个人博客:www.zhangkangjia.info