在 CentOS 和 Ubuntu 上部署代码,核心的部署流程是相似的(比如上传代码、安装依赖、启动服务),但由于两个系统在包管理器、系统服务管理、默认软件版本、安全策略和文件路径等方面的差异,具体操作上会有一些区别。下面从几个关键方面进行对比说明:
1. 包管理器不同
| 功能 | CentOS(RHEL 系) | Ubuntu(Debian 系) |
|---|---|---|
| 包管理工具 | yum 或 dnf(CentOS 8+ 推荐 dnf) |
apt / apt-get |
| 安装软件示例 | sudo yum install nginx 或 sudo dnf install nginx |
sudo apt install nginx |
| 更新软件源 | yum update |
apt update && apt upgrade |
✅ 建议:使用对应的命令安装依赖(如 Python、Node.js、数据库等)
2. 系统服务管理(systemd)
虽然两者都使用 systemd,但服务名称或配置路径可能略有不同。
# 启动 Nginx(通常一致)
sudo systemctl start nginx
sudo systemctl enable nginx
但某些软件包在不同发行版中服务名不同,例如:
- MariaDB 在 CentOS 中可能是
mariadb,Ubuntu 中可能是mariadb-server - PostgreSQL 版本和服务名可能带版本号(如
postgresql@14-main)
3. 默认软件版本差异
-
Python:
- CentOS 7 默认是 Python 2.7,需手动升级到 Python 3(通过 SCL 或编译安装)
- Ubuntu 通常预装 Python 3,且更容易通过
apt安装最新版
-
Node.js / Java / Ruby 等运行时:
两者的仓库版本可能较旧,建议:- 使用官方源或 NodeSource、nvm、SDKMAN! 等工具安装新版
4. 防火墙配置
| 系统 | 默认防火墙工具 |
|---|---|
| CentOS | firewalld |
| Ubuntu | ufw(有时未启用) |
# CentOS 开放端口
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
# Ubuntu 使用 ufw
sudo ufw allow 8080
sudo ufw enable
5. 文件路径和权限习惯
- 日志目录一般都在
/var/log/ - Web 根目录常见为
/var/www/html(Nginx/Apache) - 但配置文件路径可能略有差异:
- Nginx 配置:通常都是
/etc/nginx/nginx.conf - 用户家目录、SELinux 等有区别(见下条)
- Nginx 配置:通常都是
6. SELinux vs AppArmor
-
CentOS/RHEL 默认启用 SELinux,可能导致服务无法访问文件或端口,需要调整上下文或策略。
# 例如允许 Nginx 访问自定义目录 sudo setsebool -P httpd_can_network_connect 1 -
Ubuntu 使用 AppArmor,默认规则较宽松,通常不影响部署,除非自定义配置。
⚠️ SELinux 是 CentOS 部署中常见的“坑”,而 Ubuntu 一般无需处理。
7. 用户与权限管理
基本一致,但创建部署用户的方式相同:
sudo adduser deploy
sudo usermod -aG wheel deploy # CentOS 加入管理员组
sudo usermod -aG sudo deploy # Ubuntu 加入 sudo 组
8. 第三方软件源添加方式不同
例如安装 Node.js:
-
Ubuntu(使用 NodeSource):
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs -
CentOS:
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo dnf install -y nodejs
总结:是否有本质区别?
| 方面 | 是否有区别 | 说明 |
|---|---|---|
| 部署逻辑 | ❌ 无 | 传代码 → 装依赖 → 配置服务 → 启动 |
| 包管理命令 | ✅ 有 | yum/dnf vs apt |
| 服务管理 | ❌ 基本无 | 都用 systemctl |
| 防火墙 | ✅ 有 | firewalld vs ufw |
| 安全模块 | ✅ 有 | SELinux(CentOS)较严格 |
| 软件版本 | ✅ 有 | 默认仓库版本不同 |
| 路径习惯 | ❌ 基本一致 | 遵循 FHS 标准 |
实践建议
- 使用自动化脚本或配置管理工具(如 Ansible、Docker、Shell 脚本)来屏蔽差异。
- 优先使用容器化部署(Docker),避免系统差异影响。
- 若必须直接部署,编写适配不同系统的初始化脚本。
- 注意 SELinux 和防火墙配置,尤其是生产环境。
✅ 结论:
部署代码的思路和流程没有本质区别,但在具体命令、权限控制和依赖安装方式上有细节差异。了解这些差异后,可以轻松在 CentOS 和 Ubuntu 上完成部署。
CLOUD云计算