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

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.lryc.cn/news/2383573.html

相关文章:

  • 分布式电源的配电网无功优化
  • 【WebRTC】源码更改麦克风权限
  • upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
  • idea无法识别Maven项目
  • 前端三剑客之HTML
  • linux中cpu内存浮动占用,C++文件占用cpu内存、定时任务不运行报错(root) PAM ERROR (Permission denied)
  • RabbitMQ的核心原理及应用
  • 实时监控服务器CPU、内存和磁盘使用率
  • linux国产机安装GCC
  • python训练营打卡第30天
  • 时间序列预测实战:用 LSTM 预测股票价格
  • STM32 | FreeRTOS 消息队列
  • 便捷的Office批量转PDF工具
  • pom.xml中的runtime
  • SpringMVC 通过ajax 实现文件的上传
  • opcUA 编译和建模入门教程(zhanzhi学习笔记)
  • 【关联git本地仓库,上传项目到github】
  • 初步认识HarmonyOS NEXT端云一体化开发
  • WebRTC技术EasyRTC音视频实时通话驱动智能摄像头迈向多场景应用
  • 分布式ID生成器:原理、对比与WorkerID实战
  • java 代码查重(三)常见的距离算法和相似度(相关系数)计算方法
  • LangChain4j入门AI(六)整合提示词(Prompt)
  • redis--redisJava客户端:Jedis详解
  • [CSS3]百分比布局
  • 【Java微服务组件】异步通信P2—Kafka与消息
  • R语言空间数据处理入门教程
  • 使用zap,对web应用/API接口 做安全检测
  • UE5.6新版本—— 动画光照系统重点更新
  • TypeScript 泛型讲解
  • 腾讯位置服务重构出行行业的技术底层逻辑