作为一名Linux系统管理员,掌握Web服务环境的搭建与配置是必备技能。这次RHCSA结课项目,我选择了搭建Discuz论坛作为综合实践,完整走了一遍LNMP环境部署、论坛安装和配置的全流程。这个项目不仅检验了Linux基础命令的掌握程度,更考验了对Web服务组件协同工作的理解能力。下面我就把整个实施过程拆解成可复现的详细步骤,特别会重点说明那些容易踩坑的关键环节。
提示:所有操作均在RHEL/CentOS 8系统完成,但原理适用于大多数Linux发行版
在开始部署前,需要先做好基础环境配置。关闭SELinux和防火墙是开发环境的常见做法(生产环境需谨慎):
bash复制# 临时关闭SELinux
setenforce 0
# 永久关闭(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 停止firewalld服务
systemctl stop firewalld
systemctl disable firewalld
修改主机名有助于后续服务管理,执行以下命令后需要重启生效:
bash复制hostnamectl set-hostname discuz-server
echo "127.0.0.1 discuz-server" >> /etc/hosts
网络连通性测试我习惯用ping和curl双验证:
bash复制ping -c 4 qq.com
curl -I https://qq.com
在没有外网的环境下,配置本地yum源是安装软件的关键步骤。首先挂载ISO镜像:
bash复制mkdir /mnt/cdrom
mount -o loop /path/to/rhel8.iso /mnt/cdrom
然后创建repo文件,关键是要正确指定baseurl路径:
bash复制cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=Local Repository
baseurl=file:///mnt/cdrom/AppStream
enabled=1
gpgcheck=0
[local-base]
name=Local Base Repository
baseurl=file:///mnt/cdrom/BaseOS
enabled=1
gpgcheck=0
EOF
验证源是否生效:
bash复制yum clean all
yum makecache
yum repolist
LNMP代表Linux+Nginx+MySQL+PHP,是运行Discuz的经典环境。安装时要注意组件版本兼容性:
bash复制yum install -y nginx mariadb-server php php-fpm php-mysqlnd
启动服务并设置开机自启:
bash复制systemctl enable --now nginx mariadb php-fpm
MySQL安全初始化是很多人会忽略的步骤:
bash复制mysql_secure_installation
重要:记住设置的root密码,后续数据库配置需要用到
PHP需要调整一些关键参数以满足Discuz要求:
bash复制sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 20M/g' /etc/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 20M/g' /etc/php.ini
sed -i 's/memory_limit = 128M/memory_limit = 256M/g' /etc/php.ini
systemctl restart php-fpm
为Discuz创建专用配置,注意server_name和root路径的设置:
bash复制cat > /etc/nginx/conf.d/discuz.conf <<EOF
server {
listen 80;
server_name your_domain_or_ip;
root /var/www/html/discuz;
index index.php index.html;
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:
bash复制nginx -t
systemctl reload nginx
将Discuz安装包上传到服务器后,需要特别注意文件权限:
bash复制unzip Discuz_X3.5_SC_UTF8.zip -d /var/www/html/
mv /var/www/html/upload /var/www/html/discuz
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 {} \;
为Discuz创建专用数据库和用户:
mysql复制CREATE DATABASE discuzdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'discuzuser'@'localhost' IDENTIFIED BY 'StrongPassword123';
GRANT ALL PRIVILEGES ON discuzdb.* TO 'discuzuser'@'localhost';
FLUSH PRIVILEGES;
通过浏览器访问服务器IP开始安装,有几个关键页面需要注意:
安装完成后,立即删除install目录:
bash复制rm -rf /var/www/html/discuz/install
这通常是PHP-FPM没有正常运行导致的,检查步骤:
bash复制systemctl status php-fpm
journalctl -xe
确保/etc/nginx/conf.d/discuz.conf中的fastcgi_pass地址与php-fpm监听地址一致。
如果遇到附件上传失败,需要检查:
这通常是因为GD库没有正确安装:
bash复制yum install -y php-gd
systemctl restart php-fpm
同时检查php.ini中的extension=gd.so是否已启用。
虽然我们关闭了SELinux和防火墙用于实验环境,但生产环境应该:
配置firewalld放行80端口:
bash复制firewall-cmd --permanent --add-service=http
firewall-cmd --reload
设置SELinux策略:
bash复制setsebool -P httpd_can_network_connect 1
chcon -Rt httpd_sys_content_t /var/www/html/discuz
定期更新系统和组件:
bash复制yum update -y
配置Nginx限制敏感目录访问:
nginx复制location ~* /(config|data|uc_server)/ {
deny all;
}
这个项目让我对Linux服务管理有了更深入的理解,特别是在多个服务协同工作时,排错需要系统性地检查各组件状态。建议大家在完成基础安装后,尝试实现HTTPS加密、数据库主从复制等进阶功能,这对提升RHCSA实战能力很有帮助。