LNMP-Redis-NFS-Discuz5.0 部署指南 - 小白详细版
适用环境 :openEuler 24.03
部署方式 :分布式部署(两种方法可选)
生成时间:2026年4月15日
📖 目录
- [第一章 前期准备工作](#第一章 前期准备工作)
- [第二章 两种部署方法对比](#第二章 两种部署方法对比)
- [第三章 方法一:4台服务器部署](#第三章 方法一:4台服务器部署)
- [第四章 方法二:5台服务器+NFS部署](#第四章 方法二:5台服务器+NFS部署)
- [第五章 验证与测试](#第五章 验证与测试)
- [第六章 常见问题排查](#第六章 常见问题排查)
- 附录
- [附录 F:一键部署脚本](#附录 F:一键部署脚本)
第一章 前期准备工作
1.1 📚 为什么要做前期准备?
在正式部署之前,需要确保所有服务器都处于"干净、统一、可访问"的状态。这就像盖房子前要先把地平整好、材料准备好一样。前期准备工作做得好,后面部署就会顺利很多。
1.2 🖥️ 服务器要求
最低配置(测试环境)
| 组件 | CPU | 内存 | 磁盘 | 数量(方法一) | 数量(方法二) |
|---|---|---|---|---|---|
| MySQL | 2核 | 2GB | 20GB | 1台 | 1台 |
| Redis | 1核 | 1GB | 10GB | 1台 | 1台 |
| PHP-FPM | 2核 | 2GB | 20GB | 1台 | 1台 |
| Nginx | 1核 | 1GB | 10GB | 1台 | 1台 |
| NFS | 2核 | 2GB | 50GB+ | - | 1台 |
💡 小白提示:如果资源有限,可以适当降低配置,但内存不建议低于 1GB。
1.3 🌐 网络规划
IP 地址规划表
方法一(4台服务器):
| 服务器名称 | IP 地址 | 用途 |
|---|---|---|
| mysql | 192.168.100.157 | 数据库服务 |
| redis | 192.168.100.160 | 缓存服务 |
| php | 192.168.100.149 | PHP 应用处理 |
| nginx | 192.168.100.192 | Web 前端 |
方法二(5台服务器+NFS):
| 服务器名称 | IP 地址 | 用途 |
|---|---|---|
| mysql | 192.168.100.157 | 数据库服务 |
| redis | 192.168.100.160 | 缓存服务 |
| nfs | 192.168.100.190 | 共享存储 |
| php | 192.168.100.149 | PHP 应用处理 |
| nginx | 192.168.100.192 | Web 前端 |
💡 小白提示:请根据实际网络环境修改 IP 地址,确保所有服务器在同一网段且能互相通信。
1.4 📦 准备安装包
需要准备的文件
| 文件名 | 说明 | 获取方式 |
|---|---|---|
| Discuz_X5.0_20260410.zip | Discuz 安装包 | 官网下载:discuz.vip |
下载方法:
bash
# 方法一:使用 wget 直接下载
wget https://dl.discuz.vip/Discuz_X5.0_20260410.zip
# 方法二:从官网下载后上传到服务器
# 访问 https://discuz.vip 下载最新版本
# 使用 rz 或 scp 上传到服务器
1.5 ✅ 前期检查清单
在开始部署前,请确认以下事项:
- 所有服务器已安装 openEuler 24.03 系统
- 所有服务器网络互通(可以互相 ping 通)
- 已准备好 Discuz 安装包
- 已规划好各服务器 IP 地址
- SSH 连接工具已准备(SecureCRT、Xshell 等)
第二章 两种部署方法对比
2.1 🤔 如何选择部署方法?
在开始之前,先了解两种方法的区别,根据实际情况选择。
2.2 📊 方法对比表
| 对比项 | 方法一(4台服务器) | 方法二(5台+NFS) |
|---|---|---|
| 服务器数量 | 4 台 | 5 台 |
| 文件存储 | 各服务器独立存储 | NFS 集中存储 |
| 代码同步 | 需手动 scp 传输 | 自动同步 |
| 扩展性 | 添加节点需手动复制 | 仅需挂载 NFS |
| 单点故障 | 风险低(各服务器独立) | NFS 故障影响 Web 服务 |
| 部署难度 | ⭐⭐ 简单 | ⭐⭐⭐ 中等 |
| 适用场景 | 测试环境、学习练习 | 生产环境、多节点扩展 |
2.3 🎯 选择建议
选择方法一,如果你:
- 刚开始学习分布式部署
- 只是想测试一下 Discuz
- 服务器资源有限(只有 4 台)
- 不需要频繁扩展 Web 服务器
选择方法二,如果你:
- 需要部署生产环境
- 未来可能添加更多 Web 服务器
- 希望统一管理网站文件
- 对代码同步效率有要求
2.4 🔍 核心区别图解
🗺️ 方法一:4台服务器架构拓扑图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 用户访问论坛 │
│ http://192.168.100.192/upload │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 【Nginx 服务器】 │
│ 192.168.100.192 │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 功能:接收用户请求,转发 PHP 请求给 PHP-FPM 服务器 │ │
│ │ 软件:Nginx + php-fpm │ │
│ │ 文件:/usr/share/nginx/html/upload/ (Discuz 程序文件) │ │
│ │ 端口:80 (HTTP) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│ │
│ FastCGI 请求 │ 静态文件
│ (PHP 代码执行) │ (图片/CSS/JS)
▼ │
┌──────────────────────────────┐ │
│ 【PHP-FPM 服务器】 │ │
│ 192.168.100.149 │ │
│ ┌────────────────────────┐ │ │
│ │ 功能:执行 PHP 代码 │ │ │
│ │ 软件:PHP + PHP-FPM │ │ │
│ │ 文件:upload/ 目录 │ │ │
│ │ 端口:9000 │ │ │
│ └────────────────────────┘ │ │
└──────────────────────────────┘ │
│ │ │
│ 查询数据 │ 读写缓存 │
▼ ▼ │
┌──────────────────────┐ ┌──────────────────────┐
│ 【MySQL 服务器】 │ │ 【Redis 服务器】 │
│ 192.168.100.157 │ │ 192.168.100.160 │
│ ┌────────────────┐ │ │ ┌────────────────┐ │
│ │ 功能:存储数据 │ │ │ │ 功能:高速缓存 │ │
│ │ 软件:MySQL │ │ │ │ 软件:Redis │ │
│ │ 数据库:discuz │ │ │ │ 端口:6379 │ │
│ │ 端口:3306 │ │ │ └────────────────┘ │
│ └────────────────┘ │ └──────────────────────┘
└──────────────────────┘
📦 文件同步方式:
┌─────────────────────────────────────────────────────────────────────────────┐
│ PHP-FPM 服务器打包 upload 目录 ──scp传输──▶ Nginx 服务器解压 │
│ │
│ tar zcvf upload.tar.gz upload/ │
│ scp upload.tar.gz 192.168.100.192:/opt │
└─────────────────────────────────────────────────────────────────────────────┘
🗺️ 方法二:5台服务器+NFS架构拓扑图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 用户访问论坛 │
│ http://192.168.100.192/upload │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 【Nginx 服务器】 │
│ 192.168.100.192 │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 功能:接收用户请求,转发 PHP 请求给 PHP-FPM 服务器 │ │
│ │ 软件:Nginx + php-fpm + nfs-utils │ │
│ │ 端口:80 (HTTP) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ NFS 挂载 │
│ ▼ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌────────────────────────────┴────────────────────────────┐
│ │
│ NFS 挂载 │ FastCGI 请求
▼ ▼
┌────────────────────────────────────────┐ ┌──────────────────────────────┐
│ 【NFS 服务器】 │ │ 【PHP-FPM 服务器】 │
│ 192.168.100.190 │ │ 192.168.100.149 │
│ ┌──────────────────────────────────┐ │ │ ┌────────────────────────┐ │
│ │ 功能:集中存储 Discuz 文件 │ │ │ │ 功能:执行 PHP 代码 │ │
│ │ 软件:NFS Server │ │ │ │ 软件:PHP + PHP-FPM │ │
│ │ 共享目录:/data/ │ │ │ │ 端口:9000 │ │
│ │ └── upload/ (Discuz程序) │ │ │ └────────────────────────┘ │
│ │ └── index.php │ │ └──────────────────────────────┘
│ └──────────────────────────────────┘ │ │
└────────────────────────────────────────┘ │
▲ │ │
│ │ │
└────────────────────┘ │
共享同一份文件 │
│
┌────────────────────┴────────────────────┐
│ │
│ 查询数据 │ 读写缓存
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ 【MySQL 服务器】 │ │ 【Redis 服务器】 │
│ 192.168.100.157 │ │ 192.168.100.160 │
│ ┌────────────────┐ │ │ ┌────────────────┐ │
│ │ 功能:存储数据 │ │ │ │ 功能:高速缓存 │ │
│ │ 软件:MySQL │ │ │ │ 软件:Redis │ │
│ │ 数据库:discuz │ │ │ │ 端口:6379 │ │
│ │ 端口:3306 │ │ │ └────────────────┘ │
│ └────────────────┘ │ └──────────────────────┘
└──────────────────────┘
📦 文件共享方式:
┌─────────────────────────────────────────────────────────────────────────────┐
│ NFS 服务器统一管理 Discuz 文件 │
│ │
│ NFS 服务器:/data/upload/ ◀════共享════▶ Nginx:/usr/share/nginx/html/ │
│ NFS 服务器:/data/upload/ ◀════共享════▶ PHP-FPM:/usr/share/nginx/html/ │
│ │
│ ✅ 无需手动传输文件,自动同步! │
│ ✅ 添加新服务器只需挂载 NFS 即可! │
└─────────────────────────────────────────────────────────────────────────────┘
2.5 🔄 数据流向详解
用户访问论坛时的数据流向
1. 用户在浏览器输入 http://192.168.100.192/upload
│
▼
2. 请求到达 Nginx 服务器 (192.168.100.192:80)
│
├──▶ 如果是静态文件(图片/CSS/JS)
│ │
│ └──▶ 直接从 NFS 挂载目录返回文件
│
└──▶ 如果是 PHP 文件
│
▼
3. Nginx 通过 FastCGI 转发请求给 PHP-FPM 服务器 (192.168.100.149:9000)
│
▼
4. PHP-FPM 执行 PHP 代码
│
├──▶ 需要读取数据
│ │
│ └──▶ 连接 MySQL 服务器 (192.168.100.157:3306)
│
└──▶ 需要读写缓存
│
└──▶ 连接 Redis 服务器 (192.168.100.160:6379)
│
▼
5. PHP 处理完成后返回 HTML 给 Nginx
│
▼
6. Nginx 返回 HTML 给用户浏览器
│
▼
7. 用户看到论坛页面
第三章 方法一:4台服务器部署
3.1 📋 部署概述
部署顺序:
- MySQL 服务器 - 数据库是基础
- Redis 服务器 - 缓存服务
- PHP-FPM 服务器 - 应用处理
- Nginx 服务器 - Web 前端
⏱️ 预计耗时: 约 30 分钟
3.2 ① MySQL 服务器部署 (192.168.100.157)
①-① 设置主机名
bash
hostnamectl set-hostname mysql && bash
📖 命令解释:
| 参数 | 含义 |
|---|---|
hostnamectl set-hostname mysql |
将主机名设置为 mysql |
&& |
前一条命令执行成功后执行下一条 |
bash |
重新加载 shell 使主机名生效 |
✅ 预期结果: 命令行提示符变为 [root@mysql ~]#
①-② 安装 MySQL Server
bash
yum install -y mysql-server
📖 命令解释:
| 参数 | 含义 |
|---|---|
yum |
openEuler 的包管理器(类似应用商店) |
install |
安装软件 |
-y |
自动回答 yes,无需手动确认 |
mysql-server |
MySQL 数据库服务器软件包 |
⏱️ 预计耗时: 约 2-5 分钟(取决于网络速度)
✅ 预期结果: 看到 "Complete!" 表示安装成功
①-③ 启动 MySQL 服务
bash
systemctl start mysqld
📖 命令解释:
| 参数 | 含义 |
|---|---|
systemctl |
系统服务管理命令 |
start |
启动服务 |
mysqld |
MySQL 服务名称 |
💡 小白提示 :mysqld 最后的 d 表示 daemon(守护进程),是服务的命名习惯。
✅ 验证服务状态:
bash
systemctl status mysqld
看到 active (running) 表示服务正在运行。
①-④ 创建 Discuz 数据库用户
bash
mysql
进入 MySQL 命令行后,执行以下 SQL 语句:
sql
-- 创建 discuz 用户,允许从 192.168.100.* 网段访问
create user discuz@'192.168.100.%' identified by '123.com';
-- 授予 discuz 数据库的所有权限
grant all on discuz.* to discuz@'192.168.100.%';
-- 刷新权限使配置生效
flush privileges;
-- 退出 MySQL
exit
📖 SQL 语句解释:
| 语句 | 含义 |
|---|---|
create user |
创建新用户 |
discuz@'192.168.100.%' |
用户名@允许访问的IP范围(%表示任意) |
identified by '123.com' |
设置密码为 123.com |
grant all |
授予所有权限 |
on discuz.* |
针对 discuz 数据库的所有表 |
flush privileges |
刷新权限,使修改立即生效 |
🏠 生活类比:
- 创建用户 = 给新员工办入职
- 设置密码 = 给员工发门禁卡
- 授权 = 告诉员工可以进入哪些房间
- flush privileges = 生效门禁系统
①-⑤ 验证数据库连接
bash
mysql -h 192.168.100.157 -u discuz -p
输入密码:123.com
📖 参数解释:
| 参数 | 含义 |
|---|---|
-h 192.168.100.157 |
指定连接的主机地址 |
-u discuz |
指定用户名 |
-p |
提示输入密码 |
✅ 预期结果: 成功进入 MySQL 命令行,看到 mysql> 提示符
3.3 ② Redis 服务器部署 (192.168.100.160)
②-① 设置主机名并安装 Redis
bash
hostnamectl set-hostname redis && bash
yum install -y redis
②-② 修改 Redis 配置文件
bash
vim /etc/redis.conf
📖 Vim 操作指南:
| 操作 | 按键 | 说明 |
|---|---|---|
| 进入编辑模式 | i |
可以修改内容 |
| 搜索内容 | /bind 然后回车 |
搜索 bind 关键字 |
| 退出编辑模式 | Esc |
返回命令模式 |
| 保存并退出 | :wq 然后回车 |
Write + Quit |
需要修改的内容:
找到这一行(约第 50 行):
conf
bind 127.0.0.1 -::1
修改为:
conf
# bind 127.0.0.1 -::1
bind 192.168.100.160
找到这一行(约第 87 行):
conf
protected-mode yes
修改为:
conf
protected-mode no
📖 配置解释:
| 配置项 | 原值 | 新值 | 原因 |
|---|---|---|---|
bind |
127.0.0.1 | 192.168.100.160 | 绑定本机 IP,允许其他服务器连接 |
protected-mode |
yes | no | 关闭保护模式,允许远程连接 |
⚠️ 注意事项:
protected-mode no仅适用于测试环境- 生产环境应设置密码并保持保护模式开启
②-③ 启动 Redis 服务
bash
systemctl start redis
②-④ 验证 Redis 连接
bash
redis-cli -h 192.168.100.160 ping
✅ 预期结果:
PONG
🏠 生活类比: 就像打电话问"在吗?",对方回"在!",说明通信正常。
3.4 ③ PHP-FPM 服务器部署 (192.168.100.149)
③-① 设置主机名并安装 PHP 核心
bash
hostnamectl set-hostname php && bash
# 安装 PHP 核心组件
yum install -y php php-mysqlnd php-fpm php-xml
📖 软件包说明:
| 软件包 | 作用 |
|---|---|
php |
PHP 语言核心 |
php-mysqlnd |
PHP 连接 MySQL 的驱动 |
php-fpm |
PHP FastCGI 进程管理器 |
php-xml |
PHP XML 处理扩展 |
③-② 安装 PHP Redis 扩展
bash
# 安装编译工具和依赖
yum install -y php-devel php-pear gcc make
# 安装 Redis 扩展
pecl install redis
# 安装过程中一路按回车即可
# 启用 Redis 扩展
echo "extension=redis.so" >> /etc/php.ini
📖 命令解释:
| 命令/参数 | 含义 |
|---|---|
php-devel |
PHP 开发包,编译扩展需要 |
php-pear |
PHP 扩展仓库管理工具 |
gcc make |
编译工具 |
pecl install redis |
从 PECL 仓库安装 Redis 扩展 |
>> /etc/php.ini |
追加写入到 PHP 配置文件 |
💡 小白提示 :pecl install redis 过程中会问几个问题,直接按回车使用默认值即可。
③-③ 安装其他工具并创建目录
bash
yum install -y lrzsz redis mysql
mkdir /usr/share/nginx/html -p
cd /usr/share/nginx/html/
📖 工具说明:
| 工具 | 作用 |
|---|---|
lrzsz |
支持 rz/sz 命令上传下载文件 |
redis |
Redis 客户端工具 |
mysql |
MySQL 客户端工具 |
③-④ 上传并解压 Discuz 安装包
bash
# 使用 rz 上传文件(在 SecureCRT/Xshell 中)
rz
# 解压安装包
unzip Discuz_X5.0_20260410.zip
# 设置 upload 目录权限
chown apache:apache upload -R
📖 命令解释:
| 命令 | 含义 |
|---|---|
rz |
接收文件(Receive ZModem),在终端上传文件 |
unzip |
解压 zip 文件 |
chown apache:apache |
设置文件所有者为 apache 用户和组 |
-R |
递归处理,包括子目录和文件 |
💡 小白提示:Discuz 的 upload 目录需要 web 服务器用户(apache)有写入权限。
③-⑤ 修改 PHP-FPM 配置文件
bash
vim /etc/php-fpm.d/www.conf
需要修改的内容:
找到(约第 24 行):
conf
listen = /run/php-fpm/www.sock
修改为:
conf
;listen = /run/php-fpm/www.sock
listen = 192.168.100.149:9000
找到(约第 48 行):
conf
listen.allowed_clients = 127.0.0.1
注释掉:
conf
;listen.allowed_clients = 127.0.0.1
📖 配置解释:
| 配置项 | 原值 | 新值 | 原因 |
|---|---|---|---|
listen |
Unix socket | IP:端口 | 允许远程服务器连接 |
listen.allowed_clients |
127.0.0.1 | 注释掉 | 允许任何客户端连接 |
🏠 生活类比:
- 原来:只接听固定号码的电话(Unix socket)
- 现在:公开办公室电话号码,任何人都可拨打(IP:端口)
③-⑥ 启动 PHP-FPM 服务
bash
systemctl start php-fpm
③-⑦ 验证 PHP-FPM 监听状态
bash
netstat -tlnp | grep 9000
✅ 预期结果:
tcp 0 0 192.168.100.149:9000 0.0.0.0:* LISTEN 进程号/php-fpm
📖 输出解释:
192.168.100.149:9000- 正在监听的地址和端口LISTEN- 等待连接状态
③-⑧ 创建测试页面
bash
vim /usr/share/nginx/html/index.php
输入以下内容:
php
<?php
phpinfo();
?>
💡 小白提示:这个页面会显示 PHP 的配置信息,方便确认 PHP 是否正常工作。
③-⑨ 验证连接 MySQL 和 Redis
bash
# 测试 Redis 连接
redis-cli -h 192.168.100.160 keys *
exit
# 测试 MySQL 连接
mysql -h 192.168.100.157 -u discuz -p
# 输入密码:123.com
exit
✅ 预期结果:
- Redis 连接成功,无报错
- MySQL 连接成功,看到
mysql>提示符
③-⑩ 打包并传输 upload 目录到 Nginx 服务器
bash
cd /usr/share/nginx/html
# 打包 upload 目录
tar zcvf upload.tar.gz upload/
# 传输到 Nginx 服务器
scp upload.tar.gz 192.168.100.192:/opt
📖 命令解释:
| 参数 | 含义 |
|---|---|
tar |
打包工具 |
z |
使用 gzip 压缩 |
c |
创建新归档 |
v |
显示过程 |
f |
指定文件名 |
scp |
安全复制命令(通过 SSH) |
传输时需要输入:
yes- 确认连接新主机- 密码:
q1w2e3@123!!!!!(Nginx 服务器 root 密码)
💡 小白提示:因为 Nginx 和 PHP-FPM 在不同服务器上,需要把 Discuz 文件传过去。
3.5 ④ Nginx 服务器部署 (192.168.100.192)
④-① 设置主机名并安装软件
bash
hostnamectl set-hostname nginx && bash
yum install -y nginx php-fpm lrzsz
💡 小白提示:Nginx 服务器也安装 php-fpm,主要是为了依赖关系,实际 PHP 处理由 PHP-FPM 服务器完成。
④-② 配置 Nginx FastCGI 代理
bash
# 删除默认的 PHP-FPM 配置
cd /etc/nginx/conf.d
rm -rf php-fpm.conf
# 编辑 PHP 处理配置
vim /etc/nginx/default.d/php.conf
找到 fastcgi_pass 这一行,修改为:
conf
fastcgi_pass 192.168.100.149:9000;
📖 配置解释:
| 配置项 | 原值 | 新值 | 原因 |
|---|---|---|---|
fastcgi_pass |
127.0.0.1:9000 或 unix socket | 192.168.100.149:9000 | 指向远程 PHP-FPM 服务器 |
🏠 生活类比:
- 原来:在自己办公室处理 PHP 请求
- 现在:把 PHP 请求转交给专业团队(PHP-FPM 服务器)处理
④-③ 启动 Nginx 服务
bash
systemctl start nginx
④-④ 清空 Web 根目录
bash
cd /usr/share/nginx/html/
rm -rf ./*
⚠️ 注意 :rm -rf ./* 会删除目录下所有内容,请确认在正确目录。
④-⑤ 上传并解压 Discuz 安装包
bash
rz # 上传 Discuz_X5.0_20260410.zip
unzip Discuz_X5.0_20260410.zip
④-⑥ 浏览器安装 Discuz
访问地址:
http://192.168.100.192/upload/install
安装向导配置:
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 数据库服务器 | 192.168.100.157 | MySQL 服务器 IP |
| 数据库名 | discuz | 数据库名称 |
| 数据库用户 | discuz | 数据库用户名 |
| 数据库密码 | 123.com | 数据库密码 |
| 管理员用户 | 自行设置 | 论坛管理员账号 |
| 管理员密码 | 自行设置 | 论坛管理员密码 |
⚠️ 重要提示: 数据库地址、用户名、密码必须与 MySQL 服务器上创建的一致!
④-⑦ 替换为完整 upload 目录
安装完成后,需要用从 PHP-FPM 服务器传输过来的完整目录:
bash
# 删除安装时的 upload 目录
rm -rf upload/
# 解压从 PHP-FPM 服务器传来的压缩包
cd /opt
tar xf upload.tar.gz -C /usr/share/nginx/html/
# 设置权限
cd /usr/share/nginx/html
chown apache:apache upload -R
💡 小白提示:安装过程中生成的配置文件需要同步到 PHP-FPM 服务器,所以要用那边打包传来的版本。
④-⑧ 访问论坛
浏览器访问:
http://192.168.100.192/upload
✅ 预期结果: 看到 Discuz 论坛首页,可以正常浏览。
第四章 方法二:5台服务器+NFS部署
4.1 📋 部署概述
与方法一的区别:
- 新增 NFS 服务器统一管理 Discuz 文件
- Nginx 和 PHP-FPM 通过 NFS 挂载共享同一份代码
- 无需手动 scp 传输文件
部署顺序:
- MySQL 服务器 - 与方法一相同
- Redis 服务器 - 与方法一相同
- NFS 服务器 - 共享存储
- PHP-FPM 服务器 - 挂载 NFS
- Nginx 服务器 - 挂载 NFS
4.2 ① MySQL 服务器部署
与方法一完全相同,请参考第三章 3.2 节。
4.3 ② Redis 服务器部署
与方法一完全相同,请参考第三章 3.3 节。
4.4 ③ NFS 服务器部署 (192.168.100.190)
③-① 设置主机名并安装 NFS
bash
hostnamectl set-hostname nfs && bash
yum install -y nfs-utils lrzsz
③-② 配置 NFS 共享目录
bash
vim /etc/exports
写入以下内容:
conf
/data/ 192.168.100.0/24(rw,sync,no_root_squash)
📖 配置解释:
| 参数 | 含义 |
|---|---|
/data/ |
要共享的目录 |
192.168.100.0/24 |
允许访问的网段(192.168.100.x) |
rw |
读写权限 |
sync |
同步写入磁盘 |
no_root_squash |
root 用户保持权限,不降级 |
🏠 生活类比:
- NFS 就像一个共享网盘
- 配置 exports 就像设置"哪些人可以访问这个网盘"
③-③ 创建共享目录并应用配置
bash
mkdir /data
exportfs -arv
✅ 预期结果:
exporting 192.168.100.0/24:/data
📖 命令解释:
| 参数 | 含义 |
|---|---|
exportfs |
NFS 共享管理命令 |
-a |
导出所有目录 |
-r |
重新导出 |
-v |
显示详细信息 |
③-④ 上传 Discuz 安装包到共享目录
bash
rz # 上传 Discuz_X5.0_20260410.zip
mv Discuz_X5.0_20260410.zip /data/
cd /data/
unzip Discuz_X5.0_20260410.zip
chown apache:apache upload -R
💡 小白提示:上传后,Nginx 和 PHP-FPM 挂载 NFS 就能直接看到这些文件。
4.5 ④ PHP-FPM 服务器部署 (192.168.100.149)
④-① 安装软件(与方法一相同)
bash
hostnamectl set-hostname php && bash
yum install -y php php-mysqlnd php-fpm php-xml
yum install -y php-devel php-pear gcc make
pecl install redis # 一路回车
echo "extension=redis.so" >> /etc/php.ini
yum install -y lrzsz redis mysql nfs-utils # 注意多了 nfs-utils
④-② 创建目录并挂载 NFS
bash
mkdir /usr/share/nginx/html -p
mount 192.168.100.190:/data /usr/share/nginx/html/
📖 命令解释:
| 参数 | 含义 |
|---|---|
mount |
挂载命令 |
192.168.100.190:/data |
NFS 服务器地址:共享目录 |
/usr/share/nginx/html/ |
本地挂载点 |
💡 小白提示 :挂载后,本地的 /usr/share/nginx/html/ 目录内容就是 NFS 服务器 /data/ 目录的内容。
✅ 验证挂载:
bash
df -h | grep nfs
ls /usr/share/nginx/html/
④-③ 配置 PHP-FPM(与方法一相同)
bash
vim /etc/php-fpm.d/www.conf
修改:
conf
;listen = /run/php-fpm/www.sock
listen = 192.168.100.149:9000
;listen.allowed_clients = 127.0.0.1
④-④ 启动 PHP-FPM 并验证
bash
systemctl start php-fpm
# 验证 MySQL 和 Redis 连接
redis-cli -h 192.168.100.160 keys *
exit
mysql -h 192.168.100.157 -u discuz -p
exit
4.6 ⑤ Nginx 服务器部署 (192.168.100.192)
⑤-① 安装软件
bash
hostnamectl set-hostname nginx && bash
yum install -y nginx php-fpm lrzsz nfs-utils # 注意 nfs-utils
⑤-② 挂载 NFS
bash
mkdir /usr/share/nginx/html -p
mount 192.168.100.190:/data /usr/share/nginx/html/
💡 小白提示:Nginx 和 PHP-FPM 挂载同一个 NFS 目录,共享同一份 Discuz 文件,无需手动传输!
⑤-③ 配置 Nginx(与方法一相同)
bash
cd /etc/nginx/conf.d
rm -rf php-fpm.conf
vim /etc/nginx/default.d/php.conf
修改:
conf
fastcgi_pass 192.168.100.149:9000;
⑤-④ 启动 Nginx
bash
systemctl start nginx
⑤-⑤ 浏览器安装 Discuz
访问地址:
http://192.168.100.192/upload/install
填写配置:
- 数据库服务器:
192.168.100.157 - 数据库名:
discuz - 数据库用户:
discuz - 数据库密码:
123.com
💡 小白提示:安装完成后直接访问即可,无需像方法一那样替换 upload 目录,因为 NFS 已自动同步!
4.7 ⑥ 如之前已安装过(可选清理)
如果之前使用方法一安装过,需要清理数据库:
bash
mysql
执行:
sql
drop database discuz;
exit
第五章 验证与测试
5.1 各服务器验证命令汇总
| 服务器 | 验证命令 | 预期结果 |
|---|---|---|
| MySQL | systemctl status mysqld |
active (running) |
| Redis | redis-cli -h 192.168.100.160 ping |
PONG |
| NFS | showmount -e localhost |
/data 192.168.100.0/24 |
| PHP-FPM | `netstat -tlnp | grep 9000` |
| Nginx | systemctl status nginx |
active (running) |
5.2 论坛功能测试
-
访问首页 :
http://192.168.100.192/upload -
登录管理员账号
-
测试发帖、回帖功能
-
验证 Redis 缓存 :
bashredis-cli -h 192.168.100.160 keys *应该看到缓存数据
第六章 常见问题排查
问题 1:无法连接 PHP-FPM (9000 端口)
症状: 浏览器访问 PHP 页面报错
排查步骤:
bash
# 在 PHP-FPM 服务器检查
systemctl status php-fpm
netstat -tlnp | grep 9000
# 检查配置
grep "^listen" /etc/php-fpm.d/www.conf
解决方法:
- 确保
listen = 192.168.100.149:9000 - 确保
listen.allowed_clients已注释 - 重启服务:
systemctl restart php-fpm
问题 2:数据库连接失败
症状: Discuz 安装时提示数据库连接失败
排查步骤:
bash
# 在 MySQL 服务器检查用户权限
mysql -e "show grants for discuz@'192.168.100.%';"
# 测试远程连接
mysql -h 192.168.100.157 -u discuz -p
解决方法:
sql
-- 重新授权
grant all on discuz.* to discuz@'192.168.100.%';
flush privileges;
问题 3:Redis 连接失败
症状: 缓存不生效或报错
排查步骤:
bash
# 检查 Redis 配置
grep "^bind" /etc/redis.conf
grep "protected-mode" /etc/redis.conf
# 测试连接
redis-cli -h 192.168.100.160 ping
解决方法:
- 确保
bind 192.168.100.160 - 确保
protected-mode no - 重启服务:
systemctl restart redis
问题 4:NFS 挂载失败
症状: 挂载时报错或看不到文件
排查步骤:
bash
# 在 NFS 服务器检查
exportfs -v
showmount -e localhost
# 在客户端检查
showmount -e 192.168.100.190
解决方法:
- 确保 NFS 服务防火墙已开放
- 确保
/etc/exports配置正确 - 重新导出:
exportfs -arv
附录
附录 A:关键信息汇总
| 项目 | 值 |
|---|---|
| MySQL 服务器 IP | 192.168.100.157 |
| Redis 服务器 IP | 192.168.100.160 |
| NFS 服务器 IP | 192.168.100.190(方法二) |
| PHP-FPM 服务器 IP | 192.168.100.149 |
| Nginx 服务器 IP | 192.168.100.192 |
| 数据库名 | discuz |
| 数据库用户 | discuz |
| 数据库密码 | 123.com |
| PHP-FPM 端口 | 9000 |
| NFS 共享目录 | /data(方法二) |
附录 B:端口说明
| 端口 | 服务 | 说明 |
|---|---|---|
| 80 | Nginx | HTTP 网页访问 |
| 9000 | PHP-FPM | FastCGI 通信 |
| 3306 | MySQL | 数据库连接 |
| 6379 | Redis | 缓存服务 |
| 2049 | NFS | 文件共享 |
| 111 | RPC | NFS 依赖服务 |
附录 C:常用命令速查
服务管理:
bash
systemctl start 服务名 # 启动
systemctl stop 服务名 # 停止
systemctl restart 服务名 # 重启
systemctl status 服务名 # 查看状态
systemctl enable 服务名 # 开机自启
日志查看:
bash
journalctl -u 服务名 -f # 实时查看日志
网络测试:
bash
netstat -tlnp # 查看监听端口
ss -tlnp # 同上(推荐)
telnet IP 端口 # 测试端口连通性
NFS 相关:
bash
showmount -e 服务器IP # 查看共享目录
mount -t nfs 服务器:/路径 /本地路径 # 挂载 NFS
umount /本地路径 # 卸载 NFS
附录 D:部署检查清单
方法一(4台服务器):
- MySQL:服务启动,用户创建完成
- Redis:服务启动,可远程连接
- PHP-FPM:服务启动,监听 9000 端口
- PHP-FPM:upload 目录已传输到 Nginx
- Nginx:服务启动,FastCGI 配置正确
- Discuz:安装完成,可正常访问
方法二(5台服务器):
- MySQL:服务启动,用户创建完成
- Redis:服务启动,可远程连接
- NFS:共享目录配置完成,Discuz 文件已上传
- PHP-FPM:已挂载 NFS,服务启动
- Nginx:已挂载 NFS,服务启动
- Discuz:安装完成,可正常访问
附录 E:设置开机自启和自动挂载
方法一(4台服务器):
bash
# 各服务器设置服务开机自启
systemctl enable mysqld # MySQL 服务器
systemctl enable redis # Redis 服务器
systemctl enable php-fpm # PHP-FPM 服务器
systemctl enable nginx # Nginx 服务器
方法二(5台服务器):
bash
# 服务开机自启
systemctl enable mysqld redis nfs-server php-fpm nginx
# PHP-FPM 和 Nginx 服务器设置 NFS 开机自动挂载
echo "192.168.100.190:/data /usr/share/nginx/html nfs defaults 0 0" >> /etc/fstab
# 验证 fstab 配置
mount -a
附录 F:一键部署脚本
📖 脚本使用说明
⚠️ 使用前请注意:
- 脚本需要在各服务器上分别执行
- 请根据实际 IP 地址修改脚本中的变量
- 确保服务器之间网络互通
- Discuz 安装包需要提前准备好
🚀 脚本特点:
- 带颜色输出,进度清晰
- 自动检测错误并提示
- 自动设置开机自启
- 部署完成后自动验证
F.1 方法一:MySQL 服务器一键部署脚本
文件名: deploy_mysql.sh
bash
#!/bin/bash
#======================================
# MySQL 服务器一键部署脚本
# 适用于方法一(4台服务器)
#======================================
set -e # 遇到错误立即停止
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置变量(请根据实际情况修改)
MYSQL_IP="192.168.100.157"
DB_NAME="discuz"
DB_USER="discuz"
DB_PASS="123.com"
ALLOW_NETWORK="192.168.100.%"
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} MySQL 服务器一键部署脚本${NC}"
echo -e "${GREEN}======================================${NC}"
# 1. 设置主机名
echo -e "${YELLOW}[1/5] 设置主机名为 mysql...${NC}"
hostnamectl set-hostname mysql
# 2. 安装 MySQL
echo -e "${YELLOW}[2/5] 安装 MySQL Server...${NC}"
yum install -y mysql-server
# 3. 启动 MySQL 服务
echo -e "${YELLOW}[3/5] 启动 MySQL 服务...${NC}"
systemctl start mysqld
systemctl enable mysqld
# 4. 创建数据库用户
echo -e "${YELLOW}[4/5] 创建 Discuz 数据库用户...${NC}"
mysql <<EOF
CREATE USER '${DB_USER}'@'${ALLOW_NETWORK}' IDENTIFIED BY '${DB_PASS}';
GRANT ALL ON ${DB_NAME}.* TO '${DB_USER}'@'${ALLOW_NETWORK}';
FLUSH PRIVILEGES;
EOF
# 5. 验证
echo -e "${YELLOW}[5/5] 验证部署结果...${NC}"
if systemctl is-active --quiet mysqld; then
echo -e "${GREEN}✅ MySQL 服务运行正常${NC}"
else
echo -e "${RED}❌ MySQL 服务启动失败${NC}"
exit 1
fi
echo ""
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} MySQL 服务器部署完成!${NC}"
echo -e "${GREEN}======================================${NC}"
echo -e "数据库地址: ${MYSQL_IP}"
echo -e "数据库名: ${DB_NAME}"
echo -e "数据库用户: ${DB_USER}"
echo -e "数据库密码: ${DB_PASS}"
echo ""
echo -e "${YELLOW}验证命令: mysql -h ${MYSQL_IP} -u ${DB_USER} -p${NC}"
F.2 方法一:Redis 服务器一键部署脚本
文件名: deploy_redis.sh
bash
#!/bin/bash
#======================================
# Redis 服务器一键部署脚本
# 适用于方法一(4台服务器)
#======================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置变量
REDIS_IP="192.168.100.160"
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} Redis 服务器一键部署脚本${NC}"
echo -e "${GREEN}======================================${NC}"
# 1. 设置主机名
echo -e "${YELLOW}[1/4] 设置主机名为 redis...${NC}"
hostnamectl set-hostname redis
# 2. 安装 Redis
echo -e "${YELLOW}[2/4] 安装 Redis...${NC}"
yum install -y redis
# 3. 修改配置文件
echo -e "${YELLOW}[3/4] 配置 Redis 允许远程连接...${NC}"
# 备份配置文件
cp /etc/redis.conf /etc/redis.conf.bak
# 修改 bind 地址
sed -i "s/^bind 127.0.0.1 -::1/bind ${REDIS_IP}/" /etc/redis.conf
# 关闭保护模式
sed -i "s/^protected-mode yes/protected-mode no/" /etc/redis.conf
# 4. 启动服务
echo -e "${YELLOW}[4/4] 启动 Redis 服务...${NC}"
systemctl start redis
systemctl enable redis
# 验证
echo -e "${YELLOW}验证 Redis 连接...${NC}"
if redis-cli -h ${REDIS_IP} ping | grep -q "PONG"; then
echo -e "${GREEN}✅ Redis 服务运行正常${NC}"
else
echo -e "${RED}❌ Redis 服务异常${NC}"
exit 1
fi
echo ""
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} Redis 服务器部署完成!${NC}"
echo -e "${GREEN}======================================${NC}"
echo -e "Redis 地址: ${REDIS_IP}:6379"
echo ""
echo -e "${YELLOW}验证命令: redis-cli -h ${REDIS_IP} ping${NC}"
F.3 方法一:PHP-FPM 服务器一键部署脚本
文件名: deploy_php.sh
bash
#!/bin/bash
#======================================
# PHP-FPM 服务器一键部署脚本
# 适用于方法一(4台服务器)
#======================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置变量
PHP_IP="192.168.100.149"
MYSQL_IP="192.168.100.157"
REDIS_IP="192.168.100.160"
NGINX_IP="192.168.100.192"
DB_USER="discuz"
DB_PASS="123.com"
NGINX_PASS="q1w2e3@123!!!!!"
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} PHP-FPM 服务器一键部署脚本${NC}"
echo -e "${GREEN}======================================${NC}"
# 1. 设置主机名
echo -e "${YELLOW}[1/8] 设置主机名为 php...${NC}"
hostnamectl set-hostname php
# 2. 安装 PHP 核心组件
echo -e "${YELLOW}[2/8] 安装 PHP 核心组件...${NC}"
yum install -y php php-mysqlnd php-fpm php-xml
# 3. 安装 PHP Redis 扩展
echo -e "${YELLOW}[3/8] 安装 PHP Redis 扩展...${NC}"
yum install -y php-devel php-pear gcc make
yes "" | pecl install redis
echo "extension=redis.so" >> /etc/php.ini
# 4. 安装其他工具
echo -e "${YELLOW}[4/8] 安装其他工具...${NC}"
yum install -y lrzsz redis mysql
# 5. 创建 Web 目录
echo -e "${YELLOW}[5/8] 创建 Web 目录...${NC}"
mkdir -p /usr/share/nginx/html
# 6. 配置 PHP-FPM
echo -e "${YELLOW}[6/8] 配置 PHP-FPM 监听远程端口...${NC}"
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.bak
sed -i "s|^listen = /run/php-fpm/www.sock|;listen = /run/php-fpm/www.sock\nlisten = ${PHP_IP}:9000|" /etc/php-fpm.d/www.conf
sed -i "s|^listen.allowed_clients = 127.0.0.1|;listen.allowed_clients = 127.0.0.1|" /etc/php-fpm.d/www.conf
# 7. 启动 PHP-FPM
echo -e "${YELLOW}[7/8] 启动 PHP-FPM 服务...${NC}"
systemctl start php-fpm
systemctl enable php-fpm
# 8. 验证连接
echo -e "${YELLOW}[8/8] 验证 MySQL 和 Redis 连接...${NC}"
echo -e "测试 MySQL 连接..."
if mysql -h ${MYSQL_IP} -u ${DB_USER} -p${DB_PASS} -e "exit" 2>/dev/null; then
echo -e "${GREEN}✅ MySQL 连接成功${NC}"
else
echo -e "${RED}⚠️ MySQL 连接失败,请检查配置${NC}"
fi
echo -e "测试 Redis 连接..."
if redis-cli -h ${REDIS_IP} ping | grep -q "PONG"; then
echo -e "${GREEN}✅ Redis 连接成功${NC}"
else
echo -e "${RED}⚠️ Redis 连接失败,请检查配置${NC}"
fi
echo ""
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} PHP-FPM 服务器部署完成!${NC}"
echo -e "${GREEN}======================================${NC}"
echo -e "PHP-FPM 监听: ${PHP_IP}:9000"
echo ""
echo -e "${YELLOW}⚠️ 请手动上传 Discuz 安装包到 /usr/share/nginx/html/${NC}"
echo -e "${YELLOW}⚠️ 解压后执行以下命令传输到 Nginx 服务器:${NC}"
echo -e " cd /usr/share/nginx/html"
echo -e " chown apache:apache upload -R"
echo -e " tar zcvf upload.tar.gz upload/"
echo -e " scp upload.tar.gz ${NGINX_IP}:/opt"
F.4 方法一:Nginx 服务器一键部署脚本
文件名: deploy_nginx.sh
bash
#!/bin/bash
#======================================
# Nginx 服务器一键部署脚本
# 适用于方法一(4台服务器)
#======================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置变量
NGINX_IP="192.168.100.192"
PHP_IP="192.168.100.149"
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} Nginx 服务器一键部署脚本${NC}"
echo -e "${GREEN}======================================${NC}"
# 1. 设置主机名
echo -e "${YELLOW}[1/5] 设置主机名为 nginx...${NC}"
hostnamectl set-hostname nginx
# 2. 安装软件
echo -e "${YELLOW}[2/5] 安装 Nginx 和相关软件...${NC}"
yum install -y nginx php-fpm lrzsz
# 3. 配置 Nginx
echo -e "${YELLOW}[3/5] 配置 Nginx FastCGI 代理...${NC}"
rm -f /etc/nginx/conf.d/php-fpm.conf
# 修改 fastcgi_pass 指向 PHP-FPM 服务器
sed -i "s|fastcgi_pass.*|fastcgi_pass ${PHP_IP}:9000;|" /etc/nginx/default.d/php.conf 2>/dev/null || \
echo -e "${YELLOW}⚠️ 请手动检查 /etc/nginx/default.d/php.conf 配置${NC}"
# 4. 启动服务
echo -e "${YELLOW}[4/5] 启动 Nginx 服务...${NC}"
systemctl start nginx
systemctl enable nginx
# 5. 创建 Web 目录
echo -e "${YELLOW}[5/5] 创建 Web 目录...${NC}"
mkdir -p /usr/share/nginx/html
# 验证
if systemctl is-active --quiet nginx; then
echo -e "${GREEN}✅ Nginx 服务运行正常${NC}"
else
echo -e "${RED}❌ Nginx 服务启动失败${NC}"
exit 1
fi
echo ""
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} Nginx 服务器部署完成!${NC}"
echo -e "${GREEN}======================================${NC}"
echo -e "访问地址: http://${NGINX_IP}/upload"
echo ""
echo -e "${YELLOW}⚠️ 后续步骤:${NC}"
echo -e "1. 上传 Discuz 安装包到 /usr/share/nginx/html/ 并解压"
echo -e "2. 或从 PHP-FPM 服务器接收 upload.tar.gz:"
echo -e " cd /opt && tar xf upload.tar.gz -C /usr/share/nginx/html/"
echo -e "3. 浏览器访问 http://${NGINX_IP}/upload/install 进行安装"
F.5 方法二:NFS 服务器一键部署脚本
文件名: deploy_nfs.sh
bash
#!/bin/bash
#======================================
# NFS 服务器一键部署脚本
# 适用于方法二(5台服务器)
#======================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置变量
NFS_IP="192.168.100.190"
SHARE_DIR="/data"
ALLOW_NETWORK="192.168.100.0/24"
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} NFS 服务器一键部署脚本${NC}"
echo -e "${GREEN}======================================${NC}"
# 1. 设置主机名
echo -e "${YELLOW}[1/5] 设置主机名为 nfs...${NC}"
hostnamectl set-hostname nfs
# 2. 安装 NFS
echo -e "${YELLOW}[2/5] 安装 NFS 服务...${NC}"
yum install -y nfs-utils lrzsz
# 3. 配置共享目录
echo -e "${YELLOW}[3/5] 配置 NFS 共享目录...${NC}"
mkdir -p ${SHARE_DIR}
echo "${SHARE_DIR}/ ${ALLOW_NETWORK}(rw,sync,no_root_squash)" > /etc/exports
# 4. 启动服务
echo -e "${YELLOW}[4/5] 启动 NFS 服务...${NC}"
systemctl start nfs-server
systemctl enable nfs-server
exportfs -arv
# 5. 验证
echo -e "${YELLOW}[5/5] 验证 NFS 配置...${NC}"
if showmount -e localhost | grep -q "${SHARE_DIR}"; then
echo -e "${GREEN}✅ NFS 共享配置成功${NC}"
else
echo -e "${RED}❌ NFS 共享配置失败${NC}"
exit 1
fi
echo ""
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} NFS 服务器部署完成!${NC}"
echo -e "${GREEN}======================================${NC}"
echo -e "共享目录: ${SHARE_DIR}"
echo -e "允许网段: ${ALLOW_NETWORK}"
echo ""
echo -e "${YELLOW}⚠️ 后续步骤:${NC}"
echo -e "1. 上传 Discuz 安装包到 ${SHARE_DIR}/"
echo -e " rz # 上传 Discuz_X5.0_20260410.zip"
echo -e " unzip Discuz_X5.0_20260410.zip"
echo -e " chown apache:apache upload -R"
echo ""
echo -e "${YELLOW}客户端挂载命令:${NC}"
echo -e " mount ${NFS_IP}:${SHARE_DIR} /usr/share/nginx/html/"
F.6 方法二:PHP-FPM+Nginx 挂载 NFS 一键配置脚本
文件名: mount_nfs.sh
bash
#!/bin/bash
#======================================
# PHP-FPM/Nginx 服务器挂载 NFS 脚本
# 适用于方法二(5台服务器)
# 需要在 PHP-FPM 和 Nginx 服务器上分别执行
#======================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置变量
NFS_SERVER="192.168.100.190"
NFS_DIR="/data"
LOCAL_DIR="/usr/share/nginx/html"
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} NFS 客户端挂载脚本${NC}"
echo -e "${GREEN}======================================${NC}"
# 1. 安装 NFS 客户端
echo -e "${YELLOW}[1/3] 安装 NFS 客户端工具...${NC}"
yum install -y nfs-utils
# 2. 创建挂载点
echo -e "${YELLOW}[2/3] 创建挂载目录...${NC}"
mkdir -p ${LOCAL_DIR}
# 3. 挂载 NFS
echo -e "${YELLOW}[3/3] 挂载 NFS 共享目录...${NC}"
mount ${NFS_SERVER}:${NFS_DIR} ${LOCAL_DIR}
# 验证
if df -h | grep -q "${NFS_SERVER}:${NFS_DIR}"; then
echo -e "${GREEN}✅ NFS 挂载成功${NC}"
echo ""
df -h | grep "${NFS_SERVER}"
else
echo -e "${RED}❌ NFS 挂载失败${NC}"
exit 1
fi
# 设置开机自动挂载
echo ""
echo -e "${YELLOW}是否设置开机自动挂载?(y/n)${NC}"
read -r answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
echo "${NFS_SERVER}:${NFS_DIR} ${LOCAL_DIR} nfs defaults 0 0" >> /etc/fstab
echo -e "${GREEN}✅ 已添加到 /etc/fstab${NC}"
fi
echo ""
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} NFS 挂载完成!${NC}"
echo -e "${GREEN}======================================${NC}"
echo -e "挂载点: ${LOCAL_DIR}"
echo -e "查看文件: ls ${LOCAL_DIR}/"
F.7 脚本使用方法
方法一(4台服务器)部署顺序:
bash
# 1. 在 MySQL 服务器 (192.168.100.157) 执行
chmod +x deploy_mysql.sh
./deploy_mysql.sh
# 2. 在 Redis 服务器 (192.168.100.160) 执行
chmod +x deploy_redis.sh
./deploy_redis.sh
# 3. 在 PHP-FPM 服务器 (192.168.100.149) 执行
chmod +x deploy_php.sh
./deploy_php.sh
# 然后手动上传 Discuz 安装包
# 4. 在 Nginx 服务器 (192.168.100.192) 执行
chmod +x deploy_nginx.sh
./deploy_nginx.sh
方法二(5台服务器)部署顺序:
bash
# 1. 在 MySQL 服务器执行 deploy_mysql.sh
# 2. 在 Redis 服务器执行 deploy_redis.sh
# 3. 在 NFS 服务器执行
chmod +x deploy_nfs.sh
./deploy_nfs.sh
# 然后上传 Discuz 安装包到 /data/
# 4. 在 PHP-FPM 服务器执行
chmod +x deploy_php.sh
./deploy_php.sh # 注意:需要修改此脚本去掉上传步骤
chmod +x mount_nfs.sh
./mount_nfs.sh
# 5. 在 Nginx 服务器执行
chmod +x deploy_nginx.sh
./deploy_nginx.sh
chmod +x mount_nfs.sh
./mount_nfs.sh
文档版本 :v1.0
最后更新:2026年4月15日