腾讯云轻量服务器 Node.js + Nginx 部署手册

OpenCloudOS 9 · 2核2G5M · Nginx · Node.js 22 · PM2

一、目录规范

/www/wwwroot/ ├── my-app/ ← 后端 Node.js 项目 │ ├── app.js │ ├── package.json │ └── node_modules/ │ └── my-app-web/ ← 前端静态文件(打包后的) ├── index.html ├── css/ ├── js/ └── assets/ /etc/nginx/ ├── nginx.conf ← 主配置(不要动) └── conf.d/ ← 网站配置(所有配置写这里) ├── my-app.conf └── my-blog.conf /var/log/nginx/ ├── access.log ← 访问日志 └── error.log ← 错误日志
文件类型 存放目录 处理方式
后端 Node.js 项目 /www/wwwroot/项目名/ Node 处理,Nginx 反向代理
前端静态文件 /www/wwwroot/项目名-web/ Nginx 直接返回,速度快

二、后端项目部署

2.1 创建项目目录并上传

# 创建目录
sudo mkdir -p /www/wwwroot/my-app

# 进入目录
cd /www/wwwroot/my-app

# 上传项目文件(app.js、package.json 等)
# 可用 scp、sftp、宝塔面板等方式

# 安装依赖
npm install

2.2 修改端口

Node 项目不要监听 80 端口,用 3000、3001 等:

// app.js 中修改
app.listen(3000);   // ← 用 3000,不要用 80

2.3 用 PM2 启动

# 启动项目
pm2 start app.js --name my-app

# 设置开机自启(第一次执行)
pm2 startup
pm2 save

三、前端项目部署

3.1 打包上传

# 本地开发完后打包
npm run build

# 在服务器创建目录
sudo mkdir -p /www/wwwroot/my-app-web

# 把 dist 目录下所有文件上传到这个目录

3.2 目录结构

/www/wwwroot/my-app-web/ ├── index.html ├── css/ ├── js/ ├── assets/ └── favicon.ico

3.3 配置 Nginx 直接返回静态文件

server {
    listen 80;
    server_name _;

    # 前端:Nginx 直接返回
    location / {
        root /www/wwwroot/my-app-web;
        index index.html;
        try_files $uri $uri/ /index.html;   # 支持 SPA 路由
    }
}

四、Nginx 配置

4.1 只有后端(纯 API 服务)

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        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;
    }
}

4.2 前端 + 后端(最常用)

server {
    listen 80;
    server_name _;

    # 前端静态文件
    location / {
        root /www/wwwroot/my-app-web;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # 后端 API
    location /api {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        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;
    }
}

4.3 多个项目

# 项目 A
server {
    listen 80;
    server_name a.com;

    location / {
        root /www/wwwroot/app-a-web;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 项目 B
server {
    listen 80;
    server_name b.com;

    location / {
        root /www/wwwroot/app-b-web;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

4.4 修改配置的操作流程

第一步:sudo vi /etc/nginx/conf.d/配置文件名.conf    # 编辑配置
第二步:sudo nginx -t                               # 检查语法
第三步:sudo nginx -s reload                         # 重载生效
注意 第二步如果报错就不要执行第三步,先把语法错误修好。

五、部署一个新项目的完整流程

  1. 创建目录
    sudo mkdir -p /www/wwwroot/项目名
  2. 上传后端代码
    将 app.js、package.json 等文件上传到该目录
  3. 安装依赖
    cd /www/wwwroot/项目名 && npm install
  4. 修改端口
    将 app.js 中的端口改为 3000(或 3001、3002...)
  5. 用 PM2 启动
    pm2 start app.js --name 项目名
  6. 上传前端打包文件
    将 dist 目录内容上传到 /www/wwwroot/项目名-web/
  7. 编写 Nginx 配置
    sudo vi /etc/nginx/conf.d/项目名.conf
  8. 检查并重载 Nginx
    sudo nginx -t 然后 sudo nginx -s reload
  9. 验证
    浏览器访问服务器 IP

六、常用命令速查

Nginx

命令 作用
sudo nginx -t 检查配置文件语法
sudo nginx -s reload 重载配置(不中断服务)
sudo systemctl start nginx 启动 Nginx
sudo systemctl stop nginx 停止 Nginx
sudo systemctl restart nginx 重启 Nginx
sudo systemctl status nginx 查看运行状态
sudo systemctl enable nginx 设为开机自启
sudo tail -50 /var/log/nginx/error.log 查看错误日志

PM2

命令 作用
pm2 start app.js --name 名称 启动项目
pm2 list 查看所有项目状态
pm2 restart 名称 重启项目
pm2 stop 名称 停止项目
pm2 delete 名称 删除项目
pm2 logs 名称 查看日志
pm2 monit 实时监控
pm2 startup 设置开机自启
pm2 save 保存当前进程列表
pm2 install pm2-logrotate 安装日志切割插件

端口排查

命令 作用
sudo lsof -i :80 查看 80 端口占用
sudo lsof -i :3000 查看 3000 端口占用
sudo netstat -tlnp 查看所有端口占用
curl http://127.0.0.1:3000 测试本地服务是否正常
ps -ef | grep node 查看所有 Node 进程

systemd 服务管理

命令 作用
sudo systemctl stop myapp 停止服务
sudo systemctl disable myapp 禁止开机自启
sudo systemctl start myapp 启动服务
grep -r "app.js" /etc/systemd/system/ 查找服务文件位置

七、常见问题排查

问题 排查命令 解决方法
Nginx 启动失败 sudo nginx -t 语法错误,根据提示修复
端口被占用 sudo lsof -i :80 停掉占用端口的进程
访问显示 502 Bad Gateway pm2 list Node 没启动,pm2 start 拉起来
访问显示 404 Not Found 查看 Nginx location 配置 路径写错了,检查配置
改了配置没生效 忘了 sudo nginx -s reload
Node 被 kill 后自动重启 ps -ef | grep node 有 systemd 管理,用 systemctl stop 停掉
前端刷新 404 Nginx 缺少 try_files $uri $uri/ /index.html

八、SSL 证书(免费 HTTPS)

有域名(推荐)

# 1. 域名添加 A 记录,指向服务器 IP

# 2. 安装 certbot
sudo yum install -y epel-release
sudo yum install -y certbot python3-certbot-nginx

# 3. 申请证书
sudo certbot --nginx -d 你的域名

# 4. 测试自动续期
sudo certbot renew --dry-run

无域名(自签名证书,浏览器会提示不安全)

sudo openssl req -x509 -nodes -days 365 \
  -newkey rsa:2048 \
  -keyout /etc/nginx/self.key \
  -out /etc/nginx/self.crt \
  -subj "/CN=你的IP"

九、服务器当前状态记录

组件 状态 说明
Nginx 运行中 监听 80 端口,配置在 /etc/nginx/conf.d/
系统自带 Node 服务 已停用 myapp.service 已 disable
自己的 Node 项目 待部署 放在 /www/wwwroot/项目名/,用 3000+ 端口
PM2 已安装 用于管理 Node 进程
提示 每次部署新项目,按照第五节「完整流程」走一遍即可。遇到问题先查第七节「常见问题排查」。
京ICP备2026017429号-2