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.pswp.cn/web/81252.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81252.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81252.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java基礎知識回顧3(可用于Java基礎速通)考前,面試前均可用!

目錄 一、基本算數運算符 二、自增自減運算符 三、賦值運算符 四、關系運算符 五、邏輯運算符 六、三元運算符 七、 運算符的優先級 八、小案例&#xff1a;在程序中接收用戶通過鍵盤輸入的數據 聲明&#xff1a;本文章根據黑馬程序員b站教學視頻做的筆記&#xff0c;可…

隨機密碼生成器:原理、實現與應用(多語言實現)

在當今數字化的時代&#xff0c;信息安全至關重要。而密碼作為保護個人和敏感信息的第一道防線&#xff0c;其安全性直接關系到我們的隱私和數據安全。然而&#xff0c;許多人在設置密碼時往往使用簡單、易猜的組合&#xff0c;如生日、電話號碼或常見的單詞&#xff0c;這使得…

TypeScript 泛型講解

如果說 TypeScript 是一門對類型進行編程的語言&#xff0c;那么泛型就是這門語言里的&#xff08;函數&#xff09;參數。本章&#xff0c;我將會從多角度講解 TypeScript 中無處不在的泛型&#xff0c;以及它在類型別名、對象類型、函數與 Class 中的使用方式。 一、泛型的核…

SQL 每日一題(6)

繼續做題&#xff01; 原始表&#xff1a;employee_resignations表 employee_idresignation_date10012022-03-1510022022-11-2010032023-01-0510042023-07-1210052024-02-28 第一題&#xff1a; 查詢累計到每個年度的離職人數 結果輸出&#xff1a;年度、當年離職人數、累計…

工業RTOS生態重構:從PLC到“端 - 邊 - 云”協同調度

一、引言 在當今數字化浪潮席卷全球的背景下&#xff0c;工業領域正經歷著深刻變革。工業自動化作為制造業發展的基石&#xff0c;其技術架構的演進直接關系到生產效率、產品質量以及企業的市場競爭力。傳統的PLC&#xff08;可編程邏輯控制器&#xff09;架構雖然在工業控制領…

從版本控制到協同開發:深度解析 Git、SVN 及現代工具鏈

前言&#xff1a;在當今軟件開發的浪潮中&#xff0c;版本控制與協同開發無疑扮演著舉足輕重的角色。從最初的單兵作戰到如今大規模團隊的高效協作&#xff0c;一套成熟且得力的版本控制系統以及圍繞其構建的現代工具鏈&#xff0c;已然成為推動軟件項目穩步前行的關鍵引擎。今…

Visual Studio Code插件離線安裝指南:從市場獲取并手動部署

Visual Studio Code插件離線安裝指南&#xff1a;從市場獲取并手動部署 一、場景背景二、操作步驟詳解步驟1&#xff1a;訪問官方插件市場步驟2&#xff1a;定位目標版本步驟3&#xff1a;提取關鍵參數步驟4&#xff1a;構造下載鏈接步驟5&#xff1a;下載與安裝 三、注意事項 …

用HTML5實現實時ASCII藝術攝像頭

用HTML5實現實時ASCII藝術攝像頭 項目簡介 這是一個將攝像頭畫面實時轉換為ASCII字符藝術的Web應用&#xff0c;基于HTML5和原生JavaScript實現。通過本項目可以學習到&#xff1a; 瀏覽器攝像頭API的使用Canvas圖像處理技術實時視頻流處理復雜DOM操作性能優化技巧 功能亮點…

論文審稿之我對SCI寫作的思考

有幸被邀請審過二區、三區、四區期刊的論文&#xff0c;近期審稿10余篇&#xff0c;分享一下我從一個審稿人的角度出發&#xff0c;如何提升自己寫作的質量。 作圖高清和好看&#xff0c;永遠是排第一位。圖中的字要清晰&#xff0c;有的放大200%還看不清字&#xff1b;每幅圖的…

MLA:Transformer的智能變形金剛——解密多頭潛在注意力的進化密碼

第一章 MLA的進化之路&#xff1a;從MHA到智能變形 1.1 變形金剛的誕生背景 當LLM模型規模突破萬億參數量級時&#xff0c;傳統Transformer的注意力機制開始顯現"成長的煩惱"&#xff1a;訓練階段計算密集、推理階段內存吃緊。DeepSeek團隊的MLA如同給注意力模塊裝…

電子電路:電學都有哪些核心概念?

電子是基本粒子,帶負電荷。電荷是物質的一種屬性,電子帶有負電荷,而質子帶有正電荷。電荷的單位是庫侖。 電流呢,應該是指電荷的流動,單位是安培,也就是庫侖每秒。所以電流其實就是電荷在導體中的移動形成的。比如,當電子在導線中流動時,就形成了電流。不過要注意,傳…

第三次中醫知識問答模型微調

本次參數 llamafactory-cli train \ --stage sft \ --do_train True \ --model_name_or_path /home/qhyz/zxy/LLaMA-Factory/model \ --preprocessing_num_workers 16 \ --finetuning_type lora \ --template deepseek3 \ --flash_attn fa2 \ --dataset_dir data \ --dataset …

leetcode2081. k 鏡像數字的和-hard

1 題目&#xff1a;k 鏡像數字的和 官方標定難度&#xff1a;難 一個 k 鏡像數字 指的是一個在十進制和 k 進制下從前往后讀和從后往前讀都一樣的 沒有前導 0 的 正 整數。 比方說&#xff0c;9 是一個 2 鏡像數字。9 在十進制下為 9 &#xff0c;二進制下為 1001 &#xff…

計算機網絡學習(七)——IP

一、IP 在計算機網絡中&#xff0c;IP&#xff08;Internet Protocol&#xff0c;網際協議&#xff09;是網絡層的核心協議&#xff0c;用于實現跨越不同網絡的數據包傳輸。IP 是 TCP/IP 協議族的核心部分&#xff0c;屬于網絡層協議&#xff0c;也是 Internet 賴以運作的基礎…

【技術追蹤】ADDP:通過交替去噪擴散過程學習用于圖像識別和生成的通用表示(ICLR-2024)

擴散模型交替去噪&#xff1a;助力圖像識別與圖像生成~ 論文&#xff1a;ADDP: Learning General Representations for Image Recognition and Generation with Alternating Denoising Diffusion Process 代碼&#xff1a;https://github.com/ChangyaoTian/ADDP 0、摘要 圖像識…

在Linux上安裝Miniconda

在Linux上安裝Anaconda或Miniconda&#xff08;輕量級版本&#xff09; 選擇安裝版本 Anaconda&#xff1a; 包含200預裝包&#xff08;如NumPy、Pandas、TensorFlow等&#xff09;&#xff0c;適合新手或需要完整科學計算環境的用戶。 安裝包較大&#xff08;約500MB&#xff…

SRS流媒體服務器之RTC播放環境搭建

環境概述 srs版本 commit 44f0c36b61bc7c3a1d51cb60be0ec184c840f09d Author: winlin <winlinvip.126.com> Date: Wed Aug 2 10:34:41 2023 0800Release v4.0-r5, 4.0 release5, v4.0.271, 145574 lines. rtc.conf # WebRTC streaming config for SRS. # see full.…

清山垃圾的3個問題

與一群驢友進山&#xff0c;同步撿拾一路的垃圾&#xff1a;清山行動。 關于垃圾&#xff0c;大家提了3個問題。記錄于此&#xff0c;勤于思考&#xff1a;為什么&#xff0c;如何做 問題 - 山里的垃圾有哪些&#xff1f; - 垃圾是誰丟的&#xff1f; - 他們為…

redis集合類型

練習命令使用&#xff0c;具體如下&#xff1a; 練習無序集合類型命令 sadd smembers scard srem sinter sunion sdiff sismember srandmember spop 練習有序集合類型命令 無序集合中的每個元素都是不同的&#xff0c;且沒有順序 創建/追加/刪除/查看 127.0.0.1:6379>…

JAVA 包管理

一 、關鍵點 包聲明規則&#xff1a; 每個類首行的package聲明必須與文件路徑完全匹配com.example.math對應路徑com/example/mathorg.demo.greeting對應路徑org/demo/greeting 編譯參數&#xff1a; -d ./build&#xff1a;指定編譯輸出目錄編譯器會自動根據包聲明創建對應…