努力
加油

在Alibaba Cloud Linux 3环境下搭建PHP开发环境有哪些注意事项?

在 Alibaba Cloud Linux 3 (ACL3) 上搭建 PHP 开发环境,核心差异在于它默认基于 RHEL/CentOS 8 体系,且广泛采用 dnf 作为包管理器,同时内核层面做了针对云原生场景的优化。

很多从 CentOS 7 迁移过来或者习惯 Ubuntu/Debian 的开发人员,直接照搬旧教程往往会踩坑。以下是几个最关键的注意事项和最佳实践:

1. 包管理器的切换与源配置

ACL3 默认使用 dnf 而不是 yum。虽然 yum 命令通常还存在(作为 dnf 的软链接或兼容层),但建议直接使用 dnf,因为它的依赖解析更快、更准确。

  • 注意 EPEL 源:
    官方基础仓库里的 PHP 版本可能较新或较旧,取决于你选择的镜像版本。如果你需要特定版本(如 PHP 7.4 或 8.0+)或者某些扩展不在基础源中,你需要配置 EPEL 源。

    sudo dnf install epel-release
    sudo dnf update

    提示:阿里云镜像站通常提供了提速的 Epel 源配置,建议在 /etc/yum.repos.d/ 下配置国内镜像源以加快下载速度。

  • PHP 版本的获取:
    ACL3 的基础软件库中通常包含较新的 PHP 版本。如果你需要多版本共存(例如测试老项目),不要尝试从源码编译安装(除非你有特殊需求),而是推荐使用 Remi 仓库。这是业界标准的做法,比手动编译稳定得多。

    # 启用 Remi 仓库(具体版本号需根据当前最新文档调整)
    sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
    sudo dnf module list php
    sudo dnf module install php:remi-8.2 -y

2. SELinux 是“必过”关卡

这是 CentOS/RHEL 系发行版与新手的最大摩擦点。千万不要在生产环境或半生产环境中直接 setenforce 0 永久关闭 SELinux,这会带来严重的安全隐患,且在阿里云安全组策略之外增加了风险。

  • 正确姿势:
    1. 保持 SELinux 为 Enforcing 模式。
    2. 如果 Nginx/Apache 无法访问 PHP-FPM 套接字或特定目录,使用 audit2allow 生成策略并加载,而不是盲目修改上下文。
    3. 对于开发环境,如果只是本地调试,可以暂时设为 Permissive 模式排查问题,但上线前必须调回 Enforcing 并修复权限上下文。
      # 查看状态
      getenforce
      # 临时设为宽容模式(仅用于调试)
      sudo setenforce 0

3. 防火墙规则的配置

ACL3 默认开启 firewalld。很多开发者发现 PHP 服务能启动,但网络连不上,或者内网互通有问题,往往是因为防火墙没开对应端口。

  • 操作建议:
    不要只依赖阿里云控制台的安全组(Security Group)。云服务器的安全组负责入站流量过滤,而 firewalld 负责主机内部的服务端口暴露。两者需配合。

    # 开放 HTTP/HTTPS
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    # 重载配置
    sudo firewall-cmd --reload

4. PHP-FPM 与 Nginx/Apache 的用户权限

在 ACL3 上,PHP-FPM 默认运行用户通常是 apache 或 nginx(取决于你安装的 Web 服务器),而不是 www-data(Debian/Ubuntu 风格)。

  • 常见坑:
    你在代码里写文件权限时,如果按照 chown -R www-data:www-data /var/www/html 去操作,会导致权限错误,因为进程实际是以 apache 或 nginx 用户运行的。
  • 解决方案:
    检查 /etc/php-fpm.d/www.conf 中的 user 和 group 设置,确保你的 Web 根目录所有者与此一致。

5. 扩展安装的特殊性

在 RHEL/CentOS 8 体系中,PHP 扩展不再是一个个独立的 php-mysqlnd 包,而是通过 Module Streams 管理。

  • 错误做法:
    sudo dnf install php-mysqli (可能会报错说找不到这个包,或者安装了旧版)
  • 正确做法:
    先启用对应的 PHP 模块流,然后安装扩展。

    # 假设你启用了 remi-8.2 模块
    sudo dnf module enable php:remi-8.2
    sudo dnf install php-mysqli php-gd php-json php-opcache

    安装完成后,务必重启 PHP-FPM 服务使扩展生效:

    sudo systemctl restart php-fpm

6. 性能优化:启用 ZTS 和 JIT(针对高并发)

Alibaba Cloud Linux 3 的内核针对云原生场景做了调度优化,如果你的 PHP 应用是高并发的(如 Swoole、ReactPHP 等异步框架),可以考虑启用 PHP 8.0+ 的 JIT 编译器。

  • JIT 配置:
    在 php.ini 中调整:

    opcache.jit=1255
    opcache.jit_buffer_size=128M

    这能显著提升 CPU 密集型任务的性能,但需要充分测试以确保无副作用。

7. 日志路径与排查

ACL3 的日志路径遵循标准 RHEL 规范:

  • PHP-FPM 主日志:/var/log/php-fpm/error.log
  • Nginx 访问日志:/var/log/nginx/access.log
  • Apache 错误日志:/var/log/httpd/error_log

如果遇到问题,第一时间看这些日志,而不是盲目重启服务。同时,确保 systemd-journald 正在运行,可以使用 journalctl -u php-fpm 实时跟踪服务状态。

总结

在 Alibaba Cloud Linux 3 上搭建 PHP 环境,核心思路是:尊重 RHEL/CentOS 8 的生态规范(dnf, SELinux, firewalld, module streams),利用阿里云提供的优化内核特性,而不是强行套用 Debian/Ubuntu 的习惯或 CentOS 7 的老经验。这样不仅能减少故障排查时间,还能获得更好的稳定性和安全性。