基于Centos7.9部署编译安装LAMP分离式部署
2026/6/6 12:50:41 网站建设 项目流程

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.12192.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/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\wget

2、编译安装 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-yinstallbzip2

3、编译安装 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.conf

8、启动 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/mysql

2、# 创建用户与数据目录

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/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/mysqldchmod+x /etc/init.d/mysqld

6、 设置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 on

7、 启动 MySQL

systemctl start mysqld

查看进程和端口

ss-tulanp|grepmysqld

psaxu|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.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=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-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_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.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-krestart

![在这里插入图片描述]

测试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)&&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.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/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: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 连接) 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) 上修改配置,允许远程连接。

  1. 编辑 MySQL 配置文件

    vim/etc/my.cnf
  2. [mysqld]模块下,添加或修改以下两行配置

    [mysqld] bind-address = 0.0.0.0 # 监听所有网络接口。若仅允许 Web 服务器访问,可改为 192.168.30.154 skip-name-resolve # 跳过 DNS 反向解析,提升连接性能并避免潜在的主机名解析错误
  3. 保存并重启 MySQL 服务

    systemctl restart mysqld

修改 Discuz 数据库连接配置

在 Discuz 安装界面若出现“数据库连接错误”,通常是因为其配置文件中的数据库地址仍指向本地。需要将其修改为数据库服务器的实际 IP。

  1. 编辑 Discuz 的默认配置文件

    vim/usr/local/apache/htdocs/web7.yxl.com/config/config_global_default.php
  2. 定位并修改数据库服务器地址
    找到$_config['db']['1']['dbhost']配置项,将其值从默认的localhost127.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 的安装界面







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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询