CentOS 和 Ubuntu 在部署 PHP 环境时,核心差异主要体现在包管理工具、默认软件源、配置路径、服务管理方式以及版本支持策略上。虽然最终都能运行相同的 PHP 应用,但具体操作命令和文件结构会有所不同。
以下是两者在部署 PHP 环境时的主要区别对比:
1. 包管理器与安装命令
这是最直观的区别。CentOS(基于 RHEL)使用 yum 或 dnf,而 Ubuntu 使用 apt。
| 特性 | CentOS (7/8/Stream) | Ubuntu (20.04/22.04 LTS) |
|---|---|---|
| 包管理器 | yum (旧版) / dnf (新版) |
apt / apt-get |
| 更新软件源 | sudo yum makecachesudo dnf update |
sudo apt update |
| 安装 PHP | sudo yum install php php-fpm php-mysql(需先启用 EPEL 或 Remi 源) |
sudo apt install php php-fpm php-mysql |
| 安装特定扩展 | sudo yum install php-xml |
sudo apt install php-xml |
| 清理缓存 | sudo yum clean all |
sudo apt clean |
注意:CentOS 官方源中的 PHP 版本通常较老(如 CentOS 7 默认是 PHP 5.6/7.0),若需要新版 PHP,必须添加第三方源(如 Remi Repository)。Ubuntu 官方源通常包含较新的稳定版本,且支持通过 ondrej/php PPA 轻松获取最新版。
2. 配置文件位置与命名
两者的配置文件目录结构和文件名存在显著差异,这直接影响修改 Nginx/Apache 和 PHP-FPM 配置的熟练度。
| 配置项 | CentOS | Ubuntu |
|---|---|---|
| PHP 主配置 | /etc/php.ini |
/etc/php/8.x/fpm/php.ini (按版本号分目录) |
| FPM 主配置 | /etc/php-fpm.conf池配置在 /etc/php-fpm.d/www.conf |
/etc/php/8.x/fpm/pool.d/www.conf |
| Nginx 配置 | /etc/nginx/nginx.conf站点配置在 /etc/nginx/conf.d/ |
/etc/nginx/nginx.conf站点配置在 /etc/nginx/sites-available/ (软链接到 sites-enabled) |
| Apache 配置 | /etc/httpd/conf/httpd.conf模块加载在 /etc/httpd/conf.d/ |
/etc/apache2/apache2.conf模块在 /etc/apache2/mods-enabled/ |
| 日志目录 | /var/log/httpd/ (Apache)/var/log/php-fpm/ |
/var/log/apache2//var/log/php/ |
3. 服务管理与启动
虽然都遵循 Systemd 规范,但服务的名称和默认行为略有不同。
- CentOS:
- 服务名通常为
php-fpm。 - 命令:
systemctl start php-fpm,systemctl enable php-fpm。 - 状态查看:
systemctl status php-fpm。
- 服务名通常为
- Ubuntu:
- 服务名同样为
php-fpm,但在某些旧版本或特定配置下可能表现为php8.x-fpm。 - 命令逻辑一致:
systemctl start php-fpm。 - 差异点:Ubuntu 在安装 Apache 时更倾向于自动开启
a2enmod来启用模块,而 CentOS 的 Apache 更多依赖直接编辑配置文件或httpd命令。
- 服务名同样为
4. 版本管理与升级策略
- CentOS:
- 稳定性优先:官方源非常保守,长期支持(LTS)周期长,但 PHP 版本更新慢。
- 升级困难:从 PHP 7.4 升级到 8.0+ 通常需要完全切换软件源(如切换到 Remi 源),并手动处理依赖冲突。
- Docker/容器化:由于官方源限制,生产环境常直接使用 Docker 镜像来规避版本问题。
- Ubuntu:
- 版本跟进快:官方源通常紧跟 PHP 最新 LTS 版本。
- PPA 支持:可以通过
add-apt-repository ppa:ondrej/php快速安装任意版本的 PHP(如 PHP 8.3),无需更换整个系统源。 - 自动更新:
unattended-upgrades配置较为完善,能更安全地处理安全补丁。
5. 实际部署示例对比
场景:安装 PHP 8.1 + FPM + MySQL 驱动 + GD 库
CentOS 8 Stream (使用 Remi 源):
# 1. 安装 EPEL 和 Remi 源
sudo dnf install epel-release -y
sudo rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remirepo8
sudo dnf config-manager --set-enabled remi-php81
# 2. 安装组件
sudo dnf install php php-fpm php-mysqlnd php-gd php-json php-curl -y
# 3. 启动并设置开机自启
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
Ubuntu 22.04 (使用 Ondrej PPA):
# 1. 添加 Ondrej 源
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# 2. 安装组件
sudo apt install php8.1-fpm php-mysql php-gd php-json php-curl -y
# 3. 启动并设置开机自启
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
总结与建议
| 维度 | CentOS 建议 | Ubuntu 建议 |
|---|---|---|
| 适用场景 | 企业级传统架构、对稳定性要求极高且不愿频繁调整环境的场景。 | 现代 Web 开发、需要快速迭代 PHP 版本、云原生环境。 |
| 维护成本 | 较高。需手动管理第三方源,版本升级复杂。 | 较低。官方源丰富,PPA 机制灵活。 |
| 学习曲线 | 需熟悉 RPM 生态和 Remi 源配置。 | 需熟悉 APT 生态和 PPA 管理。 |
| 最佳实践 | 如果必须用 CentOS,强烈建议使用 Docker 部署 PHP,避免系统层面的版本污染。 | 可以直接利用系统包管理,也可以配合 Docker 使用,灵活性更高。 |
结论:如果你正在构建新项目且没有历史包袱,Ubuntu 通常是更友好的选择,因为其 PHP 版本更新更及时,社区文档(特别是关于新版 PHP 的配置)也更丰富。如果你处于必须维持现有 CentOS 环境的企业中,则需重点掌握 Remi 源的使用技巧或转向容器化方案。
PHPWP博客