LNMP + Redis 部署 Discuz 5.0X 小白详细版指南
写给小白的超详细图文教程
- 🎯 目标:零基础也能成功部署自己的论坛
- 💻 操作系统:openEuler 24.03(华为开源Linux系统)
- 🛠 核心技术:LNMP(Nginx + MySQL + PHP)+ Redis 缓存
- 📦 应用系统:Discuz! X 5.0(著名开源论坛系统)
阅读说明:本文档每个命令都有详细解释,每个步骤都有预期结果。请按照顺序一步步来,遇到不懂的名词先看第一章的基础知识!
📖 第一章:基础知识入门
在开始动手之前,让我们先来了解一下我们要安装的这些东西都是什么。就像装修房子之前,先要认识水泥、砖头、钢筋一样!
1.1 什么是 LNMP?
🌟 一句话解释:LNMP 是四个软件的首字母缩写,它们组合在一起,就能让你的服务器"跑起来"一个网站。
📦 四个组件分别是什么?
| 组件 | 全称 | 通俗比喻 | 作用 |
|---|---|---|---|
| L | Linux | 房子的地基和主体结构 | 操作系统,整个服务器的基础 |
| N | Nginx | 房子的前台接待员 | Web服务器,接收访客请求,决定谁来处理 |
| M | MySQL | 房子的超大仓库 | 数据库,存放网站的所有数据 |
| P | PHP | 房子的加工车间 | 编程语言,处理业务逻辑 |
💡 形象的比喻
想象你要开一家网上超市:
- Linux = 超市所在的整栋大楼(提供场地)
- Nginx = 超市门口的保安和接待员(接待顾客)
- MySQL = 超市的巨大仓库(存放商品和订单信息)
- PHP = 超市的加工车间(把原料加工成商品)
1.2 什么是 Redis?为什么需要它?
🌟 一句话解释:Redis 是一个"超级快的临时记事本",可以加速你的网站。
📝 生活中的类比
想象你去奶茶店点单:
- 没有Redis:你每次点奶茶,店员都要从仓库找原料、煮茶、加料...要等10分钟
- 有Redis:店员把最常做的10种奶茶提前做好放在冰柜里,你点单30秒就能拿到!
Redis 就是这个"冰柜",把常用数据提前准备好,让网站响应更快。
💡 Redis 的优势
| 特点 | 说明 |
|---|---|
| 🚀 速度超快 | 数据存在内存里,读写速度是硬盘的上千倍 |
| 📊 减轻数据库压力 | 热门数据从Redis拿,不用每次都查MySQL |
| 💾 数据持久化 | 可以把内存中的数据保存到硬盘,防止丢失 |
| 🔄 支持多种数据类型 | 不只是简单的键值对,还支持列表、集合等 |
1.3 什么是 Discuz?
🌟 一句话解释:Discuz 是一款"论坛建站神器",让你不需要写代码也能拥有一个完整的社区论坛。
🏠 Discuz 能做什么?
- 📋 论坛帖子系统(发帖、回帖、点赞)
- 👥 用户注册登录
- 💬 即时通讯/站内消息
- 📁 文件上传下载
- 🎨 换肤、主题定制
- 📊 数据统计
- ...还有超级多功能!
💡 为什么选择 Discuz?
- 🎯 中国最流行的开源论坛系统
- 📅 20多年历史,持续更新
- 🌍 几百万网站在使用
- 🆓 完全免费开源
1.4 openEuler 24.03 是什么?
🌟 一句话解释:openEuler(发音:欧普恩乐)是华为开源的 Linux 操作系统,就像 Windows、MacOS 一样,但它更适合服务器使用。
📊 openEuler 的特点
| 特点 | 说明 |
|---|---|
| 🆓 完全开源免费 | 任何人都可以自由使用和修改 |
| 🔒 安全稳定 | 企业级稳定性,适合长期运行 |
| 🚀 性能优异 | 针对服务器场景深度优化 |
| 📦 国产系统 | 中国人开发的操作系统 |
💡 24.03 是什么意思?
- 24 = 2024年发布的版本
- 03 = 3月份的版本
- 所以 24.03 就是 2024年3月发布的版本!
1.5 前置条件检查清单
在开始之前,请确认你满足以下条件:
✅ 服务器准备
| 检查项 | 要求 | 验证方法 |
|---|---|---|
| 操作系统 | openEuler 24.03 已安装 | 运行 cat /etc/os-release |
| 网络连接 | 能访问互联网 | 运行 ping baidu.com |
| 管理员权限 | root 用户或 sudo 权限 | 运行 whoami |
| SSH 工具 | 已安装 SSH 客户端 | 可用 MobaXterm、Xshell、FinalShell 等 |
✅ 网络信息准备
| 信息 | 用途 | 如何获取 |
|---|---|---|
| 服务器 IP 地址 | 访问网站用 | 运行 ip addr 或 hostname -I |
| SSH 端口 | 连接服务器用 | 默认 22,一般不用改 |
| root 密码 | 登录服务器用 | 安装系统时设置 |
⚠️ 重要提醒
❌ 不要在生产环境直接使用本教程
本教程面向测试环境,省略了很多安全设置。如果你要在正式网站使用,请参考附录的"生产环境注意事项"。
🔧 第二章:准备工作
磨刀不误砍柴工!开始之前先做好准备工作。
2.1 获取服务器 IP 地址
🎯 目标:找到你服务器的 IP 地址,就像知道快递收货地址一样。
📝 操作步骤
步骤 1:连接服务器
打开你的 SSH 工具(如 MobaXterm),连接到服务器:
用户名:root
密码:你的root密码
服务器IP:你的服务器IP
端口:22
步骤 2:查看 IP 地址
在终端中运行:
bash
ip addr
📖 这条命令的意思是...
| 命令 | 含义 |
|---|---|
ip |
网络配置工具 |
addr |
address(地址)的缩写 |
✅ 预期结果
你会看到类似这样的输出:
1: lo: <LOOPBACK,UP> ...
2: eth0: <BROADCAST,MULTICAST,UP> ...
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
💡 重点看 inet 后面的数字 ,如
192.168.1.100,这就是你的服务器IP!
💡 小技巧
如果输出太多不好找,可以用这个命令只显示IP:
bash
hostname -I
2.2 准备终端工具(SSH 连接)
🎯 目标:学会用 SSH 工具连接服务器,就像用远程桌面连接Windows一样。
📝 什么是 SSH?
SSH(Secure Shell)是一种加密的网络协议,让你能安全地远程控制另一台电脑。就像医院里的"远程会诊",专家不用亲自到场也能操控手术机器人!
💡 推荐使用的工具
| 工具 | 优点 | 适用系统 |
|---|---|---|
| MobaXterm | 功能强大,免费版够用,支持拖拽上传 | Windows |
| FinalShell | 国产软件,界面友好 | Windows/Mac |
| Xshell | 经典老牌,收费但稳定 | Windows |
| 系统自带Terminal | Mac/Linux自带 | Mac/Linux |
📝 MobaXterm 使用步骤
- 下载安装:官网 https://mobaxterm.mobatek.net/
- 新建连接:点击左上角 "Session" → "SSH"
- 填写信息 :
- Remote host:你的服务器IP(如 192.168.1.100)
- Specify username:root
- 连接:点击 "OK",输入密码即可
⚠️ 注意事项
⚠️ 第一次连接会提示"是否保存密钥",选择"是"
⚠️ 输入密码时屏幕不会显示任何字符,这是正常的安全设计,输入完直接回车即可
2.3 准备 Discuz 安装包
🎯 目标:下载 Discuz 5.0 安装包,准备上传到服务器。
📥 下载 Discuz
- 访问 Discuz 官网:https://www.discuz.vip/
或社区下载站:https://www.dismall.com/ - 进入下载页面
- 下载最新版的 Discuz! X 5.0(通常文件名是
Discuz_X5.0_SC_UTF8.zip或类似)
💡 直链下载:你也可以使用以下命令直接下载到服务器:
bashcd /usr/share/nginx/html/ wget https://download.comsenz.com/DiscuzX/Discuz_X5.0_SC_UTF8.zip unzip Discuz_X5.0_SC_UTF8.zip
⚠️ 版本说明
💡 _SC_UTF8 是什么意思?
- SC = 简体中文版(Simplified Chinese)
- UTF8 = 统一的字符编码,避免乱码
- 如果你要用繁体,就选 TC 版本
📁 安装包结构
下载后会得到一个压缩包,解压后会看到:
upload/ ← 这个文件夹里面的内容才是要上传的!
├── admin.php ← 后台管理入口
├── forum.php ← 论坛首页
├── static/ ← 静态资源文件夹
├── config/ ← 配置文件
└── ... ← 其他文件
💡 为什么要上传 upload 里面的内容?
想象你买了套家具,upload 文件夹就是"零件包"。你需要把这些零件按照说明书组装起来,而不是把整个零件包扔上去!
🖥️ 第三章:安装 LNMP 环境
现在开始正式安装!这章会详细介绍每一步,让你知其然更知其所以然。
3.1 设置主机名
🎯 目标:给服务器起个名字,方便识别。
📝 背景知识
什么是主机名?
就像每个人都有名字一样,服务器也需要一个名字。在局域网中,你可以用名字而不是IP来访问其他电脑,比如
ssh lnmp-server而不是ssh 192.168.1.100。
📝 操作步骤
步骤 1:设置主机名
bash
hostnamectl set-hostname lnmp && bash
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
hostnamectl |
主机名管理工具(hostname control) |
set-hostname |
设置主机名(set hostname) |
lnmp |
你要设置的名字,叫什么都行,建议简短 |
&& |
并且(AND),前面的成功后再执行后面的 |
bash |
重新启动一个shell,让新主机名生效 |
✅ 预期结果
命令执行后不会有明显输出,但你可以验证:
bash
hostname
应该显示 lnmp
⚠️ 注意事项
⚠️ 如果
&& bash不生效,可以:
- 手动输入
bash回车- 或者完全退出重新连接SSH
❌ 不要取太长的名字,可能会导致一些软件报错
3.2 安装软件包
🎯 目标:一次性安装所有需要的软件(Nginx、MySQL、PHP、Redis等)。
📝 背景知识
什么是 yum?
yum(Yellowdog Updater Modified)是 Linux 的软件商店。你可以把它想象成手机上的"应用市场",用它来一键安装软件!
📝 操作步骤
步骤 1:执行安装命令
bash
yum install -y lrzsz mysql-server nginx redis php php-fpm php-mysqlnd php-xml
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
yum |
软件包管理器(Yellowdog Updater Modified) |
install |
安装 |
-y |
自动确认所有提示(yes),不用手动按y |
lrzsz |
文件传输工具(后面上传文件用) |
mysql-server |
MySQL数据库服务器 |
nginx |
Web服务器(读作"引擎X") |
php |
PHP解释器 |
php-fpm |
PHP FastCGI进程管理器(让PHP跑得更快更稳定) |
php-mysqlnd |
PHP连接MySQL的驱动程序 |
php-xml |
PHP处理XML的扩展(Discuz需要) |
redis |
Redis缓存服务器 |
⚠️ 额外扩展:如果 Discuz 安装时提示缺少扩展,可以补充安装:
bashyum install -y php-gd php-mbstring php-json systemctl restart php-fpm
💡 每个软件包的详细说明
| 软件包 | 通俗解释 | 类比 |
|---|---|---|
| nginx | 网站的门卫和服务员 | 餐厅接待员 |
| mysql-server | 存放和管理数据的仓库 | 大型图书馆 |
| php | 把网页请求变成网页的翻译机 | 厨师 |
| php-fpm | 帮PHP更高效工作的管理器 | 厨房主管 |
| redis | 超快的临时记事本 | 收银台的预约本 |
✅ 预期结果
安装过程会显示下载进度,最后显示:
Complete!
或
安装完成!
⚠️ 注意事项
⚠️ 安装过程可能需要几分钟,取决于你的网络速度
⚠️ 如果提示
Package not found,可能是软件源的问题,先运行yum update更新软件源⚠️ openEuler 默认用 dnf,yum 命令会自动转发给 dnf,两者效果一样
3.3 启动服务
🎯 目标:让安装的软件运行起来!
📝 背景知识
什么是 systemctl?
systemctl 是 Linux 系统的"服务管理器"。你可以把它想象成一个大楼的物业管理系统,用它来控制各个服务(电梯、空调、消防)的开关状态。
📝 操作步骤
步骤 1:启动 Nginx
bash
systemctl start nginx
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
systemctl |
系统服务控制工具(system control) |
start |
启动 |
nginx |
要启动的服务名 |
✅ 预期结果
没有任何错误输出就说明成功了!
步骤 2:启动 PHP-FPM
bash
systemctl start php-fpm
✅ 预期结果
没有任何错误输出就说明成功了!
步骤 3:同时启动多个服务
bash
systemctl start nginx php-fpm
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
systemctl start |
启动服务 |
nginx php-fpm |
同时启动这两个服务(用空格分隔) |
💡 小技巧
💡 你可以用一条命令启动所有需要的服务:
bashsystemctl start nginx php-fpm mysqld redis这样 nginx、php-fpm、mysql、redis 四个服务同时启动!
💡 设置开机自启(可选):
bashsystemctl enable nginx php-fpm mysqld redis这样服务器重启后,服务会自动启动!
3.4 验证服务状态
🎯 目标:确认服务是否成功启动。
📝 背景知识
什么是进程?
进程就是正在运行的程序。就像你打开很多浏览器窗口一样,每个窗口都是一个进程。
📝 操作步骤
步骤 1:检查 Nginx 是否在监听端口
bash
netstat -anptu | grep nginx
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
netstat |
网络状态查看工具(network statistics) |
-a |
显示所有(all) |
-n |
用数字显示端口(不用显示服务名) |
-p |
显示进程ID(process) |
-t |
显示TCP协议 |
-u |
显示UDP协议 |
| ` | ` |
grep nginx |
过滤出包含"nginx"的行 |
✅ 预期结果
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx: master
📊 结果解读
| 字段 | 含义 | 我们看到的值 |
|---|---|---|
tcp |
TCP协议 | tcp |
0.0.0.0:80 |
监听所有IP的80端口 | 正常! |
LISTEN |
正在监听 | 正常! |
1234 |
进程ID | - |
nginx: master |
nginx主进程 | 正常! |
✅ 如果看到
LISTEN和nginx,说明 Nginx 启动成功!
步骤 2:检查 PHP-FPM 进程
bash
ps aux | grep php-fpm
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
ps |
进程查看工具(process status) |
aux |
显示所有进程(a=all, u=详细信息, x=包括未终端的) |
| ` | grep php-fpm` |
✅ 预期结果
root 1234 0.0 0.2 ... php-fpm: master process
apache 1235 0.0 0.1 ... php-fpm: pool www
apache 1236 0.0 0.1 ... php-fpm: pool www
📊 结果解读
| 字段 | 含义 | 解读 |
|---|---|---|
root |
运行用户 | 主进程需要root权限 |
apache |
运行用户 | 工作进程用普通用户跑,更安全 |
master |
主进程 | 管理其他进程 |
pool www |
www连接池 | 处理网页请求的进程 |
✅ 如果看到 master 和 pool www,说明 PHP-FPM 启动成功!
步骤 3:一键查看所有服务状态
bash
systemctl status nginx php-fpm
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
systemctl status |
查看状态 |
✅ 预期结果
每个服务会显示类似这样的信息:
● nginx.service - nginx: high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: active (running) ← 绿色,表示正在运行!
✅ active (running) = 正在运行 ✅
❌ inactive (dead) = 没有运行
❌ failed = 启动失败
✅ 第四章:环境验证测试
安装完软件后,先测试一下能不能正常工作,就像装修完要先开灯试电一样!
4.1 创建 PHP 测试页
🎯 目标:创建一个测试页面,验证 Nginx + PHP 能否正常工作。
📝 背景知识
什么是 phpinfo()?
phpinfo() 是一个PHP内置函数,它会显示PHP的所有配置信息。就像打开冰箱看里面有什么,这个函数能让你看到PHP的全部"内脏"!
📝 操作步骤
步骤 1:进入网站目录
bash
cd /usr/share/nginx/html/
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
cd |
切换目录(change directory) |
/usr/share/nginx/html/ |
Nginx的网站根目录 |
💡 什么是网站根目录?
就是存放网页文件的地方。用户访问你的网站时,服务器会从这里找文件。就像图书馆的入口大厅,所有书籍都在这里!
步骤 2:清空目录(可选)
bash
rm -rf *
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
rm |
删除(remove) |
-r |
递归删除,包括子文件夹(recursive) |
-f |
强制删除,不提示确认(force) |
* |
所有文件(通配符) |
⚠️ 警告:这个命令会删除目录下所有文件!如果是新装的系统没关系,但如果目录里有重要文件,请先备份!
步骤 3:创建 PHP 测试文件
bash
vim index.php
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
vim |
Linux最常用的文本编辑器(类似Windows的记事本) |
index.php |
要创建的文件名 |
📝 Vim 编辑器使用方法
Vim 有三种模式:
| 模式 | 进入方式 | 用途 |
|---|---|---|
| 普通模式 | 默认 | 浏览、移动光标、删文字 |
| 编辑模式 | 按 i |
输入文字 |
| 命令模式 | 按 : |
保存、退出等操作 |
📝 详细操作步骤
- 输入
vim index.php回车,进入vim - 按
i键,进入编辑模式(左下角显示-- INSERT --) - 输入以下内容:
php
<?php
phpinfo();
?>
- 按
Esc键,退出编辑模式 - 输入
:wq回车,保存并退出
💡 Vim 常用快捷键
| 按键 | 功能 |
|---|---|
i |
进入编辑模式 |
Esc |
退出编辑模式 |
:wq |
保存并退出(write quit) |
:q! |
不保存强制退出 |
dd |
删除当前行 |
yy |
复制当前行 |
p |
粘贴 |
💡 如果觉得 Vim 太难,可以用更简单的编辑器:
bashnano index.phpnano 更像 Windows 记事本,底部有操作提示。
步骤 4:保存文件内容
输入以下内容:
php
<?php
phpinfo();
?>
💡 这段代码的意思是:
<?php= PHP代码开始标签phpinfo();= 调用phpinfo函数,显示PHP配置信息?>= PHP代码结束标签
✅ 预期结果
文件创建完成后,验证一下:
bash
cat index.php
应该显示:
<?php
phpinfo();
?>
4.2 测试 Nginx + PHP
🎯 目标:通过浏览器访问测试页面,验证整个网站环境是否正常。
📝 操作步骤
步骤 1:查看服务器IP
bash
hostname -I
✅ 预期结果
显示类似 192.168.1.100 的IP地址。
步骤 2:浏览器访问
打开电脑浏览器(Chrome、Edge、Firefox等),在地址栏输入:
http://192.168.1.100/index.php
(把 192.168.1.100 换成你的实际IP)
✅ 预期结果
✅ 应该看到一个很长的页面,显示"PHP Version 8.x.x"
✅ 页面中包含大量表格:PHP Core、apache2handler、bcmath 等
📊 如果成功,说明:
- ✅ Nginx 正常工作,能接收请求
- ✅ PHP 正常工作,能处理PHP代码
- ✅ 两者连接正常
❌ 如果显示 "502 Bad Gateway"
说明 Nginx 无法连接到 PHP-FPM,解决方案:
bash
systemctl restart nginx php-fpm
❌ 如果显示 "403 Forbidden"
说明没有权限,解决方案:
bash
chmod 755 /usr/share/nginx/html/
ls -la /usr/share/nginx/html/index.php
4.3 创建 MySQL 测试页
🎯 目标:创建一个测试页面,验证 PHP 能否连接 MySQL 数据库。
📝 操作步骤
步骤 1:启动 MySQL 服务
bash
systemctl start mysqld
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
systemctl start |
启动服务 |
mysqld |
MySQL数据库服务(d=daemon,守护进程) |
步骤 2:创建 MySQL 连接测试文件
bash
vim /usr/share/nginx/html/mysql_con.php
步骤 3:输入以下内容
php
<?php
// 数据库连接配置
$servername = "localhost"; // 服务器地址(本地)
$username = "root"; // 用户名
$password = ""; // 密码(测试环境默认空)
// 创建数据库连接
$conn = new mysqli($servername, $username, $password);
// 检查连接是否成功
if ($conn->connect_error) {
// 连接失败,显示错误信息
die("连接失败: " . $conn->connect_error);
}
// 连接成功!
echo "MySQL 连接成功!";
echo "<br>MySQL 版本: " . mysqli_get_server_info($conn);
?>
📖 这段代码的意思是...
| 代码部分 | 通俗解释 |
|---|---|
$servername = "localhost" |
服务器地址是"本地" |
$username = "root" |
用户名是root(管理员) |
$password = "" |
密码是空的 |
new mysqli(...) |
创建数据库连接对象 |
$conn->connect_error |
检查连接是否有错误 |
die("...") |
如果有错,停止并显示错误 |
mysqli_get_server_info($conn) |
获取MySQL版本信息 |
步骤 4:浏览器访问测试
在浏览器中输入:
http://192.168.1.100/mysql_con.php
✅ 预期结果
✅ 应该显示:
MySQL 连接成功! MySQL 版本: 8.0.x
📊 如果成功,说明:
- ✅ MySQL 数据库已启动
- ✅ PHP 能成功连接 MySQL
- ✅ PHP-MySQL 驱动已安装
❌ 如果显示 "连接失败"
检查MySQL是否启动:
bash
systemctl status mysqld
如果没启动,先启动:
bash
systemctl start mysqld
4.4 测试数据库连接
🎯 目标:学会在命令行直接操作 MySQL 数据库。
📝 操作步骤
步骤 1:登录 MySQL
bash
mysql -u root -p
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
mysql |
MySQL客户端工具 |
-u root |
用户名是 root |
-p |
需要输入密码(password) |
✅ 预期结果
Enter password:
💡 直接按回车即可(测试环境root默认无密码)
✅ 登录成功后显示
Welcome to MySQL Monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.x MySQL Community Server
mysql>
💡 注意:看到
mysql>提示符就说明登录成功了!
步骤 2:查看所有数据库
sql
SHOW DATABASES;
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
SHOW |
显示 |
DATABASES |
数据库 |
; |
SQL语句结束符(必须加!) |
✅ 预期结果
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
📊 结果解读
| 数据库名 | 用途 |
|---|---|
| information_schema | MySQL系统信息(自动创建) |
| mysql | 用户和权限信息(自动创建) |
| performance_schema | 性能监控数据(自动创建) |
| sys | 系统数据(自动创建) |
💡 这些数据库都是 MySQL 自动创建的,你不需要管它们。
步骤 3:退出 MySQL
sql
EXIT;
或者
sql
QUIT;
或者直接按 Ctrl + D
✅ 预期结果
Bye
然后回到普通命令提示符。
🚀 第五章:部署 Discuz 论坛
现在开始正式部署 Discuz!这是一切的高潮部分!
5.1 上传安装包
🎯 目标:把 Discuz 安装包上传到服务器。
📝 方法一:使用 rz 命令(推荐)
步骤 1:确认 lrzsz 已安装
bash
rpm -qa | grep lrzsz
如果没有任何输出,先安装:
bash
yum install -y lrzsz
步骤 2:切换到网站目录
bash
cd /usr/share/nginx/html/
步骤 3:执行上传命令
bash
rz
📖 这条命令的意思是...
| 命令 | 含义 |
|---|---|
rz |
接收文件(receive Zmodem) |
✅ 预期结果
会弹出一个文件选择对话框,选择你下载的 upload.zip 文件。
💡 什么是 Zmodem?
一种古老的文件传输协议,现在被包装成简单的 rz/sz 命令使用。
📝 方法二:使用拖拽上传(如果你的SSH工具支持)
如果你用的是 MobaXterm,可以直接把文件拖拽到终端窗口,会自动上传到当前目录。
📝 方法三:使用 scp 命令
如果你在本地电脑上,可以打开一个新的终端窗口:
Windows (PowerShell) / Mac / Linux:
bash
scp /本地/路径/upload.zip root@服务器IP:/usr/share/nginx/html/
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
scp |
安全复制(secure copy) |
/本地/路径/upload.zip |
本地文件路径 |
root@服务器IP |
服务器用户和地址 |
/usr/share/nginx/html/ |
目标目录 |
⚠️ 输入后会提示输入服务器密码
5.2 解压文件
🎯 目标:把压缩包解压,获取 Discuz 程序文件。
📝 操作步骤
步骤 1:查看上传的文件
bash
ls -la
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
ls |
列出文件(list) |
-l |
详细列表(long format) |
-a |
显示隐藏文件(all) |
✅ 预期结果
应该看到类似:
-rw-r--r-- 1 root root 8.5M upload.zip
步骤 2:解压安装包
bash
unzip upload.zip
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
unzip |
解压ZIP文件 |
upload.zip |
要解压的文件名 |
✅ 预期结果
会显示解压过程:
Archive: upload.zip
creating: upload/
extracting: upload/readme.html
extracting: upload/forum.php
...
步骤 3:查看解压后的内容
bash
ls -la
✅ 预期结果
应该看到:
drwxr-xr-x 3 root root upload/
-rw-r--r-- 1 root root upload.zip
💡 小技巧:一步到位
💡 如果你想解压到指定目录:
bashunzip upload.zip -d /目标目录/
💡 如果你的系统没有 unzip,先安装:
bashyum install -y unzip
5.3 设置权限
🎯 目标:让 PHP-FPM 能够读写 Discuz 文件。
📝 背景知识
为什么需要设置权限?
Linux 是一个多用户系统,每个文件和文件夹都有"主人"和"权限"。
想象一栋公寓:
- 每个房间都有主人
- 主人可以决定谁能进出
- PHP-FPM 就像一个"租客",需要主人授权才能使用房间
📝 操作步骤
步骤 1:查看 PHP-FPM 运行用户
bash
ps aux | grep php-fpm
✅ 预期结果
root 1234 ... php-fpm: master process
apache 1235 ... php-fpm: pool www
apache 1236 ... php-fpm: pool www
💡 可以看到 PHP-FPM 的工作进程是用 apache 用户运行的!
步骤 2:设置文件所有者
bash
chown apache:apache /usr/share/nginx/html/upload/ -R
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
chown |
改变所有者(change owner) |
apache |
新所有者(用户) |
apache |
新所有者(组) |
/usr/share/nginx/html/upload/ |
目标目录 |
-R |
递归,包括所有子文件和文件夹 |
💡 什么是 chown apache:apache?
| 部分 | 含义 | 说明 |
|---|---|---|
apache:apache |
用户:用户组 | 把文件主人改成apache用户和apache组 |
✅ 预期结果
没有任何输出表示成功!
步骤 3:验证权限设置
bash
ls -la /usr/share/nginx/html/upload/
✅ 预期结果
drwxr-xr-x 2 apache apache ... .
drwxr-xr-x 6 apache apache ... ..
drwxr-xr-x 5 apache apache ... admin.php ...
✅ 如果看到
apache apache,说明权限设置正确!
步骤 4:设置目录和文件权限(可选但推荐)
bash
# 设置目录权限为755(drwxr-xr-x)
find /usr/share/nginx/html/upload/ -type d -exec chmod 755 {} \;
# 设置文件权限为644(-rw-r--r--)
find /usr/share/nginx/html/upload/ -type f -exec chmod 644 {} \;
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
find ... -type d |
找出所有目录 |
-exec chmod 755 {} \; |
对每个结果执行 chmod 755 |
type f |
找出所有文件 |
💡 755 和 644 是什么意思?
所有者(Owner) 群组(Group) 其他用户 rwx r-x r-x 421 421 421 = 7 = 5 = 57 = 可读可写可执行,5 = 可读可执行
5.4 Web 安装向导
🎯 目标:通过浏览器完成 Discuz 的在线安装。
📝 操作步骤
步骤 1:确认服务全部启动
bash
systemctl status nginx php-fpm mysqld
确保显示 active (running)!
步骤 2:打开浏览器访问安装向导
在浏览器地址栏输入:
http://192.168.1.100/upload/install/
⚠️ 把
192.168.1.100换成你的服务器IP!
✅ 预期结果
✅ 应该看到 Discuz 安装向导页面!
✅ 如果显示 "403 Forbidden",检查目录权限
✅ 如果显示 "404 Not Found",检查URL是否正确
5.5 安装向导详解(每一步都有)
🎯 第一步:阅读许可协议
📱 页面显示:Discuz! X 安装协议
💡 解释:这是一个法律协议,说明你有权使用这个软件。一般直接点"我同意"就行。
✅ 操作:点击"我同意"按钮
🎯 第二步:环境检测
📱 页面显示:一套检测表格,显示各项指标
📊 检测项目说明
| 检测项 | 要求 | 说明 |
|---|---|---|
| 操作系统 | 类Unix | ✅ 通过 |
| PHP 版本 | PHP 8.0+ | ⚠️ 如果低于8.0可能有问题 |
| MySQL | 支持 | ✅ 通过 |
| 目录权限 | 可写 | ⚠️ 如果红叉,返回检查权限 |
| PHP 扩展 | xml、mysqlnd、gd等 | ✅ 通过 |
✅ 预期结果
✅ 看到类似 "您的服务器配置符合要求" 或所有项都是绿色/对勾
💡 如果有红叉怎么办?
⚠️ 目录不可写:检查权限
bashchown apache:apache /usr/share/nginx/html/upload/ -R chmod 755 /usr/share/nginx/html/upload/ -R⚠️ 缺少PHP扩展:安装扩展
bashyum install -y php-gd php-json php-mbstring systemctl restart php-fpm
✅ 操作:点击"下一步"
🎯 第三步:选择安装方式
📱 页面显示:全新安装 / 覆盖安装
💡 解释:
- 全新安装:从零开始创建论坛(第一次安装选这个)
- 覆盖安装:保留数据,只更新程序(升级时用)
✅ 操作:选择"全新安装",点击"下一步"
🎯 第四步:配置数据库
📱 页面显示:数据库配置表单
📋 填写说明
| 字段 | 示例值 | 说明 |
|---|---|---|
| 数据库服务器 | localhost | 本机安装不用改 |
| 数据库端口 | 3306 | MySQL默认端口,不用改 |
| 数据库名称 | cz | 任意英文名,建议简短 |
| 数据库用户名 | root | 测试环境用root |
| 数据库密码 | (空) | 测试环境root无密码 |
| 表前缀 | pre_ | 建议保持默认,可区分多个论坛 |
💡 数据库名是什么?
💡 就像不同的仓库放不同的货物,你的论坛需要一个"专属仓库"。
数据库名称就是给这个仓库起的名字,比如
cz、forum、bbs都可以。
✅ 预期填写结果
数据库服务器: localhost
数据库端口: 3306
数据库名: cz
数据库用户名: root
数据库密码: (留空)
表前缀: pre_
✅ 操作:填写完成后,点击"下一步"
🎯 第五步:设置管理员账号
📱 页面显示:管理员设置表单
📋 填写说明
| 字段 | 示例值 | 说明 |
|---|---|---|
| 管理员账号 | admin123 | 论坛管理员用户名 |
| 管理员密码 | Admin@123 | 建议大小写+数字+符号 |
| 确认密码 | Admin@123 | 再输一遍确认 |
| 管理员邮箱 | admin@example.com | 用于找回密码等 |
⚠️ 重要提醒
⚠️ 管理员账号不要用 admin!黑客第一个试的就是admin,很容易被破解!
⚠️ 密码一定要强!建议包含:
- 大写字母(A-Z)
- 小写字母(a-z)
- 数字(0-9)
- 特殊符号(!@#$%)
✅ 操作:填写完成后,点击"下一步"
🎯 第六步:安装完成
📱 页面显示:恭喜!Discuz! X 安装完成!
✅ 预期结果
✅ 看到"安装成功"提示!
✅ 显示论坛访问地址和管理后台地址
📋 显示的信息
| 地址 | 用途 |
|---|---|
| http://你的IP/upload/ | 论坛首页 |
| http://你的IP/upload/admin.php | 管理后台 |
⚠️ 安装后必做
⚠️ 删除安装目录(安全起见):
bashrm -rf /usr/share/nginx/html/upload/install/
🔧 第六章:配置 Redis 缓存
这一章让你的论坛跑得更快!
6.1 什么是 Redis 缓存?
🌟 一句话解释:Redis 就像餐厅的"备餐台",把常用的东西提前准备好,客人要的时候马上给,不用每次都去厨房现做。
📊 没有缓存 vs 有缓存
| 场景 | 无缓存 | 有Redis缓存 |
|---|---|---|
| 用户打开论坛 | 查数据库,2秒 | 直接读缓存,0.1秒 |
| 查看热门帖子列表 | 每次都计算排序 | 直接返回缓存结果 |
| 同时1000人在线 | 数据库压力山大 | Redis分担大部分请求 |
6.2 修改 Redis 配置
🎯 目标:配置 Redis 允许远程连接(测试环境需要)。
📝 操作步骤
步骤 1:备份原配置文件
bash
cp /etc/redis.conf /etc/redis.conf.bak
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
cp |
复制(copy) |
/etc/redis.conf |
原文件 |
/etc/redis.conf.bak |
备份文件 |
💡 为什么要备份?
就像打游戏前先存档,备份让你改错了还能还原!
步骤 2:修改配置
bash
sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis.conf
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
sed |
流编辑器(stream editor) |
-i |
直接修改文件(in-place) |
's/old/new/' |
把 old 替换成 new |
^protected-mode yes |
以 protected-mode yes 开头的行 |
protected-mode no |
替换成 protected-mode no |
💡 protected-mode 是什么?
💡 protected-mode 是 Redis 的保护开关:
yes= 只允许本地连接(127.0.0.1)no= 允许任何地址连接⚠️ 测试环境可以关闭,生产环境建议保持开启并设置密码!
步骤 3:验证修改
bash
grep "protected-mode" /etc/redis.conf
✅ 预期结果
protected-mode no
✅ 显示 no 表示修改成功!
6.3 启动 Redis 服务
🎯 目标:让 Redis 服务运行起来。
📝 操作步骤
步骤 1:启动 Redis
bash
systemctl start redis
✅ 预期结果
没有任何输出表示启动成功!
步骤 2:检查 Redis 状态
bash
systemctl status redis
✅ 预期结果
● redis.service - Redis...
Active: active (running) ← 绿色,表示正在运行!
步骤 3:测试 Redis 连接
bash
redis-cli ping
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
redis-cli |
Redis命令行客户端 |
ping |
心跳测试命令 |
✅ 预期结果
PONG
✅ 返回 PONG 表示 Redis 正常工作!
💡 ping-pong 是什么?
💡 就像小时候玩的"ping-pong",你喊"ping",对方回"pong"。
计算机也用这种方式测试连接是否正常!
步骤 4:查看 Redis 详细信息
bash
redis-cli info
✅ 预期结果
显示 Redis 的详细信息,包括:
redis_version:7.x.x
uptime_in_seconds:12345
connected_clients:1
...
💡 可以看到 Redis 版本、运行时间等信息
6.4 配置 Discuz 连接 Redis
🎯 目标:让 Discuz 论坛使用 Redis 作为缓存。
📝 操作步骤
步骤 1:打开 Discuz 配置文件
bash
vim /usr/share/nginx/html/upload/config/config_global.php
步骤 2:找到 memory 配置段
在 vim 中按 / 然后输入 memory,按回车搜索
📖 vim 搜索命令
| 命令 | 功能 |
|---|---|
/keyword |
搜索 keyword |
n |
下一个匹配 |
N |
上一个匹配 |
Esc |
退出搜索 |
步骤 3:修改配置文件
找到 $_config['memory'] 配置段,添加或修改为:
php
$_config['memory']['redis']['server'] = '127.0.0.1';
$_config['memory']['redis']['port'] = 6379;
$_config['memory']['redis']['pconnect'] = 0;
$_config['memory']['redis']['timeout'] = 1;
$_config['memory']['redis']['password'] = '';
$_config['memory']['redis']['serializer'] = 1;
📖 配置项解释
| 配置项 | 含义 | 说明 |
|---|---|---|
redis']['server |
Redis服务器地址 | 127.0.0.1 = 本机 |
redis']['port |
Redis端口 | 6379 是默认端口 |
redis']['pconnect |
长连接 | 0=关闭,1=开启 |
redis']['timeout |
连接超时时间 | 1秒足够 |
redis']['password |
连接密码 | 空=无密码 |
redis']['serializer |
序列化方式 | 1=PHP序列化 |
步骤 4:设置内存驱动为 Redis
在同一文件中找到或添加:
php
$_config['memory']['driver'] = 'redis';
💡 这行配置告诉 Discuz:"用 Redis 来做缓存!"
步骤 5:保存并退出
按 Esc,然后输入 :wq,回车
✅ 验证配置
bash
grep -A 10 "memory" /usr/share/nginx/html/upload/config/config_global.php
✅ 预期结果
应该看到 memory 相关的配置:
$_config['memory']['driver'] = 'redis';
$_config['memory']['redis']['server'] = '127.0.0.1';
...
📦 第七章:安装 PHP Redis 扩展
让 PHP 能够"说话" Redis!
7.1 什么是 PECL?
🌟 一句话解释:PECL 是 PHP 的"应用商店",专门提供 PHP 扩展。
📊 类比理解
| 概念 | 说明 |
|---|---|
| PHP | 基础程序(手机) |
| PECL | 扩展商店(应用市场) |
| Redis 扩展 | PECL 上的一个应用(微信App) |
💡 就像微信让手机能聊天,Redis扩展让PHP能连接Redis!
7.2 安装编译工具
🎯 目标:安装编译 Redis 扩展需要的工具。
📝 操作步骤
bash
yum install -y php-devel php-pear gcc make
📖 安装包说明
| 包名 | 作用 |
|---|---|
php-devel |
PHP开发工具(编译扩展需要) |
php-pear |
PECL的包管理器 |
gcc |
C语言编译器(编译Redis扩展需要) |
make |
构建工具(组织编译过程) |
💡 编译就像"组装",gcc是螺丝刀,make是说明书!
7.3 安装 Redis 扩展
🎯 目标:安装 PHP Redis 扩展。
📝 操作步骤
步骤 1:使用 PECL 安装
bash
pecl install redis
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
pecl |
PHP扩展库管理工具 |
install redis |
安装redis扩展 |
✅ 安装过程
安装过程中会提示几个问题,直接按回车使用默认值即可(共4-5个选项)。
💡 预计需要等待1-3分钟,取决于网络速度!
💡 如果不想手动按回车(自动安装)
bash
yes "" | pecl install redis
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
yes "" |
连续输出空行(模拟回车) |
| ` | ` |
💡 这样所有问题都自动按回车,使用默认值!
步骤 2:启用 Redis 扩展
bash
echo "extension=redis.so" >> /etc/php.ini
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
echo |
输出文本 |
extension=redis.so |
启用redis扩展的指令 |
>> |
追加写入(不覆盖原有内容) |
/etc/php.ini |
PHP配置文件 |
步骤 3:验证扩展已添加
bash
grep "redis.so" /etc/php.ini
✅ 预期结果
extension=redis.so
✅ 表示扩展已启用!
7.4 重启 PHP-FPM
🎯 目标:让新安装的扩展生效。
📝 操作步骤
bash
systemctl restart php-fpm
💡 就像重新开手机让新安装的App生效一样!
7.5 验证 Redis 扩展
🎯 目标:确认 PHP 能识别 Redis 扩展。
📝 操作步骤
步骤 1:命令行检查
bash
php -m | grep redis
📖 这条命令的意思是...
| 命令部分 | 含义 |
|---|---|
php -m |
列出所有已加载的PHP模块 |
grep redis |
过滤包含 redis 的行 |
✅ 预期结果
redis
✅ 看到 redis 表示扩展安装成功!
步骤 2:通过 phpinfo 检查
浏览器访问:
http://192.168.1.100/index.php
按 Ctrl + F(或页面内搜索),搜索 "redis"
✅ 预期结果
✅ 应该看到 "redis" 扩展的信息,包括版本号
⚠️ 如果验证失败
❌ 如果
php -m | grep redis没有输出:检查1:扩展是否写入正确位置
bashgrep "extension=redis.so" /etc/php.ini检查2:看看是否有语法错误
bashphp -m看有没有报错
🔍 第八章:最终验证
所有安装完成后,做一个全面检查!
8.1 完整验证清单
📋 系统服务检查
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| Nginx 运行 | systemctl status nginx |
active (running) ✅ |
| PHP-FPM 运行 | systemctl status php-fpm |
active (running) ✅ |
| MySQL 运行 | systemctl status mysqld |
active (running) ✅ |
| Redis 运行 | systemctl status redis |
active (running) ✅ |
📋 服务连接检查
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| Redis 连接 | redis-cli ping |
PONG ✅ |
| MySQL 连接 | mysql -u root -e "SELECT 1;" |
显示1行 ✅ |
| PHP 版本 | php -v |
PHP 8.x.x ✅ |
| Nginx 版本 | nginx -v |
nginx version ✅ |
📋 浏览器访问检查
| 检查项 | 访问地址 | 预期结果 |
|---|---|---|
| PHP 信息 | http://IP/index.php | PHP信息页面 ✅ |
| MySQL 测试 | http://IP/mysql_con.php | MySQL连接成功 ✅ |
| 论坛首页 | http://IP/upload/ | Discuz论坛首页 ✅ |
| 管理后台 | http://IP/upload/admin.php | 登录页面 ✅ |
📋 Redis 功能检查
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| Redis 扩展 | `php -m | grep redis` |
| Redis 键 | redis-cli keys '*' |
显示缓存键 ✅ |
8.2 常见问题排查
❌ 问题:502 Bad Gateway
原因:Nginx 无法连接到 PHP-FPM
排查步骤:
bash
# 1. 检查 PHP-FPM 是否运行
ps aux | grep php-fpm
# 2. 检查 Nginx 错误日志
tail -30 /var/log/nginx/error.log
# 3. 重启两个服务
systemctl restart nginx php-fpm
💡 解决方案:重启 PHP-FPM 和 Nginx
❌ 问题:连接数据库失败
原因:MySQL 没有启动或密码错误
排查步骤:
bash
# 1. 检查 MySQL 状态
systemctl status mysqld
# 2. 启动 MySQL
systemctl start mysqld
# 3. 测试连接
mysql -u root -p
💡 解决方案:启动 MySQL 服务
❌ 问题:页面显示白屏
原因:PHP 错误或文件权限问题
排查步骤:
bash
# 1. 检查 PHP 错误日志
tail -30 /var/log/php-fpm/www-error.log
# 2. 检查文件权限
ls -la /usr/share/nginx/html/upload/
💡 解决方案:修复权限或查看错误日志
❌ 问题:Redis 连接失败
原因:Redis 没有启动或配置错误
排查步骤:
bash
# 1. 检查 Redis 状态
systemctl status redis
# 2. 测试 Redis
redis-cli ping
# 3. 检查 Discuz 配置
grep redis /usr/share/nginx/html/upload/config/config_global.php
💡 解决方案:启动 Redis 或检查配置
8.3 快速命令参考
💡 一键启动所有服务
bash
systemctl start nginx php-fpm mysqld redis
💡 一键重启所有服务
bash
systemctl restart nginx php-fpm mysqld redis
💡 一键查看所有服务状态
bash
systemctl status nginx php-fpm mysqld redis
💡 一键测试所有连接
bash
echo "=== Redis ===" && redis-cli ping && \
echo "=== MySQL ===" && mysql -u root -e "SELECT 'OK';" && \
echo "=== PHP ===" && php -r "echo 'PHP OK';" && \
echo "=== Redis Extension ===" && php -m | grep redis
📚 附录
附录 A:常用命令速查表
🔧 服务管理命令
| 命令 | 作用 | 示例 |
|---|---|---|
systemctl start 服务名 |
启动服务 | systemctl start nginx |
systemctl stop 服务名 |
停止服务 | systemctl stop nginx |
systemctl restart 服务名 |
重启服务 | systemctl restart nginx |
systemctl status 服务名 |
查看状态 | systemctl status nginx |
systemctl enable 服务名 |
开机自启 | systemctl enable nginx |
📁 文件操作命令
| 命令 | 作用 | 示例 |
|---|---|---|
cd 目录 |
切换目录 | cd /usr/share/nginx/html/ |
ls -la |
列出文件 | ls -la |
cp 源 目标 |
复制文件 | cp a.txt b.txt |
mv 源 目标 |
移动/重命名 | mv a.txt b.txt |
rm -rf 文件 |
删除文件 | rm -rf upload/ |
cat 文件 |
查看文件内容 | cat index.php |
chmod 权限 文件 |
修改权限 | chmod 755 index.php |
chown 用户:组 文件 |
修改所有者 | chown apache:apache upload/ |
💻 压缩解压命令
| 命令 | 作用 | 示例 |
|---|---|---|
zip -r 压缩包.zip 目录 |
压缩 | zip -r backup.zip upload/ |
unzip 压缩包.zip |
解压 | unzip upload.zip |
tar -cvf 包.tar 目录 |
打包 | tar -cvf backup.tar upload/ |
tar -xvf 包.tar |
解包 | tar -xvf backup.tar |
🔍 搜索查看命令
| 命令 | 作用 | 示例 |
|---|---|---|
grep 关键词 文件 |
搜索内容 | grep redis config.php |
find 目录 -name 文件 |
搜索文件 | find / -name "*.php" |
head -n 数字 文件 |
查看前几行 | head -10 index.php |
tail -n 数字 文件 |
查看后几行 | tail -20 error.log |
附录 B:关键文件路径
📂 网站相关
| 用途 | 路径 |
|---|---|
| 网站根目录 | /usr/share/nginx/html/ |
| Discuz 程序目录 | /usr/share/nginx/html/upload/ |
| Discuz 配置目录 | /usr/share/nginx/html/upload/config/ |
| Discuz 全局配置 | /usr/share/nginx/html/upload/config/config_global.php |
| Discuz 数据库配置 | /usr/share/nginx/html/upload/config/config_ucenter.php |
⚙️ 软件配置
| 软件 | 配置文件路径 |
|---|---|
| Nginx | /etc/nginx/nginx.conf |
| PHP | /etc/php.ini |
| PHP-FPM | /etc/php-fpm.d/www.conf |
| MySQL | /etc/my.cnf |
| Redis | /etc/redis.conf |
📋 日志文件
| 软件 | 日志路径 |
|---|---|
| Nginx 错误日志 | /var/log/nginx/error.log |
| Nginx 访问日志 | /var/log/nginx/access.log |
| MySQL 日志 | /var/log/mysqld.log |
| PHP-FPM 日志 | /var/log/php-fpm/ |
| Redis 日志 | /var/log/redis/redis.log |
附录 C:服务端口速查
| 服务 | 默认端口 | 说明 |
|---|---|---|
| HTTP | 80 | 网页访问端口 |
| HTTPS | 443 | 加密网页端口 |
| MySQL | 3306 | 数据库端口 |
| Redis | 6379 | 缓存端口 |
| SSH | 22 | 远程连接端口 |
附录 D:技术名词解释
💻 系统相关
| 名词 | 解释 |
|---|---|
| Linux | 一种开源操作系统,稳定安全,常用于服务器 |
| Shell | 命令行解释器,让用户与系统交互 |
| SSH | 加密的远程连接协议,安全远程控制电脑 |
| root | Linux系统的超级管理员,拥有最高权限 |
🌐 网站相关
| 名词 | 解释 |
|---|---|
| Web服务器 | 响应网页请求的程序,Nginx/Apache |
| 数据库 | 存储和管理数据的软件,类似Excel但更强大 |
| 缓存 | 临时存储常用数据,加速访问 |
| IP | 网络地址,每台电脑的唯一标识 |
| 端口 | 电脑上的"门牌号",不同服务开不同的门 |
| 域名 | 网站的"名字",如 example.com |
🐘 PHP相关
| 名词 | 解释 |
|---|---|
| PHP | 一种网页编程语言 |
| PHP-FPM | PHP的进程管理器,提高处理效率 |
| 扩展 | 给PHP添加额外功能的插件 |
| phpinfo() | 显示PHP所有配置的函数 |
📦 软件相关
| 名词 | 解释 |
|---|---|
| Nginx | 高性能Web服务器,特点是高并发低内存 |
| MySQL | 流行的开源关系型数据库 |
| Redis | 内存数据库,常用于缓存 |
| Discuz | 著名的开源论坛系统 |
附录 E:Discuz 目录结构说明
upload/ # Discuz程序根目录
├── admin.php # 后台管理入口
├── api.php # API接口文件
├── api/ # API扩展目录
├── archiver/ # 论坛Archiver(纯文本版)
├── connect.php # QQ互联入口
├── crossdomain.xml # Flash跨域配置文件
├── favicon.ico # 网站图标
├── forum.php # 论坛首页入口
├── group.php # 群组入口
├── home.php # 空间/个人主页入口
├── index.php # 网站首页
├── member.php # 会员入口
├── portal.php # 门户入口
├── search.php # 搜索入口
├── static/ # 静态资源目录(CSS/JS/图片)
├── template/ # 模板目录
├── uc_server/ # UCenter用户中心
├── config/ # 配置文件目录
│ ├── config_global.php # 全局配置文件
│ └── config_ucenter.php # UCenter配置文件
├── data/ # 数据目录(缓存、上传文件等)
│ ├── avatar/ # 用户头像
│ ├── cache/ # 系统缓存
│ └── plugindata/ # 插件数据
└── install/ # 安装目录(安装后建议删除)
附录 F:Discuz 常用链接
| 页面 | 地址 | 说明 |
|---|---|---|
| 论坛首页 | /upload/ | 论坛主页 |
| 论坛后台 | /upload/admin.php | 管理员控制台 |
| 用户注册 | /upload/member.php?mod=register | 新用户注册 |
| 用户登录 | /upload/member.php?mod=logging&action=login | 用户登录 |
附录 G:一键部署脚本
🎯 目标:用脚本自动完成 LNMP 环境的安装和 Discuz 论坛的部署。
💡 适合场景:新服务器快速部署,无需手动一步步执行命令。
脚本一:LNMP 环境一键部署脚本
📝 脚本内容
bash
#!/bin/bash
#===============================================================================
# 脚本名称:deploy_lnmp.sh
# 脚本功能:一键部署 LNMP + Redis 环境(测试环境)
# 适用系统:openEuler 24.03
# 使用方法:
# chmod +x deploy_lnmp.sh && ./deploy_lnmp.sh
#===============================================================================
set -e # 遇到错误立即停止
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 打印函数
print_step() {
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} $1${NC}"
echo -e "${GREEN}========================================${NC}"
}
print_info() {
echo -e "${YELLOW}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 开始
clear
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ ║"
echo "║ LNMP + Redis 一键部署脚本(测试环境) ║"
echo "║ ║"
echo "║ 适用于 openEuler 24.03 ║"
echo "║ ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""
# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
print_error "请使用 root 用户运行此脚本!"
exit 1
fi
# 获取服务器 IP
SERVER_IP=$(hostname -I | awk '{print $1}')
print_info "检测到服务器 IP: $SERVER_IP"
#===============================================================================
# 第一步:设置主机名
#===============================================================================
print_step "第一步:设置主机名"
hostnamectl set-hostname lnmp
print_success "主机名已设置为: lnmp"
#===============================================================================
# 第二步:安装软件包
#===============================================================================
print_step "第二步:安装 LNMP 软件包"
print_info "正在安装软件包,请耐心等待..."
yum install -y \
lrzsz \
mysql-server \
nginx \
redis \
php \
php-fpm \
php-mysqlnd \
php-xml \
php-gd \
php-mbstring \
php-json \
wget \
unzip
print_success "软件包安装完成!"
# 显示版本信息
echo ""
print_info "已安装软件版本:"
echo " - Nginx: $(nginx -v 2>&1 | cut -d'/' -f2)"
echo " - PHP: $(php -v | head -1 | cut -d' ' -f2)"
echo " - MySQL: $(mysql --version | awk '{print $5}' | tr -d ',')"
echo " - Redis: $(redis-server --version | awk '{print $3}' | cut -d'=' -f2)"
#===============================================================================
# 第三步:启动所有服务
#===============================================================================
print_step "第三步:启动所有服务"
systemctl start nginx
print_success "Nginx 已启动"
systemctl start php-fpm
print_success "PHP-FPM 已启动"
systemctl start mysqld
print_success "MySQL 已启动"
systemctl start redis
print_success "Redis 已启动"
# 设置开机自启
systemctl enable nginx php-fpm mysqld redis 2>/dev/null
print_info "已设置服务开机自启"
#===============================================================================
# 第四步:创建测试页面
#===============================================================================
print_step "第四步:创建 PHP 测试页面"
# 清空网站目录
rm -rf /usr/share/nginx/html/*
# 创建 PHP 信息页
cat > /usr/share/nginx/html/index.php << 'EOF'
<?php
phpinfo();
?>
EOF
# 创建 MySQL 连接测试页
cat > /usr/share/nginx/html/mysql_con.php << 'EOF'
<?php
$conn = new mysqli("localhost", "root", "");
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "MySQL 连接成功!<br>版本: " . mysqli_get_server_info($conn);
?>
EOF
print_success "测试页面创建完成!"
print_info " - PHP 信息页: /usr/share/nginx/html/index.php"
print_info " - MySQL 测试页: /usr/share/nginx/html/mysql_con.php"
#===============================================================================
# 第五步:配置 Redis
#===============================================================================
print_step "第五步:配置 Redis"
# 备份原配置
cp /etc/redis.conf /etc/redis.conf.bak
# 修改配置
sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis.conf
# 重启 Redis
systemctl restart redis
print_success "Redis 配置完成!"
print_info " - protected-mode: no"
print_info " - 配置已备份到: /etc/redis.conf.bak"
#===============================================================================
# 第六步:安装 PHP Redis 扩展
#===============================================================================
print_step "第六步:安装 PHP Redis 扩展"
print_info "正在安装编译工具..."
yum install -y php-devel php-pear gcc make > /dev/null 2>&1
print_info "正在编译安装 Redis 扩展(需要 1-3 分钟)..."
yes "" | pecl install redis > /dev/null 2>&1
# 启用扩展
echo "extension=redis.so" >> /etc/php.ini
# 重启 PHP-FPM
systemctl restart php-fpm
print_success "PHP Redis 扩展安装完成!"
#===============================================================================
# 验证部署结果
#===============================================================================
print_step "验证部署结果"
# 检查服务状态
echo ""
print_info "服务状态检查:"
services=("nginx" "php-fpm" "mysqld" "redis")
all_ok=true
for svc in "${services[@]}"; do
if systemctl is-active --quiet $svc; then
echo " ✅ $svc: 运行中"
else
echo " ❌ $svc: 未运行"
all_ok=false
fi
done
# 检查 Redis 连接
echo ""
print_info "Redis 连接测试:"
if redis-cli ping | grep -q "PONG"; then
echo " ✅ Redis 连接正常 (PONG)"
else
echo " ❌ Redis 连接失败"
all_ok=false
fi
# 检查 PHP Redis 扩展
echo ""
print_info "PHP Redis 扩展检查:"
if php -m | grep -q "redis"; then
echo " ✅ PHP Redis 扩展已加载"
else
echo " ❌ PHP Redis 扩展未加载"
all_ok=false
fi
#===============================================================================
# 完成
#===============================================================================
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ ║"
if [ "$all_ok" = true ]; then
echo "║ ✅ LNMP 环境部署成功! ║"
else
echo "║ ⚠️ 部署完成,部分检查未通过 ║"
fi
echo "║ ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""
echo "📋 验证命令:"
echo " systemctl status nginx php-fpm mysqld redis"
echo " redis-cli ping"
echo " php -m | grep redis"
echo ""
echo "🌐 访问地址:"
echo " http://${SERVER_IP}/index.php"
echo " http://${SERVER_IP}/mysql_con.php"
echo ""
echo "📁 网站目录:"
echo " /usr/share/nginx/html/"
echo ""
echo "⚠️ 下一步 - 部署 Discuz:"
echo " 方法一:手动上传"
echo " 1. 上传 upload.zip 到 /usr/share/nginx/html/"
echo " 2. 执行: unzip upload.zip"
echo " 3. 执行: chown apache:apache upload/ -R"
echo " 4. 访问: http://${SERVER_IP}/upload/install/"
echo ""
echo " 方法二:使用完整部署脚本"
echo " 运行: ./deploy_discuz_full.sh"
echo ""
脚本二:Discuz 完整一键部署脚本(包含 Discuz 安装)
📝 脚本内容
bash
#!/bin/bash
#===============================================================================
# 脚本名称:deploy_discuz_full.sh
# 脚本功能:一键部署 LNMP + Redis + Discuz 论坛(完整版)
# 适用系统:openEuler 24.03
# 使用方法:
# chmod +x deploy_discuz_full.sh && ./deploy_discuz_full.sh
#
# 注意事项:
# - 此脚本会自动下载 Discuz X3.5 安装包
# - 如需安装 Discuz 5.0,请修改 DOWNLOAD_URL 变量
#===============================================================================
set -e # 遇到错误立即停止
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 打印函数
print_step() {
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} $1${NC}"
echo -e "${GREEN}========================================${NC}"
}
print_info() {
echo -e "${YELLOW}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 配置变量(可自定义)
DISCUZ_VERSION="X3.5"
DOWNLOAD_URL="https://download.comsenz.com/DiscuzX/Discuz_X3.5_SC_UTF8.zip"
WEB_ROOT="/usr/share/nginx/html"
DISCUZ_DIR="$WEB_ROOT/upload"
DB_NAME="cz"
DB_USER="root"
DB_PASS=""
#===============================================================================
# 开始
#===============================================================================
clear
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ ║"
echo "║ LNMP + Redis + Discuz 一键部署脚本(完整版) ║"
echo "║ ║"
echo "║ 适用于 openEuler 24.03 测试环境 ║"
echo "║ ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""
# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
print_error "请使用 root 用户运行此脚本!"
exit 1
fi
# 获取服务器 IP
SERVER_IP=$(hostname -I | awk '{print $1}')
print_info "检测到服务器 IP: $SERVER_IP"
#===============================================================================
# 第一步:设置主机名
#===============================================================================
print_step "第一步:设置主机名"
hostnamectl set-hostname lnmp
print_success "主机名已设置为: lnmp"
#===============================================================================
# 第二步:安装软件包
#===============================================================================
print_step "第二步:安装 LNMP 软件包"
print_info "正在安装软件包..."
yum install -y \
lrzsz \
mysql-server \
nginx \
redis \
php \
php-fpm \
php-mysqlnd \
php-xml \
php-gd \
php-mbstring \
php-json \
wget \
unzip \
php-devel \
php-pear \
gcc \
make
print_success "软件包安装完成!"
#===============================================================================
# 第三步:启动所有服务
#===============================================================================
print_step "第三步:启动所有服务"
systemctl start nginx php-fpm mysqld redis
systemctl enable nginx php-fpm mysqld redis 2>/dev/null
print_success "所有服务已启动并设置开机自启"
#===============================================================================
# 第四步:配置 Redis
#===============================================================================
print_step "第四步:配置 Redis"
cp /etc/redis.conf /etc/redis.conf.bak
sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis.conf
systemctl restart redis
print_success "Redis 配置完成"
#===============================================================================
# 第五步:安装 PHP Redis 扩展
#===============================================================================
print_step "第五步:安装 PHP Redis 扩展"
print_info "正在编译安装 Redis 扩展(需要 1-3 分钟)..."
yes "" | pecl install redis > /dev/null 2>&1
echo "extension=redis.so" >> /etc/php.ini
systemctl restart php-fpm
print_success "PHP Redis 扩展安装完成"
#===============================================================================
# 第六步:下载并部署 Discuz
#===============================================================================
print_step "第六步:下载 Discuz $DISCUZ_VERSION"
cd $WEB_ROOT
# 清空网站目录
print_info "清空网站目录..."
rm -rf *
# 下载 Discuz
print_info "正在下载 Discuz $DISCUZ_VERSION 安装包..."
if wget -q "$DOWNLOAD_URL" -O discuz.zip; then
print_success "Discuz 安装包下载完成"
else
print_error "下载失败!请检查网络或手动上传安装包"
print_info "手动上传方法:"
print_info " 1. 下载地址: https://www.discuz.vip/download"
print_info " 2. 上传到: $WEB_ROOT"
print_info " 3. 解压: unzip discuz.zip"
exit 1
fi
# 解压
print_info "正在解压安装包..."
unzip -q discuz.zip
rm -f discuz.zip
print_success "Discuz 文件解压完成"
#===============================================================================
# 第七步:设置权限
#===============================================================================
print_step "第七步:设置文件权限"
# 查找 PHP-FPM 运行用户
PHP_USER=$(ps aux | grep "php-fpm: pool" | grep -v grep | awk '{print $1}' | head -1)
if [ -z "$PHP_USER" ]; then
PHP_USER="apache"
fi
print_info "PHP-FPM 运行用户: $PHP_USER"
# 设置权限
chown $PHP_USER:$PHP_USER $DISCUZ_DIR -R
find $DISCUZ_DIR -type d -exec chmod 755 {} \;
find $DISCUZ_DIR -type f -exec chmod 644 {} \;
print_success "文件权限设置完成"
#===============================================================================
# 第八步:创建测试页面
#===============================================================================
print_step "第八步:创建测试页面"
# 创建 PHP 信息页
cat > $WEB_ROOT/index.php << 'EOF'
<?php
phpinfo();
?>
EOF
# 创建 MySQL 测试页
cat > $WEB_ROOT/mysql_con.php << 'EOF'
<?php
$conn = new mysqli("localhost", "root", "");
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "MySQL 连接成功!<br>版本: " . mysqli_get_server_info($conn);
?>
EOF
print_success "测试页面创建完成"
#===============================================================================
# 第九步:配置 Discuz Redis
#===============================================================================
print_step "第九步:配置 Discuz Redis 连接"
# 创建配置文件(如果不存在)
if [ ! -f "$DISCUZ_DIR/config/config_global.php" ]; then
# 复制默认配置
if [ -f "$DISCUZ_DIR/config/config_global_default.php" ]; then
cp $DISCUZ_DIR/config/config_global_default.php $DISCUZ_DIR/config/config_global.php
fi
fi
# 如果配置文件存在,添加 Redis 配置
if [ -f "$DISCUZ_DIR/config/config_global.php" ]; then
# 备份原配置
cp $DISCUZ_DIR/config/config_global.php $DISCUZ_DIR/config/config_global.php.bak
# 添加 Redis 配置(在文件末尾添加)
cat >> $DISCUZ_DIR/config/config_global.php << 'REDIS_CONFIG'
// Redis 缓存配置
$_config['memory']['redis']['server'] = '127.0.0.1';
$_config['memory']['redis']['port'] = 6379;
$_config['memory']['redis']['pconnect'] = 0;
$_config['memory']['redis']['timeout'] = 1;
$_config['memory']['redis']['password'] = '';
$_config['memory']['redis']['serializer'] = 1;
$_config['memory']['driver'] = 'redis';
REDIS_CONFIG
chown $PHP_USER:$PHP_USER $DISCUZ_DIR/config/config_global.php
print_success "Discuz Redis 配置完成"
fi
#===============================================================================
# 验证
#===============================================================================
print_step "验证部署结果"
all_ok=true
# 检查服务
echo ""
print_info "服务状态:"
for svc in nginx php-fpm mysqld redis; do
if systemctl is-active --quiet $svc; then
echo " ✅ $svc: 运行中"
else
echo " ❌ $svc: 未运行"
all_ok=false
fi
done
# 检查 Redis
echo ""
print_info "Redis 测试:"
if redis-cli ping | grep -q "PONG"; then
echo " ✅ Redis 连接正常"
else
echo " ❌ Redis 连接失败"
all_ok=false
fi
# 检查 PHP 扩展
echo ""
print_info "PHP 扩展:"
if php -m | grep -q "redis"; then
echo " ✅ PHP Redis 扩展已加载"
else
echo " ❌ PHP Redis 扩展未加载"
all_ok=false
fi
# 检查 Discuz 文件
echo ""
print_info "Discuz 文件:"
if [ -f "$DISCUZ_DIR/index.php" ]; then
echo " ✅ Discuz 文件已部署"
else
echo " ❌ Discuz 文件未找到"
all_ok=false
fi
#===============================================================================
# 完成
#===============================================================================
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ ║"
if [ "$all_ok" = true ]; then
echo "║ ✅ Discuz 论坛部署成功! ║"
else
echo "║ ⚠️ 部署完成,部分检查未通过 ║"
fi
echo "║ ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""
echo "🌐 访问地址:"
echo ""
echo " 测试页面:"
echo " - PHP 信息: http://${SERVER_IP}/index.php"
echo " - MySQL 测试: http://${SERVER_IP}/mysql_con.php"
echo ""
echo " Discuz 论坛:"
echo " - 安装向导: http://${SERVER_IP}/upload/install/"
echo " - 论坛首页: http://${SERVER_IP}/upload/"
echo " - 管理后台: http://${SERVER_IP}/upload/admin.php"
echo ""
echo "📋 安装向导填写参考:"
echo ""
echo " 数据库配置:"
echo " - 数据库服务器:localhost"
echo " - 数据库端口: 3306"
echo " - 数据库名: $DB_NAME(建议填写)"
echo " - 数据库用户: root"
echo " - 数据库密码: (留空)"
echo " - 表前缀: pre_"
echo ""
echo "📁 重要文件路径:"
echo " - 网站目录: $WEB_ROOT"
echo " - Discuz 目录: $DISCUZ_DIR"
echo " - 配置文件: $DISCUZ_DIR/config/config_global.php"
echo ""
echo "🔧 常用命令:"
echo " - 启动服务: systemctl start nginx php-fpm mysqld redis"
echo " - 重启服务: systemctl restart nginx php-fpm mysqld redis"
echo " - 查看状态: systemctl status nginx php-fpm mysqld redis"
echo " - 测试 Redis: redis-cli ping"
echo " - 查看 Redis: redis-cli keys '*'"
echo ""
echo "⚠️ 安装完成后,建议删除 install 目录:"
echo " rm -rf $DISCUZ_DIR/install/"
echo ""
使用方法
方法一:在线下载脚本
bash
# 下载 LNMP 环境部署脚本
wget https://your-server/deploy_lnmp.sh
chmod +x deploy_lnmp.sh
./deploy_lnmp.sh
# 或下载完整部署脚本
wget https://your-server/deploy_discuz_full.sh
chmod +x deploy_discuz_full.sh
./deploy_discuz_full.sh
方法二:手动创建脚本
bash
# 创建脚本文件
vim deploy_discuz_full.sh
# 粘贴上面的脚本内容,保存退出
# 添加执行权限
chmod +x deploy_discuz_full.sh
# 执行脚本
./deploy_discuz_full.sh
# 执行完成后刷新 shell
bash
方法三:一行命令执行
bash
# 直接复制粘贴执行(完整部署)
bash -c "$(curl -fsSL https://your-server/deploy_discuz_full.sh)"
📋 脚本执行流程对比
| 步骤 | deploy_lnmp.sh | deploy_discuz_full.sh |
|---|---|---|
| 设置主机名 | ✅ | ✅ |
| 安装 LNMP | ✅ | ✅ |
| 启动服务 | ✅ | ✅ |
| 配置 Redis | ✅ | ✅ |
| 安装 Redis 扩展 | ✅ | ✅ |
| 创建测试页 | ✅ | ✅ |
| 下载 Discuz | ❌ | ✅ |
| 解压部署 | ❌ | ✅ |
| 设置权限 | ❌ | ✅ |
| 配置 Discuz Redis | ❌ | ✅ |
| 执行时间 | 约 5-8 分钟 | 约 8-15 分钟 |
📝 文档信息
| 项目 | 内容 |
|---|---|
| 文档类型 | 小白详细版部署指南 |
| 操作系统 | openEuler 24.03 |
| 论坛系统 | Discuz! X 5.0 |
| 核心技术 | LNMP + Redis |
| 目标读者 | 零基础用户 |
| 最后更新 | 2026年4月 |
🎉 恭喜你完成了 Discuz 论坛的部署!
如果遇到问题,请参考"第八章:最终验证"中的排查指南。
祝你玩得开心!