从 CentOS(特别是 CentOS 7/8)切换到 Debian(通常是 Debian 10/11/12),不仅仅是操作系统的更换,更意味着软件包管理、服务管理、文件系统结构以及默认安全策略的全面转变。
以下是需要重点关注的适配工作清单,分为 核心差异对比 和 具体迁移步骤 两部分。
一、 核心差异快速对照表
| 特性 | CentOS (RHEL系) | Debian (Debian系) |
|---|---|---|
| 包管理器 | yum / dnf |
apt / apt-get |
| 软件包格式 | .rpm |
.deb |
| 服务管理 | systemctl (相同) |
systemctl (相同) |
| 防火墙 | firewalld / iptables |
ufw (推荐) 或 iptables-nft |
| SELinux | 默认启用 (Enforcing) | 默认禁用 (通常使用 AppArmor) |
| 默认 Shell | bash | bash (但配置习惯略有不同) |
| 源镜像 | CentOS Base Repo | Debian Main/Contrib/Non-free |
| PHP版本 | 较旧 (需EPEL或Remi源) | 较新 (直接 apt install) |
| Nginx/Apache | 官方源版本可能滞后 | 官方源版本更新较快 |
⚠️ 注意:CentOS 8 已停止维护,CentOS 7 于 2024 年 6 月结束生命周期。迁移到 Debian 是合理的选择,但需注意 Debian 的稳定性哲学与 RHEL 略有不同。
二、 具体适配步骤
1. 环境准备与备份
- 完整备份:在迁移前,确保有完整的系统快照、数据库备份和应用数据备份。
- 文档现有配置:记录当前运行的服务、自定义内核参数、crontab 任务、环境变量等。
- 测试环境验证:强烈建议先在虚拟机或容器中搭建相同的 Debian 环境,测试应用兼容性。
2. 软件包安装命令替换
这是最直观的变化。你需要将所有部署脚本中的包管理命令替换为 apt。
# CentOS 写法
yum install nginx php-fpm mysql-server
# Debian 写法
apt update
apt install nginx php-fpm default-mysql-server
| 常见软件包名映射参考: | 功能 | CentOS 包名 | Debian 包名 |
|---|---|---|---|
| Nginx | nginx |
nginx |
|
| Apache | httpd |
apache2 |
|
| MySQL/MariaDB | mariadb-server |
default-mysql-server 或 mariadb-server |
|
| PHP-FPM | php-fpm |
php-fpm (需指定版本如 php8.1-fpm) |
|
| Redis | redis |
redis-server |
|
| Git | git |
git |
|
| curl/wget | curl/wget |
curl/wget |
|
| 编译工具链 | gcc, make, g++ |
build-essential (一键安装所有) |
|
| Python3 | python3 |
python3 |
|
| Node.js | 通常通过 nvm 或源码安装 | 可通过 nvm 或第三方源安装 |
💡 提示:Debian 的软件包名称有时与 CentOS 不同(如 Apache 叫
apache2而非httpd)。
3. 配置文件路径调整
许多服务的配置文件路径不同:
| 服务 | CentOS 路径 | Debian 路径 |
|---|---|---|
| Nginx | /etc/nginx/ |
/etc/nginx/ (相同) |
| Apache | /etc/httpd/ |
/etc/apache2/ (不同) |
| MySQL | /etc/my.cnf 或 /etc/mysql/ |
/etc/mysql/ (不同) |
| PHP-FPM | /etc/php.ini + /etc/php.d/ |
/etc/php/8.x/fpm/php.ini (不同) |
| SSH | /etc/ssh/sshd_config |
/etc/ssh/sshd_config (相同) |
| Cron | /var/spool/cron/crontabs/root |
/var/spool/cron/crontabs/root (相同) |
适配动作:
- 修改自动化脚本(Ansible/SaltStack/Puppet)中的路径引用。
- 手动检查关键服务的配置文件权限和归属(Debian 对文件权限要求更严格)。
4. 防火墙与安全策略
- CentOS:通常使用
firewalld或iptables。 - Debian:推荐使用
ufw(Uncomplicated Firewall)或iptables-nft。
适配示例(UFW):
# 安装 UFW
apt install ufw
# 允许 HTTP/HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# 启用防火墙
ufw enable
⚠️ 重要:Debian 默认没有开启防火墙,但安全基线扫描工具可能会认为未启用防火墙是风险项。
5. SELinux vs AppArmor
- CentOS:默认启用 SELinux,需要大量上下文标签配置。
- Debian:默认禁用 SELinux,使用 AppArmor(轻量级强制访问控制)。
适配动作:
- 如果应用依赖 SELinux 策略,需在 Debian 上重新学习 AppArmor 规则编写,或选择禁用 AppArmor(不推荐生产环境)。
- 大多数 Web 应用无需额外配置即可正常运行。
6. 启动服务与自启管理
虽然都使用 systemd,但服务单元文件的位置和命名可能不同:
# 查看状态(相同)
systemctl status nginx
# 设置开机自启(相同)
systemctl enable nginx
# 重启服务(相同)
systemctl restart nginx
注意:某些自定义 systemd 服务可能需要重新编写 .service 文件以适应 Debian 的路径结构。
7. 时区与语言环境
- CentOS:默认时区通常为 UTC 或 America/New_York。
- Debian:安装过程中会询问时区,默认可能是 UTC。
适配动作:
# 设置时区为上海
timedatectl set-timezone Asia/Shanghai
# 设置语言环境为 UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
8. 用户权限与 sudo
- CentOS:
wheel组用户可使用 sudo。 - Debian:
sudo组用户可使用 sudo。
适配动作:
# 将用户加入 sudo 组
usermod -aG sudo username
9. 日志位置
- CentOS:
/var/log/messages,/var/log/secure - Debian:主要使用
journald,通过journalctl查看;传统日志位于/var/log/syslog,/var/log/auth.log
适配动作:
- 修改日志轮转(logrotate)配置。
- 更新监控告警规则(如 Prometheus/Zabbix)以匹配新的日志路径。
三、 迁移 checklist(建议顺序)
- [ ] 备份数据:数据库、网站文件、配置文件、SSL证书。
- [ ] 新建 Debian 服务器:选择稳定版本(如 Debian 12 Bookworm)。
- [ ] 安装基础软件:使用
apt安装所需服务。 - [ ] 迁移配置文件:根据路径差异调整配置文件。
- [ ] 迁移数据:导入数据库、同步文件。
- [ ] 测试功能:
- Web 页面是否正常?
- API 接口是否通畅?
- 定时任务(cron)是否执行?
- 邮件发送是否正常?
- [ ] 切换 DNS/IP:将域名指向新服务器 IP。
- [ ] 监控与告警:确认监控系统能正常采集新服务器指标。
- [ ] 旧服务器下线:观察一周无问题后,关闭旧 CentOS 服务器。
四、 常见问题与陷阱
-
PHP 版本差异:
- CentOS 7 默认 PHP 5.4,Debian 12 默认 PHP 8.2。如果你的代码依赖旧版 PHP,需要在 Debian 上使用
ondrej/phpPPA 源或手动编译旧版 PHP。
- CentOS 7 默认 PHP 5.4,Debian 12 默认 PHP 8.2。如果你的代码依赖旧版 PHP,需要在 Debian 上使用
-
MySQL 密码插件:
- Debian 新版 MySQL 默认使用
caching_sha2_password,而老版客户端可能不支持。如需兼容,可修改 MySQL 配置为mysql_native_password。
- Debian 新版 MySQL 默认使用
-
Docker 安装方式:
- CentOS 常用
yum install docker。 - Debian 推荐通过 Docker 官方仓库安装:
apt-get install docker-ce docker-ce-cli containerd.io。
- CentOS 常用
-
内核模块:
- 如果使用了非标准内核模块(如某些网卡驱动、GPU 驱动),需确保 Debian 内核包含这些模块,或使用
dkms动态构建。
- 如果使用了非标准内核模块(如某些网卡驱动、GPU 驱动),需确保 Debian 内核包含这些模块,或使用
总结
从 CentOS 切换到 Debian 的核心工作是:包管理命令替换 + 配置文件路径调整 + 防火墙策略重写。
只要做好充分测试,尤其是应用层兼容性测试,迁移过程可以非常平滑。Debian 以其稳定性和安全性著称,适合长期运行的生产环境。
CLOUD技术笔记