从 CentOS 迁移到 Ubuntu,这不仅仅是换个系统名字那么简单,本质上是包管理器、文件系统习惯、服务管理方式以及底层依赖库的全面重构。很多老运维或开发者直接照搬 CentOS 的命令去操作 Ubuntu,往往会踩不少坑。
以下是基于实战经验的迁移注意事项,按优先级排序:
1. 核心思维转变:包管理器的差异
这是最直观的差异,也是新手最容易出错的地方。
- CentOS/RHEL 系:使用
yum或dnf。软件源通常比较保守,版本较旧但稳定。 - Ubuntu/Debian 系:使用
apt(或apt-get)。- 注意:不要混用。虽然
apt-get依然可用,但官方推荐统一使用apt。 - 权限问题:安装软件必须加
sudo,例如sudo apt install nginx。在 CentOS 中你可能习惯了 root 用户直接操作,但在 Ubuntu 云主机最佳实践中,务必使用普通用户 + sudo。 - 更新缓存:安装前最好先跑一下
sudo apt update和sudo apt upgrade,确保本地包索引是最新的,避免因为源不同导致的依赖冲突。
- 注意:不要混用。虽然
2. 目录结构与默认路径的变化
CentOS 和 Ubuntu 在很多服务的默认配置文件路径上存在差异,直接复制粘贴旧配置可能会报错。
- Web 服务器 (Nginx/Apache):
- CentOS 中 Nginx 配置通常在
/etc/nginx/,网站根目录多为/var/www/html。 - Ubuntu 中 Nginx 配置也在
/etc/nginx/,但网站根目录通常是/var/www/html。但是,Ubuntu 的 Apache 默认站点配置在/etc/apache2/sites-enabled/000-default.conf,而 CentOS 的 Apache 多在/etc/httpd/conf.d/。 - 关键点:检查
php-fpm的配置。Ubuntu 中 PHP-FPM 的监听 socket 路径可能与 CentOS 不同(例如从/var/run/php-fpm/php-fpm.sock变为/run/php/php7.x-fpm.sock),这会导致 Nginx 无法连接后端。
- CentOS 中 Nginx 配置通常在
- 日志文件:
- CentOS 主要看
/var/log/messages或特定服务的 log。 - Ubuntu 全面转向 systemd journal。查看服务日志请用
journalctl -u <service_name>或-xe。传统的/var/log/syslog依然存在,但很多详细错误信息被 systemd 接管了。
- CentOS 主要看
3. 防火墙与网络策略
- CentOS 7+:默认使用
firewalld,命令如firewall-cmd --add-port=80/tcp --permanent。 - Ubuntu:默认没有启用复杂的防火墙守护进程,而是推荐使用
ufw(Uncomplicated Firewall)。- 操作:
sudo ufw allow 80/tcp。 - 注意:如果你使用的是阿里云 ECS 或腾讯云 CVM,云厂商的安全组(Security Group)优先级高于系统内部防火墙。在迁移初期,建议先在云控制台开放所有端口测试连通性,再逐步收紧规则,最后再配置
ufw。否则容易出现“云安全组开了,但系统内 ufw 没开”导致的访问不通。
- 操作:
4. 服务管理与初始化系统
- Systemd 是标准:两者都使用 systemd,所以
systemctl start/enable命令是一样的。这点不用太担心。 - 差异点:某些服务的名称可能不同。例如,CentOS 中重启 Apache 是
systemctl restart httpd,而在 Ubuntu 中是systemctl restart apache2。迁移脚本时务必检查服务名映射。
5. Python 与开发环境
- Python 版本:CentOS 7 默认 Python 2.7(已停止维护),CentOS 8+ 默认 Python 3.6+。Ubuntu LTS 版本(如 20.04/22.04)默认携带较新的 Python 3.x。
- pip 与 virtualenv:Ubuntu 的软件源中,Python 包往往通过
apt install python3-pip安装,但更推荐直接使用python3 -m venv创建虚拟环境,避免全局污染。 - GCC/构建工具:编译第三方库(如 psycopg2, pillow 等)需要开发头文件。在 CentOS 上是
yum groupinstall "Development Tools",在 Ubuntu 上则是sudo apt install build-essential。
6. 字符集与语言环境
- 默认编码:CentOS 7 默认可能是 en_US.UTF-8 或 zh_CN.GB18030。Ubuntu 默认通常是 en_US.UTF-8。
- 乱码风险:如果你的应用涉及中文文件名或数据库存储,迁移后务必检查
locale设置。运行locale命令,如果输出不是 UTF-8,可能需要重新配置:sudo dpkg-reconfigure locales。
7. 安全加固与 SSH
- SSH 配置:Ubuntu 默认禁用 root 远程登录(PermitRootLogin no),这是更安全的方式。如果你之前习惯 root 直连,需要在
/etc/ssh/sshd_config中修改并重启 sshd。 - Fail2ban:Ubuntu 社区非常推崇使用
fail2ban防止暴力破解。CentOS 用户可能更多依赖 iptables 规则或云厂商的安全组。建议在 Ubuntu 上安装并配置 fail2ban,它比手动写 iptables 规则更智能且易于维护。
8. 迁移实操建议(避坑指南)
- 备份!备份!备份!:在动手前,对原 CentOS 系统进行完整快照或数据打包。
- 并行测试:不要直接在生产环境替换。租用一台同配置的 Ubuntu 实例,将代码、配置、数据库 dump 导入,进行完整功能测试。
- DNS 切换:确认新服务器 IP 正确无误后,再修改 DNS 解析。建议使用较短的 TTL 值(如 300 秒)以便快速回滚。
- 监控XX:如果你使用了 Zabbix Agent、Prometheus Node Exporter 或云厂商的监控插件,记得在 Ubuntu 上重新安装适配版本的 agent。有些 agent 有特定的 OS 检测逻辑,直接拷贝二进制文件可能无法启动。
- 内核模块:极少数情况下,某些专有驱动或内核模块在 CentOS 和 Ubuntu 之间不兼容。如果遇到硬件相关异常(如网卡、磁盘 IO 性能下降),需检查
dmesg是否有报错。
总结
从 CentOS 到 Ubuntu 的迁移,最大的挑战不在于技术本身,而在于“惯性”。你需要放下对 yum 和 httpd 的肌肉记忆,适应 apt 和 apache2 的新生态。只要处理好包管理、服务名映射、防火墙策略这三块,迁移过程会非常平滑。
对于国内云厂商用户,特别提醒:优先利用云厂商提供的“镜像市场”或“自定义镜像”功能,它们通常已经预装了常用环境和优化参数,比从零搭建更可靠。
云技术博客