一,部署整體流程
- 本地express項目傳輸到Linux服務器上(沒有上傳node_module)
- 在服務器上安裝node_module包
- 使用pm2管理node進程
二,部署過程
1. 查看Linux上的node版本,一般服務器自帶版本都比較低
node -v
v6.17.1版本太低了,需要升級版本到V10以上
2. 升級node版本
# 清除node緩存 npm cache clean --force # 安裝n模塊管理node版本 npm install -g n # 查看n版本 n -V # 安裝node最新版本 n latest # 查看安裝后的版本 node -v
3. 安裝pm2模塊
npm install -g pm2
4. 進入express項目根目錄下,啟動項目
# 啟動項目下的www文件,並命名進程 pm2 start ./bin/www --name short-video-api --watch # 查看啟動日志 pm2 logs
5. 如果啟動日志沒有報錯,並出現啟動打印信息,則啟動成功,按照設定的端口訪問(確定端口對外是開放的)
注:還可以自定義端口啟動
pm2 start ecosystem.config.js --env production
//ecosystem.config.js module.exports = { apps: [ { name: 'short-video-api', watch: true, script: './bin/www', env_production: { HOST: '0.0.0.0', PORT: 3001, NODE_ENV: 'production', }, }, ], }
三,服務對外支持https訪問,通過nginx轉發
server { listen 443; server_name localhost; ssl on; root html; index index.html index.htm; ssl_certificate /usr/local/nginx/5220423.pem; ssl_certificate_key /usr/local/nginx/5220423.key; #ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_ciphers on; location / { root /var/www/html; index index.html index.htm; } location /short-video-api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://127.0.0.1:3000;// nodejs項目端口 proxy_redirect default; } }
四,pm2常用命令
詳情參考官網
$ pm2 start app.js # 啟動app.js應用程序 $ pm2 start app.js -i 4 # cluster mode 模式啟動4個app.js的應用實例 # 4個應用程序會自動進行負載均衡 $ pm2 start app.js --name="api" # 啟動應用程序並命名為 "api" $ pm2 start app.js --watch # 當文件變化時自動重啟應用 $ pm2 start script.sh # 啟動 bash 腳本 $ pm2 list # 列表 PM2 啟動的所有的應用程序 $ pm2 monit # 顯示每個應用程序的CPU和內存占用情況 $ pm2 show [app-name] # 顯示應用程序的所有信息 $ pm2 logs # 顯示所有應用程序的日志 $ pm2 logs [app-name] # 顯示指定應用程序的日志 $ pm2 flush # 清空所有日志文件 $ pm2 stop all # 停止所有的應用程序 $ pm2 stop 0 # 停止 id為 0的指定應用程序 $ pm2 restart all # 重啟所有應用 $ pm2 reload all # 重啟 cluster mode下的所有應用 $ pm2 gracefulReload all # Graceful reload all apps in cluster mode $ pm2 delete all # 關閉並刪除所有應用 $ pm2 delete 0 # 刪除指定應用 id 0 $ pm2 scale api 10 # 把名字叫api的應用擴展到10個實例 $ pm2 reset [app-name] # 重置重啟數量 $ pm2 startup # 創建開機自啟動命令 $ pm2 save # 保存當前應用列表 $ pm2 resurrect # 重新加載保存的應用列表 $ pm2 update # Save processes, kill PM2 and restore processes $ pm2 generate # Generate a sample json configuration file