
1. Node 应用务必绑定127.0.0.1本地回环地址,禁止监听 0.0.0.0,避免后端业务端口对外暴露;
2. 不建议使用 root 账号运行业务 Node 进程,建议创建独立业务普通用户;
3. 出海服务器访问 Let’s Encrypt 存在网络超时风险,SSL 证书自动续期需要定期核验;
4. 开启系统 UFW 防火墙,不要只依赖腾讯云控制台安全组双层防护;
5. PM2 集群模式instances:"max"存在端口冲突风险,生产建议手动指定实例数。
构建出海业务后端,基于 Node.js 搭配 Express、NestJS 开发 API 是非常普遍的选择。海外业务通常使用云虚拟机 Linux 环境承载服务。本文面向后端开发与运维人员,完整讲解腾讯云国际版 CVM(Ubuntu LTS)部署 Node.js API 全流程,包含系统初始化、Node 运行环境、PM2 进程守护、Nginx 反向代理、SSL 证书以及生产安全配置。

部署前确认下面资源就绪:
1. 实例:腾讯云国际 CVM,操作系统 Ubuntu LTS,部署于 VPC 子网,绑定公网 EIP。
2. 安全组入站规则:放行 TCP 22 (SSH)、TCP 80 (HTTP)、TCP 443 (HTTPS);3000 等业务端口禁止在安全组开放,全部经由 Nginx 反向代理转发。
3. 域名:海外域名完成 A 记录解析,指向 CVM 公网 IP。
提示:账号开通、服务器选型等如果有疑问,可以寻小编云枢国际协助。
SSH 登录 CVM 服务器终端,执行系统更新并安装依赖工具。
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git build-essential
通过 NodeSource 官方源安装 Node.js LTS 长期支持版本:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
安装完成校验版本:
node -v
npm -v
安全加固建议:服务器 SSH 建议关闭密码登录,仅使用密钥登录,降低暴力破解风险。 开启系统防火墙 UFW:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
重要:生产环境尽量新建普通业务用户运行 Node 服务,不要全程使用 root。 PM2 实现进程守护、异常自动重启,保障 API 服务稳定性。
全局安装 PM2
sudo npm install -g pm2
拉取业务代码 示例工作目录/var/www/api
sudo mkdir -p /var/www/api
# 将目录所有者修改为业务普通用户,避免root权限问题
sudo chown -R appuser:appuser /var/www/api
cd /var/www/api
npm install --production=false
# NestJS项目执行编译
npm run build
PM2 配置文件 ecosystem.config.js
关键配置:监听地址写127.0.0.1,限制仅本机访问;集群模式不建议直接写max,手动填写 CPU 核心对应实例数。
module.exports = {
apps: [
{
name: 'oversea-api',
script: './dist/main.js',
instances: 2,
exec_mode: 'cluster',
env_production: {
NODE_ENV: 'production',
HOST: '127.0.0.1',
PORT: 3000
}
}
]
};
密钥、数据库密码建议放置独立.env文件,PM2 支持读取环境变量文件,不要硬编码写进配置。
启动服务、配置开机自启
pm2 start ecosystem.config.js --env production
pm2 save
# 生成systemd开机自启,注意:如使用普通用户运行,需指定对应用户
pm2 startup systemd
查看运行状态
pm2 status
配置日志轮转,防止日志占满磁盘
pm2 install pm2-logrotate
Nginx 承担接入层工作,处理 SSL 解密、请求转发、请求头透传,Node 业务服务只对内网本地暴露。
1. 安装启动 Nginx
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
1. 站点配置 /etc/nginx/sites-available/api.conf
server {
listen 80;
server_name shturl.cc/ggHq5l0P;
# 限制上传请求大小,API上传场景必备
client_max_body_size 20M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 安全响应头
add_header XFrameOptions "DENY";
add_header XXSSProtection "1; mode=block";
add_header XContentTypeOptions nosniff;
}
}
激活配置,校验语法重载 nginx
sudo ln -s /etc/nginx/sites-available/api.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
自动化 HTTPS 证书(Let’s Encrypt Certbot)
出海服务器部分网络环境访问 Let’s Encrypt 会出现超时,证书签发、自动续期会失败,需要定期手动核验。
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d shturl.cc/ggHq5l0P
查看自动续期定时任务状态
sudo systemctl status certbot.timer
# 手动测试续期
sudo certbot renew --dry-run
维度 | CVM 独立部署 | 容器服务 (TKE) | 无服务器 (SCF) |
|---|---|---|---|
适用场景 | 中早期业务、单一服务 | 规模化微服务、高并发 | 事件驱动、低频调用;不适合长连接 WebSocket |
掌控度 | 完全掌控操作系统内核 | 掌控镜像与编排逻辑 | 仅掌控业务代码,底层完全托管 |
运维成本 | 需要 Linux 运维能力 | 需要容器编排运维能力 | 无需维护基础设施 |
弹性扩容 | 依赖实例横向扩容 | 容器秒级弹性伸缩 | 毫秒级自动触发 |
成本构成 | 实例固定费用 + 公网流量 | 计算资源 + 管理费用 + 流量 | 按请求次数与运行时长计费 |
注意:业务代码需要自行实现/health健康检测接口,框架不会自带。
curl -I https://shturl.cc/ggHq5l0P/health
预期返回200 OK,证书正常。
1. 连接超时:检查腾讯云安全组;检查 Ubuntu ufw 防火墙是否放行 80/443/22。
2. 502 Bad Gateway:Nginx 无法转发到后端。pm2 list确认进程 online;确认 Node 监听127.0.0.1:3000;核对端口号。
3. SSL 证书签发失败:确认域名解析生效;确认 80 端口没有被其他程序占用;出海服务器留意 Let’s Encrypt 网络连通问题。
4. 413 Request Entity Too Large:Nginx client_max_body_size配置过小。
5. 服务运行一段时间自动消失:检查是否 Node OOM 被系统杀死,查看系统日志,优化内存或升级实例规格。
按量计费实例测试完成后及时释放资源:
1. 销毁 CVM 实例;关机不等于停止计费,按量实例必须执行销毁。
2. 解绑并释放闲置 EIP 弹性公网 IP,避免闲置保有费。
3. 删除不再需要磁盘快照、备份镜像。
Q1:腾讯云国际 CVM 部署 Node.js 出海 API,安全组和系统防火墙怎么做? A:控制台安全组放行 TCP22、80、443;同时开启 Ubuntu ufw 系统防火墙做第二层防护。业务端口 3000 只监听 127.0.0.1,绝对不要对公网开放。SSH 建议密钥登录,关闭密码认证抵御暴力扫描。
Q2:PM2 集群模式和 Nginx 反向代理各自承担什么工作? A:PM2 负责 Node 业务进程管理,崩溃自动重启,利用多核 CPU 提升并发;Nginx 作为接入层,负责 SSL 解密、请求头透传、限流、静态处理,流量转发到本地 Node 端口,二者配合实现生产级高可用。
Q3:生产环境 PM2 是否推荐 instances:"max"? A:不推荐。部分 Node 版本环境下会出现端口竞争冲突,建议根据服务器 CPU 核心数手动指定实例数量。
Q4:出海服务器 Certbot 证书续期失败怎么办? A:海外网络访问 Let’s Encrypt 存在不稳定风险,不要完全依赖自动定时任务;定期执行certbot renew --dry-run校验,失败可以切换其他 SSL 证书服务商。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。