在云服务器上跑 Express 或 NestJS,选 Linux 发行版其实没有绝对的“唯一正确答案”,只有最适合你团队习惯和运维成本的选择。
作为在国内云厂商(阿里云、腾讯云、华为云等)摸爬滚打多年的开发者,我直接给结论:
首选推荐:Alibaba Cloud Linux 3 或 Ubuntu 22.04 LTS (Server)
次选/特定场景:CentOS Stream / Rocky Linux 9
不推荐用于生产环境:Debian(除非你非常熟悉其包管理)、CentOS 7(已停止维护)
下面我从实际落地、兼容性、生态和社区支持三个维度,掰开揉碎了讲为什么这么选。
1. 为什么 Alibaba Cloud Linux 3 是“真香”选项?
如果你用的是阿里云,或者未来可能迁移到多云架构,Alibaba Cloud Linux 3 是目前国内云厂商中性价比最高的选择之一。
- 内核优化:它基于 CentOS/RHEL 体系,但针对云原生场景做了深度优化。比如网络栈的调度、IO 性能、以及容器化支持(虽然你跑的是 Node.js,但底层内核的稳定性对高并发至关重要)。
- 兼容性好:它是二进制兼容 CentOS 8 的。这意味着你在网上搜到的绝大多数 CentOS 教程、Nginx 配置、Node.js 安装脚本,几乎都能无缝运行。
- 长期支持:官方承诺提供长期的安全更新和技术支持,不用担心像 CentOS 7 那样突然停更导致服务器变成“裸奔”状态。
- 轻量级:默认安装后占用资源极少,对于小内存实例(如 1核2G 或 2核4G)非常友好。
适合人群:追求极致性价比、使用阿里云产品、希望系统稳定且无需频繁折腾内核的用户。
2. 为什么 Ubuntu 22.04 LTS 依然是全球开发者的最爱?
如果你的项目需要依赖一些非标准的 Node.js 模块,或者你需要用到一些较新的软件包(比如最新版的 Docker、Kubernetes 工具链),Ubuntu 的优势就体现出来了。
- 社区资源最丰富:Stack Overflow 上 70% 以上的 Linux 相关问题都围绕 Debian/Ubuntu。遇到报错时,你更容易找到解决方案。
- Node.js 生态支持最好:很多 Node.js 的二进制预编译包(Binary Releases)优先测试 Ubuntu。npm install 某些带有 C++ 绑定的模块(如
bcrypt,sqlite3)时,在 Ubuntu 上编译成功率通常高于其他发行版。 - 软件包新:Ubuntu 的 APT 仓库里的软件版本通常比 RHEL 系更新。如果你需要较新版本的 Python、GCC 或其他构建工具,Ubuntu 不用额外添加第三方源。
- LTS 周期长:22.04 支持到 2027 年(标准支持),5 年内不需要考虑大版本升级带来的破坏性变更。
适合人群:个人开发者、初创团队、需要频繁安装各种开发工具、对社区文档依赖度高的用户。
3. 关于 CentOS 的现实考量
很多人第一反应是 CentOS,但这里必须提醒几个关键点:
- CentOS 7 已死:2024 年 6 月 30 日,CentOS 7 正式停止维护(EOL)。现在新建服务器再用 CentOS 7,等于主动放弃安全补丁,存在巨大风险。绝对不要在新项目中选 CentOS 7。
- CentOS Stream 的定位变化:现在的 CentOS Stream 是 RHEL 的上游滚动发布版,更偏向于“测试平台”而非“稳定生产环境”。对于追求稳定的企业级应用,它的波动性略高于传统的 CentOS 7。
- 替代方案:Rocky Linux 9 / AlmaLinux 9:这两个是 CentOS 的精神继承者,完全兼容 RHEL,由社区驱动,稳定可靠。如果你团队内部有严格的 RHEL 规范,或者需要与现有 Ansible/Puppet 配置管理无缝对接,选它们没错。
4. 实际部署建议(避坑指南)
不管选哪个系统,以下几点比发行版本身更重要:
✅ 统一基础镜像
无论选什么,务必从云厂商提供的“官方镜像”或“自定义镜像”启动,不要用那些被魔改过的第三方镜像。确保系统是干净的、最小化安装的(Minimal Install)。
✅ 使用 NVM 或 fnm 管理 Node.js 版本
不要在系统中用 apt install nodejs 或 yum install nodejs 来安装 Node.js。这些包管理器里的版本往往滞后,且容易与项目需求冲突。
推荐使用 nvm (Node Version Manager) 或 fnm (Fast Node Manager) 在用户层面管理 Node.js 版本。这样你可以轻松切换 v18、v20 甚至未来的 v22,而不影响系统其他服务。
✅ 使用 PM2 做进程守护
Express/NestJS 是单线程模型,一旦崩溃就会宕机。在生产环境中,必须使用 PM2 来管理进程:
pm2 start dist/main.js --name "my-app"
pm2 startup systemd
pm2 save
PM2 可以自动重启、日志轮转、监控内存,这是 Node.js 生产环境的标配。
✅ 防火墙与安全组
Linux 系统自带的 firewalld (RHEL/CentOS) 或 ufw (Ubuntu) 要启用,但更重要的是:优先使用云厂商的安全组(Security Group)。
- 安全组在虚拟化层拦截流量,效率更高,规则更清晰。
- 系统内部防火墙作为第二道防线,只允许本地回环和必要端口。
✅ 定期更新与备份
- 执行
sudo apt update && sudo apt upgrade(Ubuntu) 或sudo yum update(Alibaba Cloud Linux) 保持系统最新。 - 开启云服务器的自动快照策略。数据无价,代码可以重写,数据库丢了就是灾难。
总结
| 场景 | 推荐发行版 | 理由 |
|---|---|---|
| 通用推荐 / 新手友好 | Ubuntu 22.04 LTS | 社区强大,文档多,Node.js 兼容性最佳,出错易排查 |
| 阿里云用户 / 追求稳定 | Alibaba Cloud Linux 3 | 免费、性能好、兼容 CentOS 生态、长期支持 |
| 企业级 / RHEL 兼容需求 | Rocky Linux 9 | 稳定、合规、适合大型团队协作 |
| 个人实验 / 学习 | Debian 12 | 简洁、稳定,但需注意部分软件包版本较旧 |
最终建议:
如果你是个人开发者或小团队,直接选 Ubuntu 22.04 LTS,省心省力,遇到问题能最快找到答案。
如果你已经在阿里云上有较多业务,或者对系统资源利用率有极高要求,选 Alibaba Cloud Linux 3,它能帮你省下不少调试时间。
别纠结了,选一个,然后花时间在 CI/CD 流水线、Docker 化和监控告警上,那才是提升项目稳定性的关键。
云技术博客