在 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,这会带来严重的安全隐患,且在阿里云安全组策略之外增加了风险。
- 正确姿势:
- 保持 SELinux 为 Enforcing 模式。
- 如果 Nginx/Apache 无法访问 PHP-FPM 套接字或特定目录,使用
audit2allow生成策略并加载,而不是盲目修改上下文。 - 对于开发环境,如果只是本地调试,可以暂时设为 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 的老经验。这样不仅能减少故障排查时间,还能获得更好的稳定性和安全性。
云技术博客