使用CentOS Stream搭建LNMP或LAMP环境需要注意什么?

在 CentOS Stream 上搭建 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)或 LAMP(Apache + MySQL/MariaDB + PHP)环境时,除了常规的组件安装步骤外,还需特别关注该发行版的滚动更新特性包管理策略以及安全基线。以下是关键注意事项:


🔹 一、CentOS Stream 的特殊性

  • 非传统稳定版:CentOS Stream 是 RHEL 的“上游”滚动测试平台,不承诺长期稳定性(无 LTS),适合开发/测试环境,不建议用于生产核心业务系统
  • 软件版本较新:Nginx、PHP、MySQL 等组件版本通常比 CentOS 7/8 EOL 后的替代方案(如 Rocky/AlmaLinux)更新,需验证兼容性。
  • 频繁更新风险dnf update 可能引入破坏性变更(如 PHP 8.2 → 8.3 升级导致代码不兼容),建议:
    • 在生产前充分测试;
    • 使用 dnf historysystemd 快照(配合 snapper)做回滚准备;
    • 考虑锁定关键包版本(见下文)。

🔹 二、LNMP vs LAMP 选型建议

维度 LNMP(推荐优先) LAMP
性能 Nginx 高并发更优,适合 API/静态资源站 Apache .htaccess 灵活但内存占用高
配置复杂度 相对简洁,虚拟主机配置集中 模块化多,.htaccess 易误配
PHP-FPM 支持 原生集成好,动态扩展快 需额外配置 mod_php 或 FPM
CentOS Stream 适配 ✅ 官方 repo 及 IUS/EPEL 支持完善 ⚠️ Apache 模块在 Stream 中偶有滞后

💡 建议:新项目首选 LNMP;若必须用 .htaccess 重写规则或遗留系统依赖 Apache 模块,再选 LAMP。


🔹 三、关键注意事项

1️⃣ 源管理与软件选择

  • 启用 EPEL & Remi 仓库(必做):
    sudo dnf install epel-release remi-release -y
    # Remi 提供新版 PHP(含 8.1/8.2/8.3)、MariaDB 等
    sudo dnf config-manager --set-enabled remi-php82  # 按需选择版本
  • 避免混用官方源与第三方源:防止依赖冲突(如 mysql vs mariadb)。
  • MariaDB 优先于 MySQL:CentOS Stream 默认使用 MariaDB(社区友好、兼容性好),除非应用明确要求 Oracle MySQL。

2️⃣ 防火墙与安全组

# 开放必要端口(仅允许信任 IP)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=8080/tcp  # PHP-FPM 监听(若自定义)
sudo firewall-cmd --reload
  • 禁用 SSH 密码登录,改用密钥认证;
  • 限制数据库端口(3306)仅本地访问(bind-address = 127.0.0.1 in my.cnf)。

3️⃣ PHP 配置优化(LNMP/LAMP 通用)

  • 关闭危险函数php.ini):
    disable_functions = exec, system, passthru, shell_exec, proc_open, etc.
  • 调整资源限制(防 DDoS):
    max_execution_time = 30
    memory_limit = 128M
    max_input_vars = 1000
  • 启用 OPcache(显著提升性能):
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.max_accelerated_files=4000

4️⃣ Nginx/Apache 安全加固

  • 隐藏版本号
    server_tokens off;
    ServerTokens Prod
    ServerSignature Off
  • 强制 HTTPS + HSTS(Let’s Encrypt 证书 + certbot);
  • 设置安全头(如 Content-Security-Policy, X-Frame-Options);
  • 禁用目录浏览autoindex off;

5️⃣ 备份与监控

  • 定期备份:
    mysqldump -u root -p --all-databases > /backup/db_$(date +%F).sql
    tar czf /backup/www_$(date +%F).tar.gz /var/www/html
  • 监控工具推荐:
    • htop, nmon(实时资源)
    • fail2ban(防暴力破解)
    • Prometheus + Grafana(深度指标)

🔹 四、避坑指南

问题 解决方案
PHP 无法连接 MySQL 检查 pdo_mysql 是否安装;确认 socket 路径匹配(/var/lib/mysql/mysql.sock
Nginx 502 Bad Gateway 检查 PHP-FPM 进程状态:systemctl status php-fpm;日志 /var/log/php-fpm/error.log
Apache 加载失败模块 确认模块文件存在且权限正确:ls /usr/lib64/httpd/modules/*.so
SELinux 阻止服务通信 临时测试:setenforce 0;生产环境应配置策略:semanage fcontext -a ... && restorecon -Rv /path

🔹 五、替代方案建议(若追求生产级稳定)

若项目对稳定性要求高,建议迁移至:

  • Rocky Linux 9AlmaLinux 9(RHEL 下游,完全兼容,长期支持)
  • 或使用容器化方案:Docker Compose 部署 LNMP/LAMP(隔离环境,便于迁移)

需要我为你提供一份完整的 LNMP 自动化部署脚本(含安全加固)LAMP 迁移检查清单 吗?

未经允许不得转载:CLOUD技术博 » 使用CentOS Stream搭建LNMP或LAMP环境需要注意什么?