如何在生产环境中部署 Node.js 应用?
Node.js 应用的生产部署步骤,包括服务器准备、依赖管理、构建、启动和反向代理配置。使用 PM2 进行进程管理和 Nginx 作为反向代理。适用于中等难度的前端面试题。
生产环境部署 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)可提高多服务隔离性和可扩展性。