1. RHCSA结课项目:LNMP环境下的Discuz X3.5论坛搭建实战
作为红帽认证系统管理员(RHCSA)认证的结课项目,搭建一个完整的论坛系统不仅能全面检验Linux系统管理能力,更是对Web服务部署技能的实战演练。我选择Discuz X3.5作为论坛程序,配合LNMP(Linux+Nginx+MySQL+PHP)这一高性能Web服务架构,整个过程涉及用户权限管理、服务配置、安全加固等核心运维技能点。
在CentOS 8系统上实施时,需要特别注意SELinux上下文配置和Firewalld端口放行这两个红帽系特有的环节。相比常见的LAMP架构,LNMP方案在静态资源处理和高并发场景下表现更优,这也是我推荐使用Nginx而非Apache的主要原因。下面将详细拆解从零开始搭建论坛的完整过程,包含我在三次重装系统后总结的避坑指南。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境准备与依赖组件安装
2.1 最小化CentOS 8系统初始化
使用CentOS-8-x86_64-minimal.iso进行安装后,首先执行基础配置:
bash复制# 更新系统并安装必要工具
dnf update -y && dnf install -y vim wget curl tar unzip
# 关闭不必要的服务
systemctl disable --now postfix
# 设置主机名
hostnamectl set-hostname forum-server
注意:红帽系发行版默认启用SELinux,在测试环境可临时设置为permissive模式,但生产环境建议保持enforcing状态并正确配置安全上下文:
setenforce 0# 临时切换模式
2.2 EPEL与Remi仓库配置
为获取新版PHP和扩展,需要添加第三方仓库:
bash复制dnf install -y epel-release
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# 启用PHP7.4模块
dnf module reset php -y
dnf module enable php:remi-7.4 -y
2.3 LNMP核心组件安装
使用DNF分组安装提高效率:
bash复制dnf groupinstall -y "Development Tools"
dnf install -y nginx mariadb-server php-fpm php-mysqlnd php-gd php-mbstring php-xml
验证各组件版本:
bash复制nginx -v # 应≥1.14
mysql --version # MariaDB 10.3+
php -v # PHP 7.4+
3. 服务配置与安全加固
3.1 Nginx虚拟主机配置
创建论坛专属配置文件/etc/nginx/conf.d/forum.conf:
nginx复制server {
listen 80;
server_name forum.example.com;
root /var/www/forum;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
测试配置并重载:
bash复制nginx -t && systemctl reload nginx
3.2 MariaDB安全初始化
执行安全脚本并创建数据库:
bash复制mysql_secure_installation
mysql -u root -p <<EOF
CREATE DATABASE discuz DEFAULT CHARACTER SET utf8mb4;
GRANT ALL ON discuz.* TO 'discuz_admin'@'localhost' IDENTIFIED BY 'StrongPassword123!';
FLUSH PRIVILEGES;
EOF
3.3 PHP-FPM性能调优
编辑/etc/php-fpm.d/www.conf优化进程管理:
ini复制pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
调整后重启服务:
bash复制systemctl restart php-fpm
4. Discuz X3.5部署与配置
4.1 源码获取与权限设置
下载并解压最新版Discuz:
bash复制wget https://download.comsenz.com/DiscuzX/3.5/Discuz_X3.5_SC_UTF8.zip
unzip Discuz_X3.5_SC_UTF8.zip -d /var/www/
mv /var/www/upload /var/www/forum
chown -R nginx:nginx /var/www/forum
设置目录权限:
bash复制chmod -R 755 /var/www/forum
chmod -R 777 /var/www/forum/config /var/www/forum/data /var/www/forum/uc_server/data
4.2 网页安装向导
通过浏览器访问http://forum.example.com/install,按向导完成安装:
- 数据库配置环节使用之前创建的discuz库信息
- 管理员账户不要使用默认的admin作为用户名
- 安装完成后立即删除
/var/www/forum/install目录
4.3 后台安全设置
登录管理员后台进行关键安全配置:
- [全局]-[注册与访问控制]:启用验证码、设置注册审核
- [站长]-[UCenter设置]:修改UCenter通信密钥
- [应用]-[插件]:安装"防水墙"等安全插件
5. 防火墙与SELinux策略配置
5.1 Firewalld放行规则
bash复制firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
5.2 SELinux上下文管理
为Web目录设置正确上下文:
bash复制semanage fcontext -a -t httpd_sys_content_t "/var/www/forum(/.*)?"
restorecon -Rv /var/www/forum
允许PHP连接MySQL:
bash复制setsebool -P httpd_can_network_connect_db 1
6. 性能优化与监控
6.1 Nginx缓存配置
在/etc/nginx/nginx.conf的http块添加:
nginx复制fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=DISCUZ:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
在server块添加缓存规则:
nginx复制location ~ \.php$ {
fastcgi_cache DISCUZ;
fastcgi_cache_valid 200 301 302 10m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
add_header X-Cache $upstream_cache_status;
}
6.2 OPcache加速配置
编辑/etc/php.d/10-opcache.ini:
ini复制opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
6.3 监控方案部署
安装并配置Prometheus Node Exporter:
bash复制wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
cp node_exporter-*/node_exporter /usr/local/bin/
useradd -rs /bin/false node_exporter
创建systemd服务单元:
ini复制[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
7. 常见问题排查与解决
7.1 502 Bad Gateway错误
可能原因及解决方案:
- PHP-FPM未运行:
systemctl status php-fpm - Socket权限问题:检查
/run/php-fpm/www.sock的属组是否为nginx - 资源耗尽:调整
pm.max_children值并监控内存使用
7.2 数据库连接失败
检查步骤:
- 确认MariaDB服务状态:
systemctl status mariadb - 测试本地连接:
mysql -u discuz_admin -p - 检查SELinux布尔值:
getsebool httpd_can_network_connect_db
7.3 文件上传限制
修改PHP配置:
ini复制upload_max_filesize = 10M
post_max_size = 12M
memory_limit = 128M
重启PHP-FPM生效
8. 项目验收要点与评分标准
作为RHCSA结课项目,导师通常会从以下维度评分:
| 评分项 | 权重 | 检查点示例 |
|---|---|---|
| 系统基础配置 | 20% | 主机名、SELinux、防火墙配置 |
| 服务部署完整性 | 25% | LNMP各组件正常运行 |
| 安全加固措施 | 20% | 数据库密码强度、目录权限设置 |
| 故障排查能力 | 15% | 日志分析、常见问题解决 |
| 文档与注释质量 | 10% | 配置文件的注释说明 |
| 性能优化实施 | 10% | 缓存配置、OPcache启用 |
我在实际部署过程中发现,Discuz的UCenter组件对文件权限要求极为严格,建议在项目文档中特别注明各目录的最小权限要求。另外,Nginx的rewrite规则与Apache不同,需要特别注意Discuz的伪静态配置转换
