当前位置: 首页 > backend >正文

Node.js Express 项目现代化打包部署全指南

Node.js Express 项目现代化打包部署全指南

在这里插入图片描述

一、项目准备阶段

1.1 依赖管理优化

# 生产依赖安装(示例)
npm install express mongoose dotenv compression helmet# 开发依赖安装
npm install nodemon eslint @types/node --save-dev

1.2 环境变量配置

// .env.production
MONGODB_URI=mongodb+srv://<user>:<password>@cluster0.example.mongodb.net/production
JWT_SECRET=prod_secure_key_here
PORT=8080
NODE_ENV=production

二、核心打包流程

2.1 构建脚本配置

{"scripts": {"build": "npm run lint && npm audit","start:prod": "NODE_ENV=production node ./bin/www","lint": "eslint 'src/**/*.js' --fix"}
}

2.2 静态资源优化

// 生产环境配置
if (process.env.NODE_ENV === 'production') {app.use(express.static('public', {maxAge: '1y',setHeaders: (res, path) => {if (express.static.mime.lookup(path) === 'text/html') {res.setHeader('Cache-Control', 'public, max-age=0')}}}))
}

三、生产环境部署

3.1 PM2 进程管理

# 安装PM2
npm install pm2 -g# 集群模式启动
pm2 start ./bin/www -i max --name "express-api"

3.2 数据库连接优化

mongoose.connect(process.env.MONGODB_URI, {useNewUrlParser: true,useUnifiedTopology: true,serverSelectionTimeoutMS: 5000,socketTimeoutMS: 45000
})mongoose.connection.on('error', err => {console.error('MongoDB连接异常:', err)process.exit(1)
})

四、进阶部署方案

4.1 Docker 容器化部署

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 8080
CMD [ "npm", "run", "start:prod" ]

4.2 Nginx 反向代理配置

upstream nodejs_backend {server localhost:8080;keepalive 32;
}server {listen 80;location / {proxy_pass http://nodejs_backend;proxy_http_version 1.1;proxy_set_header Connection "";}
}

五、自动化部署策略

5.1 GitHub Actions 配置

name: CI/CD Pipeline
on:push:branches: [ main ]jobs:deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: actions/setup-node@v3- run: npm ci- run: npm run build- name: Deploy to Serveruses: appleboy/ssh-action@v0.1.10with:host: ${{ secrets.PROD_HOST }}username: ${{ secrets.SSH_USER }}key: ${{ secrets.SSH_KEY }}script: |cd /var/www/express-appgit pull origin mainnpm install --productionpm2 reload all

六、安全与监控

const helmet = require('helmet')
const rateLimit = require('express-rate-limit')// 安全头设置
app.use(helmet({contentSecurityPolicy: {directives: {defaultSrc: ["'self'"],scriptSrc: ["'self'", "'unsafe-inline'"]}}
}))// 请求限流
const limiter = rateLimit({windowMs: 15 * 60 * 1000, // 15分钟max: 100 // 每个IP限制100个请求
})

七、注意事项

  • 环境变量安全:切勿将.env文件提交到版本库
  • 日志管理:建议使用Winston进行结构化日志记录
  • 性能监控:集成APM工具(如New Relic或Prometheus)
  • 错误跟踪:配置Sentry进行异常捕获
  • CI/CD扩展:可结合SonarQube进行代码质量检测

八、延伸工具推荐

  • 性能分析工具:clinic.js
  • 压力测试:artillery
  • 配置管理:Consul
  • 容器编排:Kubernetes
  • 服务监控:Grafana + Prometheus
http://www.xdnf.cn/news/7826.html

相关文章:

  • 基于亚马逊云科技构建音视频直播审核方案
  • Redis应用--缓存
  • MyBatis简单使用
  • 2025年度消费新潜力白皮书470+份汇总解读|附PDF下载
  • BAGEL-7B-MoT论文速读:统一多模态预训练的新特性
  • JUC高并发编程
  • 【笔记】快速安装Poetry
  • 138. Copy List with Random Pointer
  • Docker 镜像打包到本地
  • Android开发——不同布局的定位属性 与 通用属性
  • 大数据量查询优化:解锁SQL性能提升的关键
  • Node.js多版本安装工具NVM详细使用教程
  • VsCode开发环境之Node.js离线部署
  • JS 应用安全案例泄漏云配置接口调试代码逻辑框架漏洞自检
  • 华为鸿蒙电脑发布,折叠屏怎么选?
  • 实现动态增QuartzJob,通过自定义注解调用相应方法
  • OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB
  • WPF核心类继承树结构
  • 学习路之uniapp--unipush2.0推送功能--服务端推送消息
  • Java安全-Servlet内存马
  • 基于多传感器融合的智能驾驶环境感知系统
  • 【java第19集】java面向对象编程详解
  • MyBatis:简化数据库操作的持久层框架
  • 高噪声下扩展边缘检测算子对检测边缘的影响
  • windows powershell 判断 进程号是否存在
  • 无人机桥梁巡检
  • linux文件重命名命令
  • MIL-C-5015航空插头2芯震动加速度传感器连接器
  • 五、【API 开发篇(下)】:使用 Django REST Framework构建测试用例模型的 CRUD API
  • 云原生安全之PaaS:从基础到实践的技术指南