1. 项目背景与核心价值
在RHEL系统上搭建LNMP环境并部署Discuz论坛,是Linux运维工程师的经典练手项目。这个组合之所以经久不衰,是因为它完美体现了企业级应用部署的核心要素:稳定可靠的操作系统(RHEL)、高性能的Web服务架构(LNMP)、以及经过大规模验证的社区软件(Discuz)。
我最早接触这个组合是在2015年负责一个高校论坛迁移项目,当时从Windows Server+IIS环境切换到RHEL+LNMP后,服务器负载直接下降了60%。这些年帮客户部署过不下20个Discuz论坛,总结出一套高效可靠的部署方案,今天就把这些实战经验系统化地分享出来。
2. 环境准备与基础配置
2.1 RHEL系统初始化
RHEL作为红帽企业级Linux,其稳定性在业界有口皆碑。建议使用RHEL 8+版本,对新手更友好:
bash复制# 注册系统并启用必要仓库
subscription-manager register --username <你的红帽账号>
subscription-manager attach --auto
subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
重要提示:如果没有红帽订阅,可以使用CentOS Stream或Rocky Linux作为替代,命令操作基本一致。
系统基础优化包括:
- 关闭SELinux(生产环境需谨慎)
- 配置防火墙放行80/443端口
- 更新所有软件包
- 创建专用运维账户并配置sudo权限
2.2 LNMP环境搭建详解
LNMP代表Linux+Nginx+MySQL+PHP,相比传统的LAMP架构,Nginx在高并发场景下表现更优异。以下是具体安装步骤:
2.2.1 Nginx安装与调优
bash复制yum install nginx -y
systemctl enable --now nginx
关键配置位于/etc/nginx/nginx.conf,需要调整的核心参数:
- worker_processes:建议设置为CPU核心数
- worker_connections:单进程最大连接数,默认1024
- keepalive_timeout:长连接保持时间,建议65s
2.2.2 MySQL 8.0安全部署
bash复制yum install mysql-server -y
systemctl enable --now mysqld
首次安装后必须执行安全加固:
bash复制mysql_secure_installation
建议创建的数据库账户:
sql复制CREATE USER 'discuz'@'localhost' IDENTIFIED BY '复杂密码';
CREATE DATABASE discuzdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON discuzdb.* TO 'discuz'@'localhost';
FLUSH PRIVILEGES;
2.2.3 PHP-FPM优化配置
Discuz! X3.4推荐使用PHP 7.4:
bash复制yum install php php-fpm php-mysqlnd php-gd php-xml php-mbstring -y
关键配置文件/etc/php-fpm.d/www.conf需要调整:
- listen = /run/php-fpm/www.sock
- pm = dynamic
- pm.max_children = 50
- pm.start_servers = 5
- pm.min_spare_servers = 2
- pm.max_spare_servers = 8
3. Discuz论坛部署实战
3.1 源码获取与准备
推荐从Discuz官方下载最新UTF-8版本:
bash复制wget https://download.comsenz.com/DiscuzX/3.4/Discuz_X3.4_SC_UTF8.zip
unzip Discuz_X3.4_SC_UTF8.zip -d /var/www/html/discuz
chown -R nginx:nginx /var/www/html/discuz
chmod -R 755 /var/www/html/discuz
3.2 Nginx虚拟主机配置
创建专属配置文件/etc/nginx/conf.d/discuz.conf:
nginx复制server {
listen 80;
server_name yourdomain.com;
root /var/www/html/discuz/upload;
index index.php index.html;
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.3 图形化安装向导
访问http://yourdomain.com/install开始安装:
- 检查环境是否符合要求
- 设置数据库连接信息(使用之前创建的discuz账户)
- 配置管理员账号(务必使用强密码)
- 完成安装后立即删除install目录
4. 安全加固与性能优化
4.1 基础安全措施
- 文件权限控制:
bash复制chmod 644 /var/www/html/discuz/config/config_global.php
chmod 644 /var/www/html/discuz/config/config_ucenter.php
- 后台安全设置:
- 启用登录验证码
- 设置操作密码
- 限制管理员IP访问
- 定期更新机制:
bash复制# 设置自动更新
yum install yum-cron -y
systemctl enable --now yum-cron
4.2 性能调优技巧
- 开启OPcache加速:
bash复制yum install php-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
- Redis缓存加速:
bash复制yum install redis php-pecl-redis
在Discuz后台配置Redis缓存服务器
- 静态资源CDN加速:
修改config_global.php:
php复制$_config['output']['staticurl'] = 'https://cdn.yourdomain.com/static';
5. 常见问题排查指南
5.1 安装阶段问题
问题1:Nginx 502 Bad Gateway
- 检查PHP-FPM是否运行
- 确认
/run/php-fpm/www.sock存在 - 查看nginx错误日志
/var/log/nginx/error.log
问题2:数据库连接失败
- 确认MySQL服务状态
- 检查数据库用户名密码
- 验证数据库权限设置
5.2 运行阶段问题
问题1:验证码不显示
- 检查GD库是否安装
- 查看目录权限
- 修改
config_global.php中$_config['admincp']['checkip']设置
问题2:附件上传失败
- 检查
php.ini中的upload_max_filesize - 确认
attachment目录可写 - 查看PHP错误日志
/var/log/php-fpm/error.log
6. 高级扩展方案
6.1 HTTPS安全加固
使用Let's Encrypt免费证书:
bash复制yum install certbot python3-certbot-nginx
certbot --nginx -d yourdomain.com
自动续期配置:
bash复制echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" | sudo tee -a /etc/crontab > /dev/null
6.2 数据备份策略
- 数据库自动备份:
bash复制mysqldump -u discuz -p discuzdb > /backup/discuz_$(date +%Y%m%d).sql
- 文件增量备份:
bash复制rsync -avz --delete /var/www/html/discuz /backup/
- 设置定期任务:
bash复制crontab -e
# 每天凌晨3点备份
0 3 * * * /root/backup_script.sh
这套方案在我负责的多个社区项目中表现稳定,日均PV过万的论坛在2核4G配置下平均负载不到0.5。关键在于前期的基础配置要扎实,后期的维护要规范。特别是数据库优化和缓存策略,往往能带来意想不到的性能提升。
