在 CentOS 和 Ubuntu 上部署代码,虽然核心原理相同(都是 Linux 系统),但在实际操作中还是有一些区别。这些差异主要体现在:
🧩 一、系统基础差异
| 特性 | CentOS | Ubuntu |
|---|---|---|
| 发行版类型 | 基于 Red Hat Enterprise Linux (RHEL) | 基于 Debian |
| 包管理器 | yum / dnf |
apt |
| 默认 Shell | bash | bash(也支持 dash) |
| 默认服务管理工具 | systemd(现代版本) |
systemd |
| 配置文件路径 | /etc/sysconfig/ 等 |
/etc/default/ 等 |
🛠️ 二、部署流程中的常见差异
1. 安装依赖包
-
CentOS:
sudo yum install -y git python3 nginx -
Ubuntu:
sudo apt update sudo apt install -y git python3 nginx
⚠️ 注意:软件包名称可能不同,比如
python-pipvspython3-pip。
2. 服务管理方式
- CentOS & Ubuntu(都使用 systemd):
sudo systemctl start nginx sudo systemctl enable nginx sudo systemctl status nginx
如果是旧版本的 CentOS(如 CentOS 6),会用
service命令:sudo service nginx start
3. 用户权限与 SELinux/AppArmor
-
CentOS 使用 SELinux(默认启用)
- 可能限制某些目录访问或服务启动权限。
- 需要适当配置策略或关闭 SELinux。
-
Ubuntu 使用 AppArmor
- 对服务进行安全隔离,也可能影响部署行为。
- 可以通过命令临时禁用或调整规则。
4. 日志查看路径
-
CentOS:
journalctl -u nginx -
Ubuntu:
journalctl -u nginx
或者查看传统日志文件:
tail -f /var/log/nginx/error.log
5. 文件路径习惯
-
CentOS:
- 启动脚本通常放在
/etc/init.d/ - 配置文件常在
/etc/<package>/
- 启动脚本通常放在
-
Ubuntu:
- 启动脚本也在
/etc/init.d/(如果使用 SysV init) - 配置文件结构更接近 Debian 标准
- 启动脚本也在
🐍 三、Python 应用部署示例对比
CentOS:
# 安装 Python 和 pip
sudo yum install -y python3 python3-pip
# 安装项目依赖
pip3 install -r requirements.txt
# 安装 gunicorn
sudo yum install -y gcc python3-devel
pip3 install gunicorn
# 配置 systemd 服务
sudo vi /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
Ubuntu:
# 安装 Python 和 pip
sudo apt update
sudo apt install -y python3 python3-pip
# 安装项目依赖
pip3 install -r requirements.txt
# 安装 gunicorn
sudo apt install -y build-essential libpython3-dev
pip3 install gunicorn
# 配置 systemd 服务(步骤类似 CentOS)
sudo vi /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
📦 四、容器化部署(Docker)
如果你使用 Docker 部署,则基本没有区别,因为镜像已经封装好了环境。
但构建镜像时需要注意基础镜像选择:
- CentOS:
FROM centos:7 - Ubuntu:
FROM ubuntu:20.04
✅ 总结建议
| 场景 | 推荐系统 |
|---|---|
| 生产环境稳定性要求高(企业级) | CentOS 或 RHEL |
| 快速开发、测试、CI/CD 流程 | Ubuntu |
| 开源社区支持丰富程度 | Ubuntu 更广泛 |
| 包更新频率 | Ubuntu 更快,CentOS 更保守 |
📌 小贴士
- 如果你希望部署过程统一,可以考虑使用自动化工具(如 Ansible、Chef、SaltStack)来抽象系统差异。
- 编写部署脚本时注意检测系统发行版,并根据不同系统分支处理安装逻辑。
如需我帮你写一个兼容 CentOS 和 Ubuntu 的部署脚本,也可以告诉我你的语言和框架(如 Python + Flask/Django、Node.js、Java 等)。
ECLOUD博客