CentOS7.9编译安装LAMP(Linux+Apache+Mysql+PHP)分离式部署
环境规划
| Web 应用服务器 | CentOS 7.9 x86_64Apache/2.4.67PHP 8.2.0 | 192.168.30.153 | 集成 Apache 反向代理与 PHP-FPM,负责处理动态请求及连接数据库 |
| 数据库服务器 | MySQL 8.0.12 | 192.168.30.154 | 独立部署,仅开放数据库端口供内网调用 |

关键路径与工具汇总
为方便后续操作查阅,现将各组件的关键路径与工具汇总如下:
Apache (Web 服务器)
- 配置文件目录:/usr/local/apache/conf/
- 网站根目录:/usr/local/apache/htdocs/
- Discuz 站点目录:/usr/local/apache/htdocs/web7.yxl.com/
MySQL (数据库服务器)
- 客户端工具路径:/usr/local/mysql/bin/mysql
- 登录命令示例:/usr/local/mysql/bin/mysql -uroot -p'1'
- 数据存放路径(默认):/usr/local/mysql/data/
- 配置文件(通常):/etc/my.cnf 或 /usr/local/mysql/my.cnf
PHP (解析器)
- 安装主目录:/usr/local/php82/
- PHP-FPM 启动程序:/usr/local/php82/sbin/php-fpm
- 配置文件 (php.ini):/usr/local/php82/etc/php.ini
- FPM 进程配置:/usr/local/php82/etc/php-fpm.conf (及 php-fpm.d/www.conf)
Discuz (应用程序)
- 完整程序文件路径:/usr/local/apache/htdocs/web7.yxl.com/
注:此目录下应包含 upload 文件夹内的所有文件(如 index.php, config, data, uc_client 等)。
压缩包存放位置
- 压缩包包存放位置:/usr/local/src/lamp/
CentOS 7.9- 配置阿里镜像源(两台服务器都部署)
#https://developer.aliyun.com/article/704987 可以去这个网站找源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
CentOS 7.9- 配置阿里镜像源 -epel
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
清楚缓存
yun clean all
创建缓存
yum makecache
二,前置基础配置(两台服务器全部部署)
系统:CentOS 7.9 (kernel 3.10+) 内存建议 ≥ 2G,硬盘 ≥ 20G,务必能联网
把 5 个源码包统一放到 /usr/local/src/lamp放源码的目录
把discuz5.0也放入
discuz包在这里下载
mkdir -pv /usr/local/src/lamp
cd /usr/local/src/lamp

关闭 SELinux(否则容易 403/权限诡异)
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
防火墙放行 80/443(如果用 firewalld)
systemctl stop firewalld
如果你坚持开防火墙,至少:
firewall-cmd –add-service={http,https} –permanent && firewall-cmd –reload
环境准备(必须先执行)
安装基础编译依赖
yum -y install gcc gcc-c++ make autoconf automake libtool
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
yum -y install libxml2 libxml2-devel curl curl-devel libpng libpng-devel
yum -y install freetype freetype-devel libjpeg libjpeg-devel
yum -y install libmcrypt libmcrypt-devel bzip2 bzip2-devel
创建运行用户(Apache/PHP-FPM 都用它):
useradd -r -M -s /sbin/nologin apache || true
三、编译安装Apache(在Web 应用服务器192.168.30.153上部署)
1、装编译基础依赖(必须)
yum -y install \\
gcc gcc-c++ make \\
pcre-devel openssl-devel expat-devel \\
bzip2-devel libxml2-devel \\
curl-devel libpng-devel libjpeg-devel freetype-devel \\
libzip-devel \\
wget
2、编译安装 APR + APR-UTIL(Apache 依赖)
解压
cd /usr/local/src/lamp
tar -zxf apr-1.7.6.tar.gz
tar -zxf apr-util-1.6.3.tar.gz
tar -jxf httpd-2.4.67.tar.bz2
yum -y install bzip2
3、编译安装 APR
cd /usr/local/src/lamp/apr-1.7.6
./configure –prefix=/usr/local/apr; echo $?
make -j$(nproc) && make install; echo $?
4、 编译安装 APR-UTIL
cd /usr/local/src/lamp/apr-util-1.6.3
./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr ; echo $?
make -j$(nproc) && make install; echo $?
5、编译安装 Apache 2.4.67
cd /usr/local/src/lamp/httpd-2.4.67/
./configure \\
–prefix=/usr/local/apache \\
–with-apr=/usr/local/apr \\
–with-apr-util=/usr/local/apr-util \\
–enable-so \\
–enable-ssl \\
–enable-cgi \\
–enable-rewrite \\
–enable-modules=most \\
–enable-mpms-shared=all \\
–with-pcre \\
–with-zlib \\
–with-mpm=event ; echo $?
6、编译安装
make -j$(nproc) && make install; echo $?
7、修改配置文件用户组
sed -i 's/^User daemon/User apache/' /usr/local/apache/conf/httpd.conf
sed -i 's/^Group daemon/Group apache/' /usr/local/apache/conf/httpd.conf
8、启动 Apache 并设置开机自启
/usr/local/apache/bin/apachectl start
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
chmod +700 /etc/rc.local
测试访问:浏览器打开 http://服务器IP 看到 It works! 说明 Apache 安装成功。
四,进制安装 MySQL 8.0.12(在数据库服务器192.168.30.154上部署)
1、 解压
cd /usr/local/src/lamp/
tar -zxf mysql-8.0.12-el7-x86_64.tar.gz -C /usr/local/
mv -v /usr/local/mysql-8.0.12-el7-x86_64 /usr/local/mysql
2、# 创建用户与数据目录
useradd -r -M -s /sbin/nologin mysql
mkdir -pv /data/mysql/mysql3306
chown -R mysql:mysql /data/mysql/mysql3306 /usr/local/mysql
chmod -R 755 /data/mysql/mysql3306
ls -lhrt -d /data/mysql/mysql3306
3、# 配置 my.cnf
cat > /etc/my.cnf << EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql/mysql3306
socket=/data/mysql/mysql3306/mysql3306.sock
user=mysql
port=3306
character-set-server=utf8mb4
default-storage-engine=INNODB
max_connections=1000
lower_case_table_names=1
[mysql]
socket=/data/mysql/mysql3306/mysql3306.sock
EOF
############# —- ########### support-files/mysql.server 是个启动脚本,它会先读 my.cnf,再读脚本内的变量: 优先读取: (1)/etc/my.cnf (2)/etc/mysql/my.cnf (3)~/.my.cnf
查看 MySQL 配置文件读取优先级(最准指令) #必须用 mysqld(服务端),不要用 mysql 客户端 mysqld –help –verbose | grep -E 'Default options|my\\.cnf' ############# —- ###########
!初始化与启动【记住:初始化只能初始化一次,如果初始化多次,你的元数据信息就被冲了,必须删除数据目录,重新来做】【若是生产环境有数据,那么,赶紧提桶跑路把!!
4、 初始化(生成临时密码)—初始化(会生成一个临时 root 密码,务必记下)
/usr/local/mysql/bin/mysqld \\
–initialize \\
–user=mysql \\
–basedir=/usr/local/mysql \\
–datadir=/data/mysql/mysql3306 ; echo $?

如果这里报 “libnuma.so.1 / libaio.so.1 not found”: yum -y install numactl-libs libaio 然后再重新执行一次上面的 –initialize。
5、 复制启动脚本
cp -av /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
6、 设置basedir和datadir
sed -i '2i\\basedir=/usr/local/mysql' /etc/init.d/mysqld
sed -i '3i\\datadir=/data/mysql/mysql3306' /etc/init.d/mysqld
grep -En 'basedir|datadir' /etc/init.d/mysqld
chkconfig –add mysqld
chkconfig mysqld on
7、 启动 MySQL
systemctl start mysqld
查看进程和端口
ss -tulanp | grep mysqld

ps axu | grep mysqld
##### ps的输出:必须注意你的basedir和datadir是上面设置的才是正确的。#####
8、修改 MySQL 密码
/usr/local/mysql/bin/mysql -uroot -p"你的初始密码"
使用第4点的初始密码密码来重置密码
9、进入MySQL后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你想创建的新密码';
FLUSH PRIVILEGES;
exit
测试MySQL新密码登录
/usr/local/mysql/bin/mysql -uroot -p'1' -e "\\s"
输出结果如下 
五、编译安装PHP(在Web 应用服务器192.168.30.153上部署)
1、编译安装 PHP 8.2.26(我给你两套方案,你选其一)
先装 PHP 额外依赖(不然 ./configure 一定会少扩展)
yum -y install \\
oniguruma-devel \\
sqlite-devel
✅ 方案 A(更推荐/更像“企业交付”):PHP-FPM + Apache ProxyFCGI
优点:PHP 与 Apache 解耦、升级 PHP 不用动 httpd;Discuz/WP 都跑得很稳。 缺点:需要多配几行 httpd 的代理规则(我给你现成的)。
解压 PHP-FPM
cd /usr/local/src/lamp
tar xf php-8.2.0.tar.bz2
cd php-8.2.0
编译安装PHP-FPM
./configure \\
–prefix=/usr/local/php82 \\
–with-config-file-path=/usr/local/php82/etc \\
–enable-fpm \\
–with-fpm-user=apache \\
–with-fpm-group=apache \\
–with-openssl \\
–with-curl \\
–with-zlib \\
–enable-gd \\
–with-jpeg \\
–with-freetype \\
–with-mysqli=mysqlnd \\
–with-pdo-mysql=mysqlnd \\
–enable-mbstring \\
–enable-xml \\
–enable-session \\
–enable-opcache \\
–disable-rpath ; echo $?
make -j $(nproc) && make install ; echo $?
配置PHP-FPM进程池(调优性能)
将php.ini-production复制为生产环境配置
cp -av php.ini-production /usr/local/php82/etc/php.ini
将php-fpm.conf和www.conf从默认模版复制出来
cp -av /usr/local/php82/etc/php-fpm.conf.default /usr/local/php82/etc/php-fpm.conf
cp -av /usr/local/php82/etc/php-fpm.d/www.conf.default /usr/local/php82/etc/php-fpm.d/www.conf
编辑 /usr/local/php82/etc/php-fpm.d/www.conf(至少核对这几项):
vim /usr/local/php82/etc/php-fpm.d/www.conf
user = apache #确认运行的用户和组
group = apache
listen = 127.0.0.1:9000 #通信接口,PHP-FPM将本地9000端口监听,等待Apache的连接
listen.owner = apache
listen.group = apache
pm = dynamic #动态进程模式
pm.max_children = 50 #最大并发进程数,根据你的服务器内存调整
pm.start_servers = 10 #设置初始启动的进程数和空闲时保留的进程数,保证相应速度用时节省资源
pm.min_spare_servers = 5
pm.max_spare_servers = 20
查看所有需要确认修改的行
grep -Ev "^$|;" /usr/local/php82/etc/php-fpm.d/www.conf

启动 php-fpm:
#启动前检查配置文件是否有语法错误,防止启动失败
/usr/local/php82/sbin/php-fpm -t
#启动服务
/usr/local/php82/sbin/php-fpm
#启动PHP-FPM服务
ps axu |grep php-fpm

Apache 侧启用 proxy_fcgi,并把 .php 交给 PHP-FPM
在 /etc/httpd/conf/httpd.conf确保加载(一般编译时已带): vim /usr/local/apache/conf/httpd.conf
#修改httpd.conf,取消注释LoadModule proxy_module和LoadModule proxy_fcfi_module
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

如果不是,可以用一下语句直接替换
sed -i 's@#LoadModule proxy_module modules/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@g' /usr/local/apache/conf/httpd.conf
sed -i 's@#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@g' /usr/local/apache/conf/httpd.conf
grep -En 'proxy_module|proxy_fcgi_module' /usr/local/apache/conf/httpd.conf

测试文件
vim /usr/local/apache/conf/httpd.conf
#然后在你的 <VirtualHost>(或全局 Directory 之后)加:
<FilesMatch \\.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
DirectoryIndex index.php index.html

#可以查看是否已经改成功
grep -n -A12 FilesMatch /usr/local/apache/conf/httpd.conf
1)PHP 解析转发到 php-fpm(你要求的规则) <FilesMatch \\.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
2)默认首页支持 index.php plaintext DirectoryIndex index.php index.html
重启 apache:
/usr/local/apache/bin/apachectl
/usr/local/apache/bin/apachectl -k restart
![在这里插入图片描述]
测试Apache解析PHP动态脚本
cat >> /usr/local/apache/htdocs/index.php <<EOF
<?php
phpinfo();
?>
EOF
chrome浏览器,可以看到php的版本,环境变量,各种配置等信息。 http://192.169.30.153/index.php 在这里插入图片描述
✅ 方案 B(更快、更“老派”,但能用):mod_php(libphp.so)
如果你想 省事一条龙,就用这个;缺点是 Apache 必须 prefork、且 PHP 强耦合 httpd。
cd /usr/local/src/php-8.2.26
./configure \\
–prefix=/usr/local/php82 \\
–with-config-file-path=/usr/local/php82/etc \\
–with-apxs2=/usr/local/apache2/bin/apxs \\
–with-openssl \\
–with-curl \\
–with-zlib \\
–enable-gd \\
–with-jpeg \\
–with-freetype \\
–with-mysqli=mysqlnd \\
–with-pdo-mysql=mysqlnd \\
–enable-mbstring \\
–enable-opcache ; echo $?
make -j $(nproc) && make install ; echo $?
装完后 httpd.conf 会被自动插入类似:
LoadModule php_module modules/libphp.so
你补一行:
DirectoryIndex index.php index.html
以及(稳妥)在 vhost 里:
AddHandler php-script .php
=============== Virtual Hosts ====================
配置基于域名的虚拟主机(在Web 应用服务器192.168.30.153上部署)
实际生产环境,建议一个虚拟主机,使用一个单独的配置文件进行控制。【解耦】
修改 httpd-vhosts.conf
cd /usr/local/apache/conf/extra
cp -av httpd-vhosts.conf /opt/httpd-vhosts.conf.bak
cd /usr/local/apache/conf/extra
touch web7.yxl.com.conf
基于域名(name-based)的虚拟主机
服务器: 192.168.30.153
cat > /usr/local/apache/conf/extra/httpd-vhosts.conf <<'EOF'
## ———- web7: HTML 站点 ———-
<VirtualHost *:80>
ServerName web7.yxl.com
ServerAdmin admin@yxl.com
DocumentRoot "/usr/local/apache/htdocs/web7.yxl.com"
DirectoryIndex index.html index.php
<Directory "/usr/local/apache/htdocs/web7.yxl.com">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog "logs/web2-error_log"
CustomLog "logs/web2-access_log" common
</VirtualHost>
EOF
创建网站目录
mkdir -pv /usr/local/apache/htdocs/web7.yxl.com
修改权限
chown -R apache:apache /usr/local/apache/htdocs/web7.yxl.com
ll -d /usr/local/apache/htdocs/web7.yxl.com
Linux 本机 /etc/hosts 配置
cat >> /etc/hosts <<'EOF'
##### apache vhosts by yxl $(date +%F_%T) #####
192.168.30.153 web7.yxl.com
##### apache vhosts by yxl $(date +%F_%T) #####
EOF
ping网页是否可以ping通
cat /etc/hosts
ping -c 2 web7.yxl.com &> /dev/null ;echo $?
输出为0则为通
Windows 客户端写 hosts 文件
修改方法 hosts 文件位置: C:\\Windows\\System32\\drivers\\etc\\hosts ⚠️ 必须用管理员权限编辑,否则保存会失败。
管理员权限打开记事本
1.开始菜单搜索 记事本 2.右键 → 以管理员身份运行 3.文件 → 打开 → 路径粘贴 C:\\Windows\\System32\\drivers\\etc\\hosts(右下角文件类型选"所有文件") 4.末尾追加: 192.168.30.153 web7.yxl.com
开启 Apache 的虚拟主机配置功能,并重启服务使其生效。
sed -i 's@#Include conf/extra/httpd-vhosts.conf@Include conf/extra/httpd-vhosts.conf@g' /usr/local/apache/conf/httpd.conf
grep -n httpd-vhosts /usr/local/apache/conf/httpd.conf
/usr/local/apache/bin/apachectl -k restart
部署Discuz(在Web 应用服务器192.168.30.153上部署)
第一步:确定 Web 根目录
编译安装的 Apache 默认根目录通常在 /usr/local/apache2/htdocs。为了方便管理,建议你在该目录下创建子目录。
第二步:解压并部署程序
请在终端执行以下命令:
部署 discuz
#下载依赖包
yum -y install bzip2 wget
# 1. 解压
cd /usr/local/src/lamp
unzip Discuz_X5.0_20260510.zip
# 2. 创建目录并移动文件 (upload目录里才是程序本体)
mkdir -p /usr/local/apache/htdocs/web7.yxl.com
mv upload/* /usr/local/apache/htdocs/web7.yxl.com/
# 3. 赋予权限 (Apache运行用户通常是daemon或nobody,编译安装默认多为daemon)
chown -R apache:apache /usr/local/apache/htdocs/web7.yxl.com
chmod -R 777 /usr/local/apache/htdocs/web7.yxl.com
第三步:配置虚拟主机
你需要编辑 Apache 配置文件。编译安装的配置文件通常在 /usr/local/apache2/conf/ 下。
1. 开启虚拟主机支持 编辑主配置文件:
vim /usr/local/apache/conf/httpd.conf
找到这一行,去掉前面的 # 号:
Include conf/extra/httpd-vhosts.conf
找到 ServerAdmin you@example.com ,在下面添加:
ServerName localhost:80
2. 编辑虚拟主机配置
编辑虚拟主机文件:
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
清空文件内容,复制粘贴以下配置:
# — Discuz 虚拟主机 —
<VirtualHost *:80>
ServerName web7.yxl.com
ServerAdmin admin@yxl.com
DocumentRoot "/usr/local/apache/htdocs/web7.yxl.com"
DirectoryIndex index.php index.html
<Directory "/usr/local/apache/htdocs/web7.yxl.com">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog "logs/web2-error_log"
CustomLog "logs/web2-access_log" common
</VirtualHost>
第四步:重启 Apache
编译安装的服务不能用 systemctl,必须用绝对路径。
1. 检查配置语法是否正确(非常重要,防止配错导致起不来)
/usr/local/apache/bin/apachectl -t
如果显示 Syntax OK,继续下一步。
2. 重启服务
/usr/local/apache/bin/apachectl restart
第五步:数据库准备
这一步和安装方式无关,直接登录数据库操作:
— 1. 创建 Discuz 专用数据库(推荐 utf8mb4 字符集)
CREATE DATABASE discuz_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
— 2. 创建专用用户并授权(允许从 Web 服务器 IP 连接)
CREATE USER 'discuz_user'@'192.168.30.153' IDENTIFIED BY 'YourStrongPassword';
GRANT ALL PRIVILEGES ON discuz_db.* TO 'discuz_user'@'192.168.30.153';
— 3. 刷新权限使配置生效
FLUSH PRIVILEGES;
配置 MySQL 远程访问(在)
默认情况下,MySQL 8.0 仅监听本地回环地址 (127.0.0.1),这会导致 Web 服务器无法连接。需要在数据库服务器 (192.168.30.154) 上修改配置,允许远程连接。
编辑 MySQL 配置文件:
vim /etc/my.cnf
在 [mysqld] 模块下,添加或修改以下两行配置:
[mysqld]
bind-address = 0.0.0.0 # 监听所有网络接口。若仅允许 Web 服务器访问,可改为 192.168.30.154
skip-name-resolve # 跳过 DNS 反向解析,提升连接性能并避免潜在的主机名解析错误
保存并重启 MySQL 服务:
systemctl restart mysqld
修改 Discuz 数据库连接配置
在 Discuz 安装界面若出现“数据库连接错误”,通常是因为其配置文件中的数据库地址仍指向本地。需要将其修改为数据库服务器的实际 IP。
编辑 Discuz 的默认配置文件:
vim /usr/local/apache/htdocs/web7.yxl.com/config/config_global_default.php
定位并修改数据库服务器地址: 找到 $_config['db']['1']['dbhost'] 配置项,将其值从默认的 localhost 或 127.0.0.1 修改为数据库服务器的 IP 地址:
$_config['db']['1']['dbhost'] = '192.168.30.154';
第六步:本地 Hosts 绑定(测试用)
1. 配置本地 Hosts 文件(在你的 Windows 电脑操作)
找到路径:C:\\Windows\\System32\\drivers\\etc 找到名为 hosts 的文件。 右键该文件,选择“打开方式” -> “记事本”(或者用 Notepad++ 等编辑器)。 在文件的最底部添加:
192.168.30.157 web7.yxl.com
保存文件(Ctrl + S)。
2. 验证访问
打开你 Windows 电脑上的浏览器(Chrome/Edge):
输入:
http://web7.yxl.com/install
该能看到 WordPress 的安装界面

这里就完成,这个主要是学习分离式部署。感谢阅读!!!






