CentOS7.9编译安装LAMP(Linux+Apache+Mysql+PHP)分离式部署
环境规划
| 节点角色 | 操作系统 & 软件版本 | IP 地址 | 备注 |
|---|---|---|---|
| Web 应用服务器 | CentOS 7.9 x86_64 Apache/2.4.67 PHP 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.repoCentOS 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/lampcd/usr/local/src/lamp关闭 SELinux(否则容易 403/权限诡异)
setenforce0sed-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-yinstallgcc gcc-c++makeautoconf automake libtool yum-yinstallpcre pcre-devel zlib zlib-devel openssl openssl-devel yum-yinstalllibxml2 libxml2-develcurlcurl-devel libpng libpng-devel yum-yinstallfreetype freetype-devel libjpeg libjpeg-devel yum-yinstalllibmcrypt libmcrypt-develbzip2bzip2-devel创建运行用户(Apache/PHP-FPM 都用它):
useradd-r-M-s/sbin/nologin apache||true三、编译安装Apache(在Web 应用服务器192.168.30.153上部署)
1、装编译基础依赖(必须)
yum-yinstall\gcc gcc-c++make\pcre-devel openssl-devel expat-devel\bzip2-devel libxml2-devel\curl-devel libpng-devel libjpeg-devel freetype-devel\libzip-devel\wget2、编译安装 APR + APR-UTIL(Apache 依赖)
解压
cd/usr/local/src/lamptar-zxfapr-1.7.6.tar.gztar-zxfapr-util-1.6.3.tar.gztar-jxfhttpd-2.4.67.tar.bz2 yum-yinstallbzip23、编译安装 APR
cd/usr/local/src/lamp/apr-1.7.6 ./configure--prefix=/usr/local/apr;echo$?make-j$(nproc)&&makeinstall;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)&&makeinstall;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)&&makeinstall;echo$?7、修改配置文件用户组
sed-i's/^User daemon/User apache/'/usr/local/apache/conf/httpd.confsed-i's/^Group daemon/Group apache/'/usr/local/apache/conf/httpd.conf8、启动 Apache 并设置开机自启
/usr/local/apache/bin/apachectl startecho"/usr/local/apache/bin/apachectl start">>/etc/rc.localchmod+700 /etc/rc.local测试访问:浏览器打开 http://服务器IP看到 It works! 说明 Apache 安装成功。
四,进制安装 MySQL 8.0.12(在数据库服务器192.168.30.154上部署)
1、 解压
cd/usr/local/src/lamp/tar-zxfmysql-8.0.12-el7-x86_64.tar.gz-C/usr/local/mv-v/usr/local/mysql-8.0.12-el7-x86_64 /usr/local/mysql2、# 创建用户与数据目录
useradd-r-M-s/sbin/nologin mysqlmkdir-pv/data/mysql/mysql3306chown-Rmysql:mysql /data/mysql/mysql3306 /usr/local/mysqlchmod-R755/data/mysql/mysql3306ls-lhrt-d/data/mysql/mysql33063、# 配置 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/mysqldchmod+x /etc/init.d/mysqld6、 设置basedir和datadir
sed-i'2i\basedir=/usr/local/mysql'/etc/init.d/mysqldsed-i'3i\datadir=/data/mysql/mysql3306'/etc/init.d/mysqldgrep-En'basedir|datadir'/etc/init.d/mysqldchkconfig--addmysqldchkconfigmysqld on7、 启动 MySQL
systemctl start mysqld查看进程和端口
ss-tulanp|grepmysqldpsaxu|grepmysqld##### ps的输出:必须注意你的basedir和datadir是上面设置的才是正确的。#####
8、修改 MySQL 密码
/usr/local/mysql/bin/mysql-uroot-p"你的初始密码"使用第4点的初始密码密码来重置密码
9、进入MySQL后执行:
ALTERUSER'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-yinstall\oniguruma-devel\sqlite-devel✅ 方案 A(更推荐/更像“企业交付”):PHP-FPM + Apache ProxyFCGI
优点:PHP 与 Apache 解耦、升级 PHP 不用动 httpd;Discuz/WP 都跑得很稳。
缺点:需要多配几行 httpd 的代理规则(我给你现成的)。
解压 PHP-FPM
cd/usr/local/src/lamptarxf php-8.2.0.tar.bz2cdphp-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)&&makeinstall;echo$?配置PHP-FPM进程池(调优性能)
将php.ini-production复制为生产环境配置
cp-avphp.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.confcp-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.confuser=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=5pm.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服务psaxu|grepphp-fpmApache 侧启用 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_moduleLoadModule 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.confsed-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.confgrep-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-A12FilesMatch /usr/local/apache/conf/httpd.conf1)PHP 解析转发到 php-fpm(你要求的规则)<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
2)默认首页支持 index.phpplaintext DirectoryIndex index.php index.html
重启 apache:
/usr/local/apache/bin/apachectl /usr/local/apache/bin/apachectl-krestart![在这里插入图片描述]
测试Apache解析PHP动态脚本
cat>>/usr/local/apache/htdocs/index.php<<EOF <?php phpinfo(); ?> EOFchrome浏览器,可以看到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)&&makeinstall;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/extracp-avhttpd-vhosts.conf /opt/httpd-vhosts.conf.bakcd/usr/local/apache/conf/extratouchweb7.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-Rapache:apache /usr/local/apache/htdocs/web7.yxl.com ll-d/usr/local/apache/htdocs/web7.yxl.comLinux 本机 /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) ##### EOFping网页是否可以ping通
cat/etc/hostsping-c2web7.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.confgrep-nhttpd-vhosts /usr/local/apache/conf/httpd.conf /usr/local/apache/bin/apachectl-krestart部署Discuz(在Web 应用服务器192.168.30.153上部署)
第一步:确定 Web 根目录
编译安装的 Apache 默认根目录通常在/usr/local/apache2/htdocs。为了方便管理,建议你在该目录下创建子目录。
第二步:解压并部署程序
请在终端执行以下命令:
部署 discuz
#下载依赖包yum-yinstallbzip2wget# 1. 解压cd/usr/local/src/lampunzipDiscuz_X5.0_20260510.zip# 2. 创建目录并移动文件 (upload目录里才是程序本体)mkdir-p/usr/local/apache/htdocs/web7.yxl.commvupload/* /usr/local/apache/htdocs/web7.yxl.com/# 3. 赋予权限 (Apache运行用户通常是daemon或nobody,编译安装默认多为daemon)chown-Rapache:apache /usr/local/apache/htdocs/web7.yxl.comchmod-R777/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:802. 编辑虚拟主机配置
编辑虚拟主机文件:
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 连接) CREATEUSER'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 的安装界面
这里就完成,这个主要是学习分离式部署。感谢阅读!!!