首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >腾讯云国际代理商:CVM部署Node.js API教程 Ubuntu+PM2+Nginx实操

腾讯云国际代理商:CVM部署Node.js API教程 Ubuntu+PM2+Nginx实操

原创
作者头像
云渠道商yunshuguoji
发布2026-09-04 15:25:12
发布2026-09-04 15:25:12
840
举报
文章被收录于专栏:云服务业务云服务业务

本文由 腾讯云国际站代理商『云枢国际-@yunshuguoji-腾讯云国际服务器服务商•撰写』如需转载请注明!

生产重要前置风险提示:

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。

提示:账号开通、服务器选型等如果有疑问,可以寻小编云枢国际协助。

二、Ubuntu 环境初始化与 Node.js 安装

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

三、应用部署与 PM2 进程托管

重要:生产环境尽量新建普通业务用户运行 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 证书配置

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

五、出海 API 部署架构对比

维度

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. 删除不再需要磁盘快照、备份镜像。

八、常见问题(FAQ)

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 删除。

目录
  • 本文由 腾讯云国际站代理商『云枢国际-@yunshuguoji-腾讯云国际服务器服务商•撰写』如需转载请注明!
    • 生产重要前置风险提示:
  • 一、部署前置条件与选型准备
  • 二、Ubuntu 环境初始化与 Node.js 安装
  • 三、应用部署与 PM2 进程托管
  • 四、Nginx 反向代理与 SSL 证书配置
  • 五、出海 API 部署架构对比
  • 六、验证与排错
    • 连通性验证:
    • 常见故障:
  • 七、测试环境资源清理,避免意外扣费
  • 八、常见问题(FAQ)
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档