如何在生产环境中部署 Node.js 应用?

Node.js 应用的生产部署步骤,包括服务器准备、依赖管理、构建、启动和反向代理配置。使用 PM2 进行进程管理和 Nginx 作为反向代理。适用于中等难度的前端面试题。

部署与运维 中等 部署 Node.js PM2

生产环境部署 Node.js 应用的主要步骤:

1. 服务器准备与环境配置

  • 选择服务器类型:云服务器(AWS EC2、Google Cloud)、容器化平台(Docker)、服务化平台(Heroku/Vercel)。
  • 安装 Node.js:确保服务器安装最新 LTS 版 Node.js 环境,通过源码或安装包部署。

2. 生产环境变量配置与依赖安装

  • 设置 NODE_ENV=production:优化库性能,跳过开发依赖安装。
    export NODE_ENV=production  # Linux/Mac
    set NODE_ENV=production       # Windows
    
  • 安装生产依赖:使用 npm ci 确保依赖版本锁定。
    npm ci --production
    

3. 构建应用(如适用)

  • 若为全栈框架(如 SvelteKit/Next.js),需构建前端静态文件:
    npm run build
    

    输出目录默认为 build/

4. 启动应用与进程管理

  • 使用 PM2:提供进程守护、崩溃重启和日志管理。
    pm2 start dist/main.js --name my-api -i max   # 启动多进程负载均衡
    pm2 save                                      # 保存进程列表
    pm2 startup                                   # 配置开机自启
    

5. Web 服务器与反向代理

  • 配置 Nginx:处理 HTTP(S) 转发、负载均衡和安全设置:
    server {
      listen 80;
      server_name example.com;
      location / {
        proxy_pass http://localhost:3000;  # Node 应用端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
      }
    }
    
  • 启用 HTTPS:使用 Let’s Encrypt 免费证书。

6. CI/CD 自动化部署(可选)

  • 工具示例:集成 GitHub Actions 执行构建 → 上传 → PM2 重启流程:
    name: Deploy to Production
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - name: SSH into server
            run: |
              ssh user@server "cd /app && git pull"
              ssh user@server "pm2 restart my-api"
    

7. 容器化部署(Docker 方案)

  • 构建镜像:通过 Dockerfile 封装 Node 环境和应用:
    FROM node:18-alpine
    WORKDIR /app
    COPY package*.json ./
    RUN npm ci --production
    COPY . .
    CMD ["node", "dist/main.js"]
    
  • 推送镜像至仓库后运行容器 docker run -d -p 3000:3000 my-app

注意事项:

  • 监控与日志:使用 pm2 monit 或第三方工具(如 Prometheus)进行性能监控。
  • 资源隔离:容器化方案(如 Docker/Kubernetes)可提高多服务隔离性和可扩展性。