基于CentOS7.9——分离式部署lamp(apache_php-fpm和mysql分离)并部署discuz
环境准备
1.分配ip以及服务器
| 角色 | OS和软件版本 | 服务器IP地址 |
|---|---|---|
| Web服务器 | CentOS 7.9 x86_64 | 192.168.30.124 |
| Apache反向代理服务器 | Apache 2.4.67 | 192.168.30.124 |
| PHP程序(处理动态php脚本,连接数据库) | PHP 8.2.0 | 192.168.30.124 |
| MySQL数据库服务器 | MySQL 8.0.12 | 192.168.30.125 |
2. 配置yum源(阿里云镜像)
为了加快软件包下载速度并确保依赖包能够顺利安装,建议将系统的yum源配置为国内镜像源(如阿里云镜像)。以下以阿里云镜像为例进行配置。
1.1配置两个服务器的阿里云Base源
CentOS 7 系统的默认Base源替换为阿里云镜像:
# 备份原有源文件(可选)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载阿里云CentOS 7 Base源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理yum缓存并生成新缓存
yum clean all
yum makecache
1.2 配置阿里云EPEL源
EPEL(Extra Packages for Enterprise Linux)源提供了许多额外的软件包,对于LAMP环境部署很有帮助:
# 下载阿里云EPEL 7源
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 清理yum缓存并生成新缓存
yum clean all
yum makecache
1.3 配置Remi源
Remi 源是一个广受欢迎的第三方软件仓库,由开发者 Remi Collet 维护。它主要为 RHEL、CentOS 及其衍生版(如 Rocky Linux、AlmaLinux)提供最新版本的 PHP、MySQL/MariaDB 以及其他相关软件包
# 下载阿里云EPEL 7源
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# 清理yum缓存并生成新缓存
yum clean all
yum makecache
1.3 验证源配置
配置完成后,使用以下命令验证源是否生效:
# 查看所有启用的yum源
yum repolist
正常配置后,输出应类似如下(注意base、epel等源的地址显示为阿里云镜像):
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: ftp.iij.ad.jp
* extras: mirrors.aliyun.com
* remi-safe: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.aliyun.com
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,791
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 526
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 5,596
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 6,173
repolist: 36,158

提示:
- 如果服务器无法访问外网,请根据实际情况配置内网镜像源或使用本地源。
- 配置完成后,后续的
yum install命令将从阿里云镜像站下载软件包,速度更快。- 如果遇到
curl命令无法执行,请先安装curl:yum install -y curl
2.部署前置
2.1系统要求
- 内存:建议 ≥ 2GB
- 硬盘:建议 ≥ 20GB
- 网络:必须能联网,用于下载源码包和依赖
2.2 源码包准备
-
源码包下载地址:
https://download.csdn.net/download/qq_44769717/92924011 -
将下载好的 4 个 LAMP 相关源码包(如 httpd、php 等)上传到apache_php-fpm服务器(192.168.30.124)的
/usr/local/src/lamp目录。将1个MySQL包上传到mysql服务器(192.168.30.125)的
/usr/local/src/lamp目录。 -
确保该目录存在,若不存在请先创建:
mkdir -pv /usr/local/src/lamp -
进入该目录,确认所有源码包已就位:
cd /usr/local/src/lamp ls -l


3. 系统安全配置
在部署 LAMP 环境前,建议对系统安全策略进行适当调整,以避免后续出现权限问题或端口访问限制。
3.1 关闭 SELinux
SELinux(Security-Enhanced Linux)是 Linux 的安全模块,但在部署 LAMP 时可能会因严格的权限控制导致 403 错误或其他权限问题。建议临时关闭并永久禁用:
# 临时关闭 SELinux(立即生效)
setenforce 0
# 永久禁用 SELinux(重启后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 验证 SELinux 状态
getenforce
sestatus
注意:生产环境请谨慎操作,建议根据实际安全需求配置 SELinux 策略而非直接关闭。
3.2 防火墙配置
CentOS 7.9 默认使用 firewalld 作为防火墙管理工具。为了方便测试,可以暂时关闭防火墙,或在防火墙中放行 Web 服务端口。
方案一:关闭防火墙(推荐用于测试环境)
# 停止防火墙服务
systemctl stop firewalld
# 禁止防火墙开机自启
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld
方案二:放行 HTTP/HTTPS 端口(如需保持防火墙开启)
# 放行 HTTP (80) 和 HTTPS (443) 端口
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
# 重新加载防火墙配置
firewall-cmd --reload
# 查看已放行的服务
firewall-cmd --list-services
提示:如果使用其他防火墙工具(如 iptables),请相应调整配置。
4. 安装编译依赖
在编译安装 LAMP 各组件之前,需要安装必要的编译工具和开发库。以下命令将一次性安装所有必需的依赖包。
4.1 安装基础编译工具和库
执行以下命令安装编译所需的核心工具和常用开发库:
# 安装基础编译工具链
yum -y install gcc gcc-c++ make autoconf automake libtool
# 安装 Web 服务器(如 Apache)相关依赖
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 安装 PHP 相关依赖
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 wget
4.2 使用单条命令安装(推荐)
为了简化操作,可以使用以下单条命令安装所有依赖:
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
4.3 验证安装
安装完成后,可以验证关键工具是否安装成功:
# 检查编译器版本
gcc --version
g++ --version
make --version
# 检查常用开发库
pcre-config --version
openssl version
提示:
- 如果某些包在默认仓库中不存在,可以尝试启用 EPEL 仓库:
yum install epel-release -y- 安装过程可能需要几分钟时间,请确保网络连接正常
- 所有
-devel包提供了头文件和静态库,是编译源码所必需的
5. 创建运行用户
在编译安装 Apache 和 PHP-FPM 之前,建议创建一个专用的系统用户来运行这些服务。使用专用用户可以提高安全性,避免使用 root 用户运行 Web 服务带来的安全风险。
5.1 创建 Apache/PHP-FPM 运行用户
在apache_php-fpm(192.168.30.124)服务器中
执行以下命令创建一个名为 apache 的系统用户(该用户将用于运行 Apache 和 PHP-FPM):
# 创建系统用户 apache(不创建家目录,不允许登录)
useradd -r -M -s /sbin/nologin apache
# 验证用户是否创建成功
id apache

命令参数说明:
-r:创建系统用户(UID < 1000)-M:不创建用户家目录-s /sbin/nologin:设置登录 shell 为/sbin/nologin,禁止该用户登录系统apache:用户名(可根据需要修改,如www-data、nginx等)
5.2 验证用户信息
创建完成后,可以通过以下命令查看用户详细信息:
# 查看用户基本信息
id apache
# 查看用户配置文件
grep '^apache:' /etc/passwd
# 查看用户所属组
groups apache
正常输出应类似:
uid=997(apache) gid=995(apache) groups=995(apache)
apache:x:997:995::/home/apache:/sbin/nologin
apache : apache

5.3 后续使用说明
- 编译 Apache 时:在
./configure阶段可以通过--with-mpm=prefork --with-user=apache --with-group=apache参数指定运行用户 - 配置 PHP-FPM 时:在
php-fpm.conf或www.conf中设置user = apache和group = apache - 目录权限设置:Web 根目录(如
/var/www/html)的所有者可以设置为apache:apache或通过 ACL 设置相应权限
安全建议:
- 生产环境中,建议为 Apache 和 PHP-FPM 分别创建不同的用户,实现更细粒度的权限控制
- 定期检查运行用户权限,确保没有不必要的特权
- 使用
ps aux | grep apache可以查看 Apache 进程的实际运行用户
编译安装Apache(服务器IP:192.168.30.124)
Apache HTTP Server 是 LAMP 环境的核心组件之一。在编译安装 Apache 之前,需要先安装其依赖库 APR(Apache Portable Runtime)和 APR-UTIL。
1. 解压源码包
首先进入源码目录并解压相关源码包:
# 进入源码目录
cd /usr/local/src/lamp
# 解压 APR、APR-UTIL 和 Apache 源码包
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
# 查看是否解压
ls -l

2. 安装 APR 和 APR-UTIL
APR 和 APR-UTIL 是 Apache 的底层运行库,提供了跨平台的操作系统抽象层,确保 Apache 在不同系统上的可移植性。
2.1 编译安装 APR
APR 是 Apache 的底层运行环境,需要先安装:
# 进入 APR 源码目录
cd apr-1.7.6
# 配置编译选项(安装到 /usr/local/apr)
./configure --prefix=/usr/local/apr
# 检查配置是否成功(返回 0 表示成功)
echo $?
# 编译并安装(使用多核加速编译)
make -j$(nproc) && make install
# 检查安装是否成功(返回 0 表示成功)
echo $?

2.2 编译安装 APR-UTIL
APR-UTIL 是 APR 的实用工具库,依赖于已安装的 APR:
# 返回上级目录并进入 APR-UTIL 源码目录
cd ../apr-util-1.6.3
# 配置编译选项(指定 APR 的安装路径)
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# 检查配置是否成功
echo $?
# 编译并安装
make -j$(nproc) && make install
# 检查安装是否成功
echo $?

2.3 验证安装
安装完成后,验证 APR 和 APR-UTIL 是否安装成功:
# 检查 APR 安装目录
ls -la /usr/local/apr/
# 检查 APR-UTIL 安装目录
ls -la /usr/local/apr-util/
# 查看 APR 版本
/usr/local/apr/bin/apr-1-config --version
# 查看 APR-UTIL 版本
/usr/local/apr-util/bin/apu-1-config --version
正常输出应显示类似以下信息:
apr-1.7.6
apu-1.6.3

提示:
-j$(nproc)参数表示使用所有 CPU 核心并行编译,可以显著加快编译速度echo $?用于检查上一条命令的退出状态,返回 0 表示成功,非 0 表示失败,echo $? 可以加在命令后面,在使用的时命令与echo $? 中间要有个;符号,例如 ls -l ; echo $?- 如果编译过程中出现错误,请检查是否已安装所有必要的编译依赖(参考第 4 章)
- 确保
/usr/local/apr和/usr/local/apr-util目录有足够的写入权限
3. 编译安装 Apache HTTP Server
完成 APR 和 APR-UTIL 的安装后,现在可以开始编译安装 Apache HTTP Server 2.4.67。
3.1 进入 Apache 源码目录并配置
# 返回上级目录并进入 Apache 源码目录
cd ../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
# 检查配置是否成功(返回 0 表示成功)
echo $?

配置参数说明:
--prefix=/usr/local/apache:指定安装目录--with-apr=/usr/local/apr:指定 APR 安装路径--with-apr-util=/usr/local/apr-util:指定 APR-UTIL 安装路径--enable-so:启用动态模块加载(DSO)--enable-ssl:启用 SSL/TLS 支持--enable-cgi:启用 CGI 支持--enable-rewrite:启用 URL 重写模块--enable-modules=most:启用大多数常用模块--enable-mpms-shared=all:将所有 MPM(多处理模块)编译为共享模块--with-pcre:使用 PCRE 正则表达式库--with-zlib:使用 zlib 压缩库--with-mpm=event:指定使用 event MPM(高性能多处理模块)
3.2 编译并安装 Apache
# 编译并安装(使用多核加速)
make -j$(nproc) && make install
# 检查安装是否成功(返回 0 表示成功)
echo $?

编译过程可能需要 5-15 分钟,具体时间取决于服务器性能。
3.3 修改 Apache 配置文件
安装完成后,需要修改 Apache 配置文件,将运行用户和组从默认的 daemon 改为之前创建的 apache 用户:
# 修改运行用户为 apache
sed -i 's/^User daemon/User apache/' /usr/local/apache/conf/httpd.conf
# 修改运行组为 apache
sed -i 's/^Group daemon/Group apache/' /usr/local/apache/conf/httpd.conf
# 验证修改是否成功
grep -E '^User|^Group' /usr/local/apache/conf/httpd.conf
正常输出应为:
User apache
Group apache

3.4 启动 Apache 并设置开机自启
# 启动 Apache 服务
/usr/local/apache/bin/apachectl start
# 检查 Apache 进程是否运行
ps aux | grep httpd
# 检查 Apache 监听端口
netstat -tlnp | grep :80
# 设置 Apache 开机自启
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
# 确保 rc.local 文件有执行权限
chmod +x /etc/rc.local
# 验证 rc.local 配置
cat /etc/rc.local

3.5 测试 Apache 安装
-
通过命令行测试 :
# 使用 curl 测试本地 Apache curl -I http://localhost # 或者使用 wget wget -q -O - http://localhost | head -20

- 通过浏览器测试:
– 在浏览器地址栏输入:http://服务器IP地址
–如果看到 Apache 的默认页面显示 “It works!”,说明 Apache 安装成功
编译安装PHP(服务器IP:192.168.30.124)
PHP 是 LAMP 环境中的动态脚本语言组件,负责处理 Web 应用的后端逻辑。这里采用源码编译安装方式,以获得更好的性能和定制化配置。
1. 安装 PHP 额外依赖
在编译 PHP 之前,需要安装一些额外的依赖包,以确保编译过程中不会缺少必要的扩展支持:
# 安装 PHP 编译所需的额外依赖
yum -y install \
oniguruma-devel \
sqlite-devel
依赖包说明:
oniguruma-devel:正则表达式库,为 PHP 的 mbstring 扩展提供支持sqlite-devel:SQLite 数据库开发包,为 PHP 的 SQLite 扩展提供支持
2. 编译安装 PHP-FPM
2.1 解压 PHP 源码包
# 进入 LAMP 源码目录
cd /usr/local/src/lamp
# 解压 PHP 8.2.26 源码包
tar xf php-8.2.0.tar.bz2
# 进入 PHP 源码目录
cd php-8.2.0

2.2 配置编译选项
# 配置 PHP 编译选项
./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 \
--with-jpeg \
--with-freetype \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-gd \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-opcache \
--disable-rpath
# 检查配置是否成功(返回 0 表示成功)
echo $?

配置参数说明:
--prefix=/usr/local/php82:指定 PHP 安装目录--with-config-file-path=/usr/local/php82/etc:指定 PHP 配置文件目录--enable-fpm:启用 PHP-FPM(FastCGI Process Manager)--with-fpm-user=apache:设置 PHP-FPM 运行用户--with-fpm-group=apache:设置 PHP-FPM 运行组--with-openssl:启用 OpenSSL 支持--with-curl:启用 cURL 支持--with-zlib:启用 zlib 压缩支持--with-gd:启用 GD 图像处理库--with-jpeg:启用 JPEG 图像支持--with-freetype:启用 FreeType 字体支持--with-mysqli=mysqlnd:启用 MySQLi 扩展(使用 MySQL Native Driver)--with-pdo-mysql=mysqlnd:启用 PDO MySQL 扩展(使用 MySQL Native Driver)--enable-mbstring:启用多字节字符串支持--enable-xml:启用 XML 支持--enable-session:启用会话支持--enable-opcache:启用 OPcache 字节码缓存--disable-rpath:禁用运行时路径搜索
2.3 编译并安装 PHP
# 编译并安装 PHP(使用多核加速)
make -j $(nproc) && make install
# 检查安装是否成功(返回 0 表示成功)
echo $?

编译过程可能需要 10-30 分钟,具体时间取决于服务器性能。
3. 配置 PHP 和 PHP-FPM
3.1 配置 php.ini 文件
# 复制 PHP 生产环境配置文件
cp -av php.ini-production /usr/local/php82/etc/php.ini
# 验证配置文件是否复制成功
ls -l /usr/local/php82/etc/php.ini

3.2 配置 PHP-FPM
# 复制 PHP-FPM 配置文件
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
# 编辑 www.conf 配置文件
vim /usr/local/php82/etc/php-fpm.d/www.conf
在编辑器中,至少需要修改以下配置项:
; 设置 PHP-FPM 运行用户和组
user = apache
group = apache
; 设置 PHP-FPM 监听地址和端口
listen = 127.0.0.1:9000
; 设置监听 socket 的所有者和组
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

3.3 启动 PHP-FPM
# 测试 PHP-FPM 配置语法
/usr/local/php82/sbin/php-fpm -t
# 启动 PHP-FPM
/usr/local/php82/sbin/php-fpm
# 检查 PHP-FPM 进程
ps axu | grep php-fpm

4. 配置 Apache 与 PHP-FPM 集成
4.1 启用 Apache 的 proxy_fcgi 模块
检查 Apache 是否已加载必要的模块:
# 检查 proxy_module 和 proxy_fcgi_module 是否已加载
grep -En 'proxy_module|proxy_fcgi_module' /usr/local/apache/conf/httpd.conf

如果输出中没有显示已加载,则需要启用这两个模块:
# 启用 proxy_module
sed -i 's@#LoadModule proxy_module modules/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@g' /usr/local/apache/conf/httpd.conf
# 启用 proxy_fcgi_module
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

4.2 修改 Apache 配置文件
编辑 Apache 主配置文件:
vim /usr/local/apache/conf/httpd.conf
在配置文件中添加以下内容:
-
配置 PHP 文件处理
(在配置文件中添加):
# PHP 解析转发到 PHP-FPM <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>

-
设置默认首页支持 index.php
(找到
<IfModule dir_module>部分修改):
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>

重要提示:
- 如果使用 VirtualHost,请将上述配置添加到相应的 VirtualHost 配置块内
- 如果使用全局配置,请确保配置在适当的 Directory 指令之后
4.3 重启 Apache 服务
# 重启 Apache 使配置生效
/usr/local/apache/bin/apachectl restart
# 检查 Apache 和 PHP-FPM 进程状态
ps aux | grep -E '(httpd|php-fpm)'
# 如果php-fpm没有启动执行以下指令
/usr/local/php82/sbin/php-fpm
# 检查端口监听状态
ss -tulanp | grep -E ':80|:9000'

5. 测试 PHP 解析
5.1 创建 PHP 测试文件
# 创建 PHP 信息测试文件
cat > /usr/local/apache/htdocs/index.php << 'EOF'
<?php
phpinfo();
?>
EOF
# 验证文件内容
cat /usr/local/apache/htdocs/index.php

5.2 通过浏览器测试
- 打开浏览器,访问:
http://你的服务器IP地址 - 如果看到 Apache 的 “It works!” 页面,说明 Apache 正常运行
- 访问:
http://你的服务器IP地址/index.php - 如果看到 PHP 信息页面,显1示 PHP 版本、配置信息、环境变量等,说明 PHP 解析成功


5.3 通过命令行测试
# 测试 PHP 命令行版本
/usr/local/php82/bin/php --version
# 创建简单的 PHP 测试脚本
cat > /tmp/test.php << 'EOF'
<?php
echo "PHP is working!\n";
echo "PHP Version: " . phpversion() . "\n";
echo "Current Date: " . date('Y-m-d H:i:s') . "\n";
?>
EOF
# 执行测试脚本
/usr/local/php82/bin/php /tmp/test.php


编译安装mysql(服务器IP:192.168.30.125)
MySQL 是 LAMP 环境中的数据库组件。这里采用二进制包安装方式,相比源码编译安装更加快捷方便。
1. 解压 MySQL 二进制包
# 进入到目录 /usr/local/src/lamp
cd /usr/local/src/lamp
# 解压 MySQL 8.0.12 二进制包到 /usr/local 目录
tar -zxf mysql-8.0.12-el7-x86_64.tar.gz -C /usr/local/
# 重命名目录为 mysql(便于管理)
mv -v /usr/local/mysql-8.0.12-el7-x86_64 /usr/local/mysql

2. 创建 MySQL 用户与数据目录
# 创建 MySQL 系统用户(不创建家目录,不允许登录)
useradd -r -M -s /sbin/nologin mysql
# 创建 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. 配置 MySQL 配置文件(my.cnf)
创建 MySQL 配置文件,指定基础目录、数据目录等关键参数:
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
# 验证配置文件内容
cat /etc/my.cnf

配置文件参数说明:
basedir:MySQL 安装目录datadir:MySQL 数据存储目录socket:MySQL 套接字文件路径user:MySQL 运行用户port:MySQL 服务端口(默认 3306)character-set-server:服务器默认字符集(推荐 utf8mb4)default-storage-engine:默认存储引擎(推荐 INNODB)max_connections:最大连接数lower_case_table_names=1:表名不区分大小写
4. 初始化 MySQL 并启动服务
4.1 初始化 MySQL 数据库
重要提醒:初始化操作只能执行一次!如果多次初始化,会覆盖原有的元数据信息。如果生产环境已有数据,请勿重新初始化!
# 初始化 MySQL(生成临时 root 密码,务必记下)
/usr/local/mysql/bin/mysqld \
--initialize \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/data/mysql/mysql3306
# 检查初始化是否成功
echo $?

初始化注意事项:
-
初始化过程会生成一个临时的 root 密码,请务必记下(在初始化输出的最后几行)
-
如果初始化失败并提示 “libnuma.so.1” 或 “libaio.so.1” 找不到,请先安装依赖:
yum -y install numactl-libs libaio然后重新执行初始化命令
4.2 配置 MySQL 启动脚本
# 复制 MySQL 启动脚本
cp -av /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 添加执行权限
chmod +x /etc/init.d/mysqld
# 在启动脚本中添加 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
# 添加 MySQL 到系统服务并设置开机自启
chkconfig --add mysqld
chkconfig mysqld on



4.3 启动 MySQL 服务
# 启动 MySQL 服务
systemctl start mysqld
# 检查 MySQL 进程
ps aux | grep mysqld
# 检查 MySQL 监听端口(3306)
ss -tulanp | grep mysqld

验证要点:
- 检查
ps aux | grep mysqld输出中的basedir和datadir是否正确指向/usr/local/mysql和/data/mysql/mysql3306 - 确认
ss -tulanp | grep mysqld显示 MySQL 正在监听 3306 端口
5. 修改 MySQL root 密码
5.1 使用临时密码登录 MySQL
# 使用初始化时生成的临时密码登录 MySQL
# 注意:临时密码在初始化输出的最后几行,请替换 '临时密码' 为实际密码
/usr/local/mysql/bin/mysql -uroot -p'临时密码'
如果忘记临时密码,可以在 MySQL 错误日志中查找:
# 查看 MySQL 错误日志获取临时密码
grep 'temporary password' /data/mysql/mysql3306/error.log

5.2 修改 root 密码
成功登录 MySQL 后,执行以下 SQL 语句修改 root 密码:
-- 修改 root 用户密码为 'root'(生产环境请使用强密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出 MySQL
exit

6. 测试 MySQL 新密码登录
# 使用新密码测试登录并查看 MySQL 状态
/usr/local/mysql/bin/mysql -uroot -proot -e "\s"

7. MySQL 安装验证
验证 MySQL 安装
# 查看 MySQL 版本
/usr/local/mysql/bin/mysql --version
# 查看 MySQL 运行状态
systemctl status mysqld
# 测试 MySQL 连接
/usr/local/mysql/bin/mysql -uroot -proot -e "SELECT VERSION();"

8. 常见问题排查
8.1 初始化失败问题
问题:执行初始化时提示 “libnuma.so.1: cannot open shared object file” 或 “libaio.so.1: cannot open shared object file”
解决方案:
# 安装缺失的依赖库
yum -y install numactl-libs libaio
# 重新初始化 MySQL
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306
8.2 启动失败问题
问题:MySQL 服务启动失败
排查步骤:
# 检查配置文件语法
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --validate-config
# 检查端口是否被占用
netstat -tlnp | grep :3306
# 检查目录权限
ls -ld /data/mysql/mysql3306 /usr/local/mysql
配置基于域名的虚拟主机(服务器IP:192.168.30.124)
在 LAMP 环境搭建完成后,配置基于域名的虚拟主机可以实现一台服务器同时托管多个网站。每个虚拟主机使用不同的域名进行区分,访问不同的网站目录。
1. 备份默认虚拟主机配置文件
在修改配置文件之前,建议先备份原始文件,以便出现问题时可以恢复:
# 进入 Apache 虚拟主机配置目录
cd /usr/local/apache/conf/extra
# 备份默认的虚拟主机配置文件
cp -av httpd-vhosts.conf /opt/httpd-vhosts.conf.bak

2. 配置基于域名的虚拟主机
实际生产环境中,建议一个虚拟主机使用一个单独的配置文件进行控制,实现配置文件的解耦管理。
2.1 创建独立的虚拟主机配置文件
# 创建两个虚拟主机的独立配置文件
touch web1.lmx.com.conf web2.lmx.com.conf
2.2 编写虚拟主机配置
使用以下命令覆盖默认的虚拟主机配置文件:
cat > /usr/local/apache/conf/extra/httpd-vhosts.conf <<'EOF'
# ====== Virtual Hosts ======
# 基于域名(name-based)的虚拟主机
# 服务器: 192.168.30.124
# ---------- web1: PHP 站点 ----------
<VirtualHost *:80>
ServerName web1.lmx.com
ServerAdmin admin@lmx.com
DocumentRoot "/usr/local/apache/htdocs/web1.lmx.com"
DirectoryIndex index.php index.html
<Directory "/usr/local/apache/htdocs/web1.lmx.com">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/web1-error_log"
CustomLog "logs/web1-access_log" common
</VirtualHost>
# ---------- web2: HTML 站点 ----------
<VirtualHost *:80>
ServerName web2.lmx.com
ServerAdmin admin@lmx.com
DocumentRoot "/usr/local/apache/htdocs/web2.lmx.com"
DirectoryIndex index.html index.php
<Directory "/usr/local/apache/htdocs/web2.lmx.com">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog "logs/web2-error_log"
CustomLog "logs/web2-access_log" common
</VirtualHost>
EOF

配置参数说明:
ServerName:虚拟主机对应的域名ServerAdmin:管理员邮箱地址DocumentRoot:网站根目录路径DirectoryIndex:默认首页文件(按优先级排列)Options -Indexes:禁止目录浏览Options +FollowSymLinks:允许符号链接跟随AllowOverride All:允许 .htaccess 文件覆盖配置Require all granted:允许所有用户访问
3. 创建网站目录和测试页面
3.1 创建网站根目录
# 批量创建两个虚拟主机的网站目录
mkdir -pv /usr/local/apache/htdocs/web{1..2}.lmx.com

3.2 创建 web1 测试页面(PHP 页面)
web1 站点用于测试 PHP 解析能力,验证 LAMP 环境是否正常工作:
cat > /usr/local/apache/htdocs/web1.lmx.com/index.php <<'EOF'
<?php
echo "<h1>Web1 lengmoxi.com - PHP 环境正常</h1>";
phpinfo();
EOF

3.3 创建 web2 测试页面(HTML 页面)
web2 站点仅用于展示静态 HTML 页面:
cat > /usr/local/apache/htdocs/web2.lmx.com/index.html <<'EOF'
<h1>Web2 lengmoxi.com - HTML 页面正常</h1>
EOF

4. 修改目录权限
将网站目录的所有者修改为 Apache 运行用户,确保 Web 服务器有权限读取文件:
# 修改目录所有者为 apache 用户和组
chown -R apache:apache /usr/local/apache/htdocs/web{1..2}.lmx.com
# 验证目录权限
ll -d /usr/local/apache/htdocs/web{1..2}.lmx.com

5. 配置本地 hosts 文件解析
5.1 Linux 本机 hosts 配置
在服务器本机添加域名解析,以便通过域名访问虚拟主机:
# 在 /etc/hosts 文件中添加域名解析记录
cat >> /etc/hosts <<'EOF'
##### apache vhosts by lmx $(date +%F_%T) #####
192.168.30.124 web1.lmx.com
192.168.30.124 web2.lmx.com
##### apache vhosts by lmx $(date +%F_%T) #####
EOF
# 查看 hosts 文件内容
cat /etc/hosts
# 测试域名解析是否成功
ping -c 2 web1.lmx.com &> /dev/null ; echo $?
ping -c 2 web1.lmx.com
ping -c 2 web2.lmx.com &> /dev/null ; echo $?
ping -c 2 web2.lmx.com


5.2 Windows 客户端 hosts 配置
如果需要在 Windows 客户端上测试访问,需要修改本地的 hosts 文件。
hosts 文件位置:
C:\Windows\System32\drivers\etc\hosts
修改方法:
- 在开始菜单搜索「记事本」
- 右键 → 以管理员身份运行
- 文件 → 打开 → 路径粘贴
C:\Windows\System32\drivers\etc\hosts(右下角文件类型选「所有文件」) - 在文件末尾追加以下内容:
192.168.30.124 web1.lmx.com 192.168.30.124 web2.lmx.com

注意:必须使用管理员权限编辑 hosts 文件,否则保存会失败。
6. 启用虚拟主机配置
6.1 取消 httpd.conf 中虚拟主机配置的注释
Apache 主配置文件默认注释掉了虚拟主机配置文件的引入,需要取消注释以启用虚拟主机功能:
# 取消 Include conf/extra/httpd-vhosts.conf 的注释
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

6.2 重启 Apache 服务
# 重启 Apache 使配置生效
/usr/local/apache/bin/apachectl -k restart

7. 测试虚拟主机访问
7.1 测试 web1 站点(PHP 站点)
在浏览器中访问:http://web1.lmx.com/
预期结果:显示 PHP 信息页面,包含 PHP 版本、配置信息等,说明 PHP 解析正常。
7.2 测试 web2 站点(HTML 站点)
在浏览器中访问:http://web2.lmx.com/
预期结果:显示 “Web2 lengmoxi.com - HTML 页面正常” 的标题,说明静态页面正常。
8. 常见问题排查
8.1 访问时显示 Apache 默认页面
问题:访问虚拟主机域名时显示 “It works!” 默认页面
排查步骤:
# 检查虚拟主机配置是否已加载
/usr/local/apache/bin/apachectl -S
# 检查 hosts 文件解析是否正确
ping web1.lengmoxi.com
# 检查网站目录是否存在且权限正确
ls -ld /usr/local/apache/htdocs/web1.lengmoxi.com
8.2 访问时出现 403 Forbidden
问题:访问虚拟主机时出现 403 禁止访问错误
排查步骤:
# 检查目录权限
ls -ld /usr/local/apache/htdocs/web1.lengmoxi.com
# 检查 SELinux 状态(如果未关闭)
getenforce
# 检查 Apache 错误日志
tail -f /usr/local/apache/logs/error_log
8.3 PHP 文件无法解析
问题:访问 .php 文件时直接下载或显示源代码
排查步骤:
# 检查 proxy_fcgi 模块是否已加载
grep -E 'proxy_module|proxy_fcgi_module' /usr/local/apache/conf/httpd.conf
# 检查 PHP-FPM 是否正在运行
ps aux | grep php-fpm
# 检查 PHP-FPM 监听端口
ss -tulanp | grep :9000
部署Discuz(apache_php-fpm服务器192.168.30.124)
前置配置,在mysql服务器192.168.30.125中先修改配置
修改 MySQL 配置文件
vim /etc/my.cnf
编辑 [mysqld] 段,添加bind-address并确认端口为3306
bind-address = 0.0.0.0 # 监听所有网络接口(原可能为 127.0.0.1,仅本地)
port=3306 # 确认端口(默认 3306)

开始部署discuz论坛
在apache_php-fpm服务器中部署(192.168.30.124)
1. 确定 Web 根目录
编译安装的 Apache 默认根目录通常在 /usr/local/apache/htdocs。因为之前部署lamp后创建了虚拟主机目录了,选择第二个直接使用。
2. 解压并部署程序
请在终端执行以下命令:
#下载依赖包
yum -y install bzip2 wget unzip
# 1. 解压
cd /usr/local/src/lamp
mkdir -pv discuz
wget https://gitee.com/Discuz/DiscuzX/attach_files/2714621/download
mv download discuz.zip
unzip discuz.zip -d /usr/local/src/lamp/discuz
# 2. 移动文件 (upload目录里才是程序本体)
#移动重要文件
mv /usr/local/src/lamp/discuz/upload/* /usr/local/apache/htdocs/web1.lmx.com/
# 3. 赋予权限 (Apache运行用户通常是daemon或nobody,编译安装默认多为daemon)
chown -R daemon:daemon /usr/local/apache/htdocs/web1.lmx.com/
chmod -R 777 /usr/local/apache/htdocs/web1.lmx.com/


3. 配置虚拟主机
编辑 Apache 配置文件。编译安装的配置文件通常在 /usr/local/apache/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
修改的成如下配置:
# ---------- web1: PHP 站点 ----------
<VirtualHost *:80>
ServerName web1.lmx.com
ServerAdmin admin@lmx.com
DocumentRoot "/usr/local/apache/htdocs/web1.lmx.com"
DirectoryIndex index.php index.html
<Directory "/usr/local/apache/htdocs/web1.lmx.com">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/web1-error_log"
CustomLog "logs/web1-access_log" common
</VirtualHost>
4. 重启 Apache
编译安装的服务不能用 systemctl,必须用绝对路径。
1. 检查配置语法是否正确(非常重要,防止配错导致起不来)
/usr/local/apache/bin/apachectl -t

如果显示 Syntax OK,继续下一步。
2. 重启服务
/usr/local/apache/bin/apachectl restart

5. 数据库准备(在mysql服务器里进行)
这一步和安装方式无关,直接登录数据库操作:
-- 登录到数据库
/usr/local/mysql/bin/mysql -u root -proot
-- 1. 创建数据库(推荐使用 utf8mb4 字符集,完美兼容中文和特殊符号)
CREATE DATABASE discuz_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 2. 创建专属用户并授权
CREATE USER 'discuz_user'@'apache服务器IP' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON discuz_db.* TO 'discuz_user'@'apache服务器IP';
-- 3. 刷新权限并退出
FLUSH PRIVILEGES;
EXIT;

6. 本地 Hosts 绑定(测试用)
1. 配置本地 Hosts 文件(在你的 Windows 电脑操作)
找到路径:C:\Windows\System32\drivers\etc
找到名为 hosts 的文件。
右键该文件,选择“打开方式” -> “记事本”(或者用 Notepad++ 等编辑器)。
在文件的最底部添加:
192.168.30.124 web1.lmx.com
保存文件(Ctrl + S)。
2. 验证访问
打开你 Windows 电脑上的浏览器(Chrome/Edge):
输入:
http://web1.lmx.com/install/
该能看到 Discuz 的安装界面
重启apache
/usr/local/apache/bin/apachectl restart

7.安装discuz
进入页面,点击同意
检查环境显示没问题后点击下一步
选择中间的安装方式,点击下一步
填写完信息后,点击下一步
等待安装完成
点击进入管理后台,就进入了管理页面了

安装完成后,系统会提示删除 install 目录,务必执行:
rm -rf /usr/local/apache/htdocs/web1.lmx.com/install

说明
1.如果在网页上安装discuz中出现连接数据库失败,可以尝试进入discuz配置文件中指定数据库地址
修改discuz配置文件,将数据库地址改为数据库服务器IP
在apache_php-fpm服务器中进行操作
进入虚拟主机目录的config中
/usr/local/apache/htdocs/web1.lmx.com/config/

编辑config_global_default.php文件
vim config_global_default.php
# 修改这一行的ip,改成mysql服务器的ip地址
$_config['db'][1]['dbhost'] = '192.168.30.125';

2.如何进入论坛:

3.如何进入管理页面:

更多推荐

所有评论(0)