[英]AWS Codedeploy timesout on ApplicationStart when deploying a node.js / express server
我在嘗試設置 AWS Codepipline 時遇到了問題。 我的 ApplicationStart 腳本調用以啟動偵聽端口 60900 的快速服務器,但是因為 express.listen() 在偵聽 ApplicationStart 腳本時保持命令行狀態並且我的部署失敗。
我嘗試在啟動服務器的命令末尾使用 & 將它移動到后台進程,但我仍然在 ApplicationStart 掛鈎處收到錯誤。
當我手動運行 start_server.sh 腳本時,它幾乎立即啟動服務器並讓我重新控制命令行。
appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /var/www/mbmbam.app/
hooks:
BeforeInstall:
- location: scripts/stop_server.sh
timeout: 300
runas: root
- location: scripts/remove_previous.sh
timeout: 300
runas: root
AfterInstall:
- location: scripts/change_permissions.sh
timeout: 300
runas: root
- location: scripts/install_app.sh
timeout: 300
runas: root
- location: scripts/install_db.sh
timeout: 300
runas: root
ApplicationStart:
- location: scripts/start_server.sh
timeout: 300
runas: ubuntu
腳本/start_server.sh
#!/usr/bin/env bash
NODE_ENV=production npm start --prefix /var/www/mbmbam.app/app
分配給 npm start 命令的腳本
應用程序/start_app.sh
#!/bin/sh
if [ "$NODE_ENV" = "production" ]; then
node server.js &
else
nodemon --ignore './sessions' server.js;
fi
AWS Codedeploy 錯誤
LifecycleEvent - ApplicationStart
Script - scripts/start_server.sh
[stdout]
[stdout]> mbmbam-search-app@1.0.0 start /var/www/mbmbam.app/app
[stdout]> ./start_app.sh
[stdout]
任何幫助,將不勝感激。 我已經堅持了一天左右。
我通過將 start_app.sh 更改為
#!/bin/sh
if [ "$NODE_ENV" = "production" ]; then
node server.js > app.out.log 2> app.err.log < /dev/null &
else
nodemon --ignore './sessions' server.js;
fi
看起來 AWS 甚至在此處的故障排除步驟中列出了它: https : //docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting-deployments.html#troubleshooting-long-running-processes
問題似乎是節點在背景中沒有干凈利落。
您可以嘗試以下方式在“app/start_app.sh”中啟動節點服務器:
$ nohup node server.js > /dev/null 2>&1 &
此外,我建議考慮讓您的節點處理服務,以便在服務器重新啟動時啟動它:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.