【问题标题】:AWS Codedeploy timesout on ApplicationStart when deploying a node.js / express server部署 node.js / express 服务器时,ApplicationStart 上的 AWS Codedeploy 超时
【发布时间】:2020-03-14 01:05:25
【问题描述】:

我在尝试设置 AWS Codepipline 时遇到了问题。我的 ApplicationStart 脚本调用以启动在端口 60900 上侦听的 express 服务器,但是因为 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 命令的脚本

app/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]

任何帮助将不胜感激。我已经坚持了一天左右。

【问题讨论】:

    标签: node.js bash amazon-web-services aws-code-deploy aws-codepipeline


    【解决方案1】:

    我通过将 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

    【讨论】:

      【解决方案2】:

      问题似乎是节点在后台运行不干净。

      您可以尝试以下方式在 'app/start_app.sh' 中启动节点服务器吗:

      $ nohup node server.js > /dev/null 2>&1 &
      

      另外我建议考虑让您的节点进程成为服务,以便在服务器重新启动时启动它:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-18
        • 2019-11-02
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多