VPS部署Node.js应用完整教程


Node.js是构建Web应用和API服务的流行运行时。在搬瓦工VPS上部署Node.js应用,需要安装Node.js环境、配置进程管理工具PM2保证应用持久运行,并通过Nginx反向代理提供域名和HTTPS访问。本文介绍从零开始的完整部署流程。

使用NVM安装Node.js

NVM(Node Version Manager)可以方便地安装和切换多个Node.js版本:

# 安装NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 加载NVM(或重新打开终端)
source ~/.bashrc

# 查看可用的LTS版本
nvm ls-remote --lts

# 安装最新LTS版本
nvm install --lts

# 验证安装
node -v
npm -v

# 设置默认版本
nvm alias default 20
Tip: 生产环境建议使用LTS(长期支持)版本,稳定性更好。

创建示例Express应用

# 创建项目目录
mkdir -p /var/www/myapp
cd /var/www/myapp

# 初始化项目
npm init -y

# 安装Express
npm install express

创建应用入口文件 app.js

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.json({ message: 'Hello from Node.js!', time: new Date() });
});

app.get('/health', (req, res) => {
  res.json({ status: 'ok' });
});

app.listen(PORT, '127.0.0.1', () => {
  console.log(`Server running on port ${PORT}`);
});
# 测试运行
node app.js

# 另一个终端测试
curl http://127.0.0.1:3000

使用PM2管理进程

PM2是Node.js应用的生产级进程管理器,提供进程守护、自动重启、日志管理等功能:

# 全局安装PM2
npm install -g pm2

# 启动应用
pm2 start app.js --name myapp

# 查看运行状态
pm2 status

# 查看日志
pm2 logs myapp

# 设置开机自启
pm2 startup
pm2 save

创建PM2生态配置文件 ecosystem.config.js

module.exports = {
  apps: [{
    name: 'myapp',
    script: 'app.js',
    cwd: '/var/www/myapp',
    instances: 'max',        // 根据CPU核心数启动多个实例
    exec_mode: 'cluster',    // 集群模式
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    max_memory_restart: '300M',
    log_date_format: 'YYYY-MM-DD HH:mm:ss',
    error_file: '/var/log/pm2/myapp-error.log',
    out_file: '/var/log/pm2/myapp-out.log',
    merge_logs: true
  }]
};
# 使用配置文件启动
pm2 start ecosystem.config.js

# 重载应用(零停机)
pm2 reload myapp

# 停止和删除
pm2 stop myapp
pm2 delete myapp

Nginx反向代理配置

sudo nano /etc/nginx/conf.d/myapp.conf
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 静态文件直接由Nginx处理
    location /public/ {
        alias /var/www/myapp/public/;
        expires 30d;
        access_log off;
    }

    # 其他请求代理到Node.js
    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_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;
        proxy_cache_bypass $http_upgrade;
    }
}
sudo nginx -t
sudo nginx -s reload

环境变量管理

使用 .env 文件管理敏感配置:

# 安装dotenv
npm install dotenv

# 创建.env文件
nano /var/www/myapp/.env
NODE_ENV=production
PORT=3000
DB_HOST=localhost
DB_NAME=myapp
SECRET_KEY=your-secret-key-here
// 在app.js开头加载
require('dotenv').config();

const PORT = process.env.PORT || 3000;
const DB_HOST = process.env.DB_HOST;
Tip: .env 文件包含敏感信息,不要提交到Git仓库,在 .gitignore 中排除。

部署更新流程

日常代码更新的标准流程:

# 进入项目目录
cd /var/www/myapp

# 拉取最新代码
git pull origin main

# 安装新依赖
npm install --production

# 零停机重载
pm2 reload myapp

# 查看运行状态
pm2 status
pm2 logs myapp --lines 20

常见问题

Tip: PM2详细用法请参考 PM2管理教程。更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程