这个RHCSA结课综合作业的核心目标是在RHEL9系统上搭建一个完整的Discuz论坛系统。作为一名有多年Linux运维经验的工程师,我认为这个项目很好地涵盖了Linux系统管理、Web服务配置和数据库操作等核心运维技能点。
整个项目采用经典的LNMP架构(Linux+Nginx+MariaDB+PHP),这也是目前中小型网站最常用的技术栈之一。选择这套方案主要基于以下几点考虑:首先,Nginx的高并发性能能够很好地支撑论坛类应用;其次,MariaDB作为MySQL的分支完全兼容且开源免费;最后,PHP是Discuz官方推荐的运行环境。这种组合在资源占用、性能表现和社区支持方面都达到了很好的平衡。
在开始部署前,我们需要对RHEL9系统进行一些基础配置。这些步骤看似简单,但往往决定了后续部署的顺利程度:
关闭安全软件:在测试环境中,我们可以暂时关闭SELinux和firewalld以避免权限问题。生产环境则需要更精细的配置。
bash复制setenforce 0
systemctl stop firewalld
systemctl disable firewalld
修改主机名:给服务器设置一个有意义的主机名有助于后续管理。
bash复制hostnamectl set-hostname discuz-server
配置本地yum源:由于RHEL需要订阅才能使用官方源,我们可以配置本地光盘作为安装源。编辑/etc/yum.repos.d/local.repo文件:
ini复制[local]
name=Local DVD Repo
baseurl=file:///mnt
enabled=1
gpgcheck=0
挂载光盘后执行:
bash复制yum clean all
yum makecache
提示:制作系统快照是个好习惯,特别是在进行重大配置变更前。在虚拟化环境中可以使用
virsh snapshot-create命令,物理服务器则建议使用LVM快照。
Discuz的安装包需要从官网下载最新版本。截至本文写作时,X3.5是最新的稳定版。下载后解压会得到一个包含upload目录的压缩包,这个目录就是我们需要部署到服务器的论坛程序。
在Windows上下载后,可以使用Xftp等工具将upload目录传输到Linux服务器的根目录下。这里有个细节需要注意:必须确保传输模式是二进制模式,否则可能导致PHP文件损坏。
LNMP环境的安装顺序很重要,建议按照Nginx→PHP→MariaDB的顺序进行:
Nginx安装:
bash复制yum install nginx -y
systemctl start nginx
systemctl enable nginx
PHP安装:
bash复制yum install php php-fpm php-mysqlnd -y
systemctl start php-fpm
systemctl enable php-fpm
MariaDB安装:
bash复制yum install mariadb-server mariadb -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
MariaDB安装后需要进行安全初始化,并创建Discuz需要的数据库和用户:
sql复制CREATE DATABASE discuz DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON discuz.* TO 'discuzuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
FLUSH PRIVILEGES;
注意:生产环境中务必使用强密码,并考虑将数据库服务与Web服务分离部署。
将upload目录移动到web根目录后,需要设置正确的权限:
bash复制mv upload /usr/share/nginx/html/discuz
chown -R nginx:nginx /usr/share/nginx/html/discuz
find /usr/share/nginx/html/discuz -type d -exec chmod 755 {} \;
find /usr/share/nginx/html/discuz -type f -exec chmod 644 {} \;
编辑/etc/nginx/conf.d/discuz.conf文件,添加以下内容:
nginx复制server {
listen 80;
server_name your_domain_or_ip;
root /usr/share/nginx/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;
}
}
测试配置并重启Nginx:
bash复制nginx -t
systemctl restart nginx
通过浏览器访问服务器IP地址,将进入Discuz的安装界面。安装过程中有几个关键点需要注意:
在实际部署中,可能会遇到以下典型问题:
502 Bad Gateway错误:
systemctl status php-fpm数据库连接失败:
netstat -tulnp | grep 3306SHOW GRANTS FOR 'discuzuser'@'localhost'文件上传失败:
验证码不显示:
yum install php-gd -y完成基础安装后,可以考虑以下优化措施:
Nginx调优:
PHP优化:
MariaDB优化:
Discuz缓存:
这个项目虽然是一个结课作业,但完整覆盖了从系统配置到应用部署的整个运维工作流程。在实际操作中,我发现最常出问题的环节是文件权限和SELinux配置,建议新手特别关注这两个方面。另外,在生产环境部署时,一定要做好安全加固,包括但不限于:修改默认端口、配置SSL证书、设置定期备份等。