编译安装基于fastcgi 模式LAMP架构多虚拟主机

1.1 目标

实现Centos7编译安装基于fastcg模式的多虚拟机主机的wordpress和disuz的LAMP架构

1.2 环境准备

两台主机:

  • 1台主机:httpd + php(fastcgi模式)
  • 1台主机:mariadb服务器

软件版本:

  • CenttOS 7.9
  • mariadb-10.2.31-linux-x86_64.tar.gz 通用二进制格式
  • apr-1.7.0.tar.bz2
  • apr-util-1.6.1.tar.bz2
  • php-7.4.7.tar.xz 或 php-7.3.10.tar.bz2
  • httpd-2.4.54.tar.gz
  • wordpress-5.4.2-zh_CN.tar.gz
  • Discuz_X3.4_SC_UTF8[20191201].zip

1.3 实现步骤

1.3.1 二进制安装 Mariadb

[root@Rocy-mysql ~]# yum install libaio -y
[root@Rocy-mysql ~]#useradd -r -s /sbin/nologin mysql
[root@Rocy-mysql ~]#tar xvf mariadb-10.2.31-linux-x86_64.tar.gz -C /usr/local
[root@Rocy-mysql ~]#ln -sv mariadb-10.2.31-linux-x86_64 mysql
[root@Rocy-mysql local]# ll mysql
lrwxrwxrwx 1 root root 28 Jul 31 21:30 mysql -> mariadb-10.2.31-linux-x86_64
[root@Rocy-mysql local]# cd mysql
[root@Rocy-mysql mysql]# chown -R root.root ./*
[root@Rocy-mysql mysql]# mkdir -p /data/mysql
[root@Rocy-mysql mysql]# chown -R mysql.mysql /data/mysql
[root@Rocy-mysql mysql]# mkdir /etc/mysql
[root@Rocy-mysql mysql]# cp support-files/my-huge.cnf /etc/mysql/my.cnf
[root@Rocy-mysql mysql]# vim /etc/mysql/my.cnf
[mysqld]
#加下面内容
datadir=/data/mysql
skip_name_reslove= ON

#配置PATH变量
[root@Rocy-mysql mysql]# vim /etc/profile.d/mysql.sh

PATH=/usr/local/mysql/bin/:$PATH
[root@Rocy-mysql mysql]# source /etc/profile.d/mysql.sh
[root@Rocy-mysql mysql]# cd /usr/local/mysql
[root@Rocy-mysql mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mysql
[root@Rocy-mysql mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@Rocy-mysql mysql]# chkconfig --add mysqld
[root@Rocy-mysql mysql]# service mysqld start
                                                           [  OK  ]
[root@Rocy-mysql mysql]# ./bin/mysql_secure_installation         #安全加固

#为wordpress和discuz应用准备数据库和用户账号
[root@Rocy-mysql mysql]# mysql -uroot -p
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create database discuz;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on wordpress.* to wordpress@'10.0.0.%' indentified by "123.com";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'indentified by "123.com"' at line 1
MariaDB [(none)]> grant all on wordpress.* to wordpress@'10.0.0.%' identified by "123.com";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on discuz.* to discuz@'10.0.0.%' identified by "123.com";
Query OK, 0 rows affected (0.00 sec)

1.3.2 编译安装 httpd 2.4

#安装相关包
[root@web-fastcgi ~]#yum -y install gcc pcre-devel openssl-devel expat-devel

#编译安装httpd
[root@web-fastcgi ~]#ls
anaconda-ks.cfg    apr-util-1.6.1.tar.gz                httpd-2.4.54.tar.gz  wordpress-5.4.2-zh_CN.tar.gz
apr-1.7.0.tar.bz2  Discuz_X3.4_SC_UTF8【20191201】.zip  php-7.4.7.tar.bz2
[root@web-fastcgi ~]#tar xf apr-1.7.0.tar.bz2 
[root@web-fastcgi ~]#tar xf apr-util-1.6.1.tar.gz 
[root@web-fastcgi ~]#tar xf httpd-2.4.54.tar.gz 
[root@web-fastcgi ~]#mv apr-1.7.0 httpd-2.4.54/srclib/apr
[root@web-fastcgi ~]#mv apr-util-1.6.1 httpd-2.4.54/srclib/apr-util
[root@web-fastcgi ~]#cd httpd-2.4.54/
[root@web-fastcgi httpd-2.4.54]#./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modeules=most --enable-mpms-shared=all --with-mpm=event
configure: summary of build options:            

    Server Version: 2.4.54
    Install prefix: /apps/httpd
    C compiler:     gcc -std=gnu99
    CFLAGS:          -g -O2 -pthread  
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE  
    LDFLAGS:           
    LIBS:             
    C preprocessor: gcc -E                                        #看到类似输出说明编译成功

[root@web-fastcgi httpd-2.4.54]#make && make install 

#准备PATH变量
[root@web-fastcgi httpd]#vim /etc/profile.d/httpd.sh
PATH=/apps/httpd/bin:$PATH
[root@web-fastcgi httpd]#. /etc/profile.d/httpd.sh 

#创建和配置用户、组
[root@web-fastcgi httpd]#useradd -r -s /sbin/nologin -u 80 apache
[root@web-fastcgi httpd]#vim /apps/httpd/conf/httpd.conf
172 User apache
173 Group apache        #修改用户、组
#修改为event模式,编译时已指定,此项不再需修改
66 LoadModule mpm_event_module modules/mod_mpm_event.so
#注释下面行
67 #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
68 #LoadModule mpm_worker_module modules/mod_mpm_worker.so
[root@web-fastcgi httpd]#httpd -M | grep mpm
 mpm_event_module (shared)
[root@web-fastcgi httpd]#apachectl start
[root@web-fastcgi httpd]#curl 10.0.0.7
<html><body>It works!</body></html>

#配置service文件
[root@web-fastcgi httpd]#vim /usr/lib/systemd/system/httpd.service

[Unit]
Description=The HTTP server
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpdExecReload=/apps/httpd/bin/apachectl graceful
#EnvironmentFile=/apps/httpd/bin/httpd $OPTIONS -k graceful
ExecStart=/apps/httpd/bin/apachectl start
#EnvironmentFile=/apps/httpd/bin/httpd $OPTIONS -k start
ExecStop=/apps/httpd/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target
[root@web-fastcgi httpd]#systemctl daemon-reload

1.3.3 编译安装fastcgi方式的 php 7.4

#安装相关包,依赖EPEL源
#php 7.4 相关包
[root@web-fastcgi ~]#yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
#php 7.3 相关包
yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel

#php 7.4 编译
[root@web-fastcgi ~]#tar xvf php-7.4.7.tar.bz2
[root@web-fastcgi ~]#cd php-7.4.7/
[root@web-fastcgi ~]#./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
[root@web-fastcgi php-7.4.7]#make -j 4 make install

#准备PATH变量
[root@web-fastcgi php-7.4.7]#vim /etc/profile.d/php.sh
PATH=/apps/php/bin:$PATH
[root@web-fastcgi php-7.4.7]#. /etc/profile.d/php.sh
[root@web-fastcgi php-7.4.7]#php --version
PHP 7.4.7 (cli) (built: Jul 31 2022 22:49:54) ( ZTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

#准备php配置文件和启动文件
[root@web-fastcgi php-7.4.7]#cp php.ini-production /etc/php.ini
[root@web-fastcgi php-7.4.7]#cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
[root@web-fastcgi php-7.4.7]#cd /apps/php/etc
[root@web-fastcgi etc]#cp php-fpm.conf.default  php-fpm.conf
[root@web-fastcgi php-fpm.d]#ls
www.conf.default
[root@web-fastcgi php-fpm.d]#cp www.conf.default www.conf

#修改进程所有者
[root@web-fastcgi php-fpm.d]#vim /apps/php/etc/php-fpm.d/www.conf
23 user = apache
24 group = apache
#支持status页面,取消以下行注释  fpm_status和虚拟主机内容一致
239 pm.status_path = /fpm_status  

#支持opcache加速
[root@web-fastcgi php-fpm.d]#mkdir /etc/php.d
[root@web-fastcgi php-fpm.d]#vim /etc/php.d/opcache.ini
[opcache]
zend_extension=opcache.so
opcache.enable=1
[root@web-fastcgi php-7.4.7]#systemctl daemon-reload
[root@web-fastcgi php-7.4.7]#systemctl status php-fpm.service
[root@web-fastcgi php-7.4.7]#systemctl enable --now php-fpm.service 

1.3.4 PHP常用配置

expose_php = On         #响应报文显示首部字段x-powered-by: PHP/x.y.z,暴露php版本,建议为off
max_execution_time= 30  #最长执行时间30s
memory_limit=128M       #生产不够,可调大
display_errors=off      #调试使用,不要打开,否则可能暴露重要信息
display_startup_errors=off #建议关闭
post_max_size=8M        #最大上传数据大小,生产可能调大,比下面项大
upload_max_filesize =2M #最大上传文件,生产可能要调大
max_file_uploads = 20   #同时上传最多文件数
date.timezone =Asia/Shanghai #指定时区
short_open_tag=on       #开启短标签,如: <? phpinfo();?>

1.3.5 修改配置httpd 支持 php-fpm

[root@web-fastcgi ~]#vim /apps/httpd/conf/httpd.conf
#取消下面行的注释
120 LoadModule proxy_module modules/mod_proxy.so
124 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#修改下面行
260 <IfModule dir_module>
261     DirectoryIndex index.php index.html        #加入index.php
262 </IfModule>
#加下面三行
AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
ProxyRequests off

#第一个虚拟主机
<virtualhost *:80>
servername blog.study.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.study.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>
[root@web-fastcgi ~]#apachectl restart

1.3.6 配置wordpress和discuz相关文件

[root@web-fastcgi ~]#mkdir /data/wordpress /data/discuz
#准备wordpress程序文件
[root@web-fastcgi ~]#tar xf wordpress-5.4.2-zh_CN.tar.gz 
[root@web-fastcgi ~]#mv wordpress/* /data/wordpress/
[root@web-fastcgi ~]#chown -R apache.apache /data/wordpress

#准备discuz程序文件
[root@web-fastcgi ~]#unzip Discuz_X3.4_SC_UTF8【20191201】.zip
[root@web-fastcgi ~]#mv DiscuzX/upload/* /data/discuz
[root@web-fastcgi ~]#chown -R apache.apache /data/discuz/

1.3.7 测试访问

#修改host文件
10.0.0.7 blog.study.org  forum.study.org

浏览器访问http://blog.study.org 和 http://forum.study.org 分别进行初始化和安装。 wordpress初始化: wordpress1.png wordpress2.png wordpress3.png Discuz初始化: discuz1.png discuz2.png discuz3.png discuz4.png discuz5.png discuz6.png discuz7.png 访问状态页 wordpress4.png 查看是否启用opcache加速

[root@web-fastcgi wordpress]#vim info.php

<?php 
 phpinfo(); 
?>

[root@web-fastcgi wordpress]#ab -c 100 -n 100 http://forum.study.org/