在Linux环境下搭建论坛系统是每个运维工程师和Web开发者的必修课。今天我要分享的是基于RHEL9系统,使用LNMP(Linux+Nginx+MariaDB+PHP)环境搭建Discuz论坛的完整过程。这个方案不仅适用于个人学习,也可以作为企业内网论坛的部署参考。
选择LNMP环境主要基于以下考虑:
整个搭建过程可以分为四个关键阶段:
首先需要在VMware Workstation中创建新的虚拟机:
bash复制dnf update -y
提示:如果是生产环境,建议使用物理服务器或云主机,虚拟机仅适合测试和学习使用。
为了确保后续服务正常运行,需要调整以下安全设置:
bash复制# 关闭防火墙(仅测试环境)
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
配置静态IP和本地YUM源能提高安装效率:
bash复制# 修改主机名
hostnamectl set-hostname discuz-server
# 配置本地YUM源
mount /dev/sr0 /mnt
cat > /etc/yum.repos.d/local.repo <<EOF
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
gpgcheck=0
EOF
# 更新YUM缓存
yum clean all
yum makecache
网络连通性测试:
bash复制ping -c 4 www.baidu.com
如果无法连接外网,需要检查:
Discuz X3.5需要PHP 7.2及以上版本:
bash复制dnf install -y php php-fpm php-mysqlnd php-gd php-mbstring php-xml
验证PHP安装:
bash复制php -v
配置PHP-FPM:
bash复制# 修改/etc/php-fpm.d/www.conf
user = nginx
group = nginx
# 启动服务
systemctl enable --now php-fpm
安装Nginx并配置Discuz站点:
bash复制dnf install -y nginx
创建Nginx配置文件:
bash复制cat > /etc/nginx/conf.d/discuz.conf <<EOF
server {
listen 80;
server_name localhost;
root /var/www/html/discuz;
index index.php index.html index.htm;
location / {
try_files \$uri \$uri/ /index.php?\$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
注意:确保Nginx和PHP-FPM使用相同的用户运行,避免权限问题。
安装并初始化MariaDB:
bash复制dnf install -y mariadb-server mariadb
systemctl enable --now mariadb
安全设置:
bash复制mysql_secure_installation
创建Discuz数据库:
sql复制CREATE DATABASE discuz DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON discuz.* TO 'discuz'@'localhost' IDENTIFIED BY 'StrongPassword123';
FLUSH PRIVILEGES;
下载并解压Discuz安装包:
bash复制wget https://gitee.com/Discuz/DiscuzX/attach_files/2044572/download -O Discuz_X3.5_SC_UTF8.zip
unzip Discuz_X3.5_SC_UTF8.zip -d /var/www/html/
mv /var/www/html/upload /var/www/html/discuz
设置文件权限:
bash复制chown -R nginx:nginx /var/www/html/discuz
find /var/www/html/discuz -type d -exec chmod 755 {} \;
find /var/www/html/discuz -type f -exec chmod 644 {} \;
chmod -R 777 /var/www/html/discuz/data /var/www/html/discuz/uc_server/data /var/www/html/discuz/config
通过浏览器访问服务器IP开始安装:
删除安装文件:
bash复制rm -rf /var/www/html/discuz/install
调整PHP配置:
ini复制# /etc/php.ini
max_execution_time = 300
memory_limit = 256M
post_max_size = 50M
upload_max_filesize = 50M
重启服务使配置生效:
bash复制systemctl restart php-fpm nginx
可能原因及解决方法:
bash复制systemctl status php-fpm
排查步骤:
bash复制mysql -u discuz -pStrongPassword123 -h localhost
典型错误现象:
解决方法:
bash复制chmod -R 777 /var/www/html/discuz/data
chown -R nginx:nginx /var/www/html/discuz
nginx复制# /etc/nginx/nginx.conf
worker_processes auto;
worker_connections 1024;
keepalive_timeout 65;
gzip on;
ini复制# /etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
ini复制# /etc/my.cnf.d/server.cnf
[mysqld]
innodb_buffer_pool_size = 256M
query_cache_size = 64M
tmp_table_size = 64M
max_connections = 100
bash复制# 数据库备份
mysqldump -u root -p discuz > /backup/discuz_$(date +%F).sql
# 文件备份
tar czf /backup/discuz_files_$(date +%F).tar.gz /var/www/html/discuz
bash复制systemctl enable --now firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
bash复制dnf update -y
在实际部署过程中,我发现Discuz对PHP版本有一定要求,建议在安装前确认版本兼容性。另外,文件权限设置不当是最常见的问题来源,需要特别注意。对于高并发场景,可以考虑增加OPcache配置:
ini复制# /etc/php.d/10-opcache.ini
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60