努力
加油

云服务器从CentOS更换为Ubuntu有哪些注意事项?

从 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 主要看 /var/log/messages 或特定服务的 log。
    • Ubuntu 全面转向 systemd journal。查看服务日志请用 journalctl -u <service_name> 或 -xe。传统的 /var/log/syslog 依然存在,但很多详细错误信息被 systemd 接管了。

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. 迁移实操建议(避坑指南)

  1. 备份!备份!备份!:在动手前,对原 CentOS 系统进行完整快照或数据打包。
  2. 并行测试:不要直接在生产环境替换。租用一台同配置的 Ubuntu 实例,将代码、配置、数据库 dump 导入,进行完整功能测试。
  3. DNS 切换:确认新服务器 IP 正确无误后,再修改 DNS 解析。建议使用较短的 TTL 值(如 300 秒)以便快速回滚。
  4. 监控XX:如果你使用了 Zabbix Agent、Prometheus Node Exporter 或云厂商的监控插件,记得在 Ubuntu 上重新安装适配版本的 agent。有些 agent 有特定的 OS 检测逻辑,直接拷贝二进制文件可能无法启动。
  5. 内核模块:极少数情况下,某些专有驱动或内核模块在 CentOS 和 Ubuntu 之间不兼容。如果遇到硬件相关异常(如网卡、磁盘 IO 性能下降),需检查 dmesg 是否有报错。

总结

从 CentOS 到 Ubuntu 的迁移,最大的挑战不在于技术本身,而在于“惯性”。你需要放下对 yum 和 httpd 的肌肉记忆,适应 apt 和 apache2 的新生态。只要处理好包管理、服务名映射、防火墙策略这三块,迁移过程会非常平滑。

对于国内云厂商用户,特别提醒:优先利用云厂商提供的“镜像市场”或“自定义镜像”功能,它们通常已经预装了常用环境和优化参数,比从零搭建更可靠。