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

在 CentOS Stream 上搭建 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)或 LAMP(Linux + Apache + MySQL/MariaDB + PHP)环境时,由于 CentOS Stream 是 RHEL 的滚动预览版(Rolling Release),其软件包更新策略与传统的 CentOS Linux 7/8 有显著差异。以下是搭建过程中需要重点关注的几个核心方面:

1. 系统基础与安全配置

  • 防火墙管理:CentOS Stream 默认使用 firewalld。搭建 Web 服务前,务必确认已放行 HTTP (80) 和 HTTPS (443) 端口,以及数据库端口(如 3306,生产环境建议仅对特定 IP 开放)。
    firewall-cmd --permanent --add-service=http
    firewall-cmd --permanent --add-service=https
    firewall-cmd --reload
  • SELinux 状态:默认开启。虽然可以设置为 Permissive 模式以快速调试,但在生产环境中,强烈建议保持 Enforcing 模式并正确配置上下文规则(Contexts),否则可能导致 Nginx/Apache 无法读取文件、无法写入日志或无法连接数据库。
  • 时间同步:确保 chronyd 正常运行,Web 应用(尤其是 PHP 会话和 SSL 证书验证)对时间准确性非常敏感。

2. 软件源与版本选择(关键差异点)

这是 CentOS Stream 最需要注意的地方:

  • 官方源限制:CentOS Stream 的官方仓库中,PHP 和数据库的版本通常较新且更新频繁。如果你需要特定的旧版本(例如为了兼容老旧代码),直接安装官方源可能无法满足需求。
  • 推荐方案
    • LNMP/LAMP 通用库:建议使用 Remi 仓库(针对 PHP)和 EPEL 仓库。Remi 提供了多个版本的 PHP(包括 7.x, 8.x),比官方源更稳定且选择更多。
    • MariaDB vs MySQL:CentOS Stream 官方倾向于推广 MariaDB。如果你的项目强依赖 Oracle MySQL 的特定功能,可能需要手动编译或使用官方 RPM 源;否则直接使用 MariaDB 兼容性更好且维护成本更低。
  • 命令示例(添加 Remi 源):
    sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
    sudo dnf module reset php
    sudo dnf module enable php:remi-8.2 # 根据需要选择版本

3. LNMP 与 LAMP 的架构差异注意点

搭建 LNMP (Nginx)

  • 配置逻辑:Nginx 本身不处理 PHP,需配合 PHP-FPM。注意检查 php-fpm.conf 中的 listen 设置(Unix Socket 还是 TCP),并确保 Nginx 的 fastcgi_pass 指向一致。
  • 性能调优:Nginx 在高并发下表现优异,但需注意 worker_processesworker_connections 的设置,避免文件描述符耗尽。
  • 虚拟主机:Nginx 的配置通常在 /etc/nginx/conf.d/ 下,利用 server_name 实现多域名托管。

搭建 LAMP (Apache)

  • 模块加载:Apache 基于模块(Modules)。安装后需确认 mod_php 是否已启用,或者是否需要单独安装 php-fpm 并通过 proxy_fcgi 调用。
  • 权限控制:Apache 的 .htaccess 文件功能强大,但需在 httpd.conf 中将目录指令的 AllowOverride 设为 All 才能生效。
  • MPM 模式:CentOS Stream 默认可能是 eventworker MPM。对于高并发动态请求,mpm_event 通常比 prefork 更节省内存(除非你的 PHP 扩展严重依赖线程安全,如某些旧版扩展)。

4. 数据库安全与优化

  • 初始化脚本:首次安装 MySQL/MariaDB 后,必须运行 mysql_secure_installation 脚本,设置 root 密码、移除匿名用户、禁止远程 root 登录等。
  • 字符集:确保数据库、表、字段均设置为 utf8mb4,以支持 Emoji 等特殊字符,防止乱码。
  • 备份策略:Stream 版本升级可能导致配置变更,务必建立自动化的 mysqldumpmydumper 定时备份任务。

5. PHP 扩展与环境适配

  • 扩展冲突:CentOS Stream 的 PHP 版本更新快,某些第三方扩展(如 Redis, Memcached, GD)可能需要在编译时指定路径,或者直接从 EPEL/Remi 安装预编译包。
  • OPcache:务必启用 OPcache 以提升 PHP 性能。在 php.ini 中调整 opcache.memory_consumptionopcache.max_accelerated_files
  • 超时设置:根据业务需求调整 max_execution_time, memory_limit, upload_max_filesize,避免因大文件或复杂计算导致请求超时。

6. 运维与升级风险(重中之重)

  • 滚动更新风险:CentOS Stream 会频繁接收上游 RHEL 的新特性。这意味着 dnf update 可能会在不经意间将内核、PHP 或数据库升级到非预期版本,导致兼容性问题。
    • 建议:在生产环境使用前,先在测试机进行完整的升级演练。
    • 锁定版本:如果业务对版本极其敏感,可以在 dnf 配置文件中锁定特定包的版本,或者考虑切换到稳定的 Rocky Linux / AlmaLinux(它们是 RHEL 的二进制兼容克隆版,发布节奏更慢)。
  • 文档时效性:网上许多关于 "CentOS 8" 的教程已过时,因为 Stream 的包名和配置路径可能与之前的 CentOS 8 不同(例如 systemd 服务名的变化)。请务必参考当前版本的官方文档或最新的博客。

总结建议

在 CentOS Stream 上搭建环境,核心在于“选对源”和“控好版本”

  1. 优先使用 Remi 源 获取最新且稳定的 PHP 版本。
  2. 若追求极致的生产稳定性,建议在完成测试后,评估是否迁移至 Rocky Linux 9AlmaLinux 9(它们与 Stream 二进制兼容,但更新策略更保守)。
  3. 始终关注 SELinux 和防火墙配置,避免“能通但报错”的玄学问题。
未经允许不得转载:CLOUD云枢 » 使用CentOS Stream搭建LNMP或LAMP环境需要注意什么?