AWS Тайм-аут развертывания кода на ApplicationStart при развертывании сервера node.js / express - PullRequest
0 голосов
/ 13 марта 2020

Я столкнулся с проблемой при попытке установить AWS Codepipline. Мой сценарий ApplicationStart выполняет вызов, чтобы запустить сервер express, прослушивающий порт 60900, но поскольку express .listen () удерживает командную строку, в то время как он прослушивает время ожидания сценария ApplicationStart, и мое развертывание завершается неудачно.

Я попытался переместить его в фоновый процесс с помощью символа & в конце команды, запускающей сервер, но я все еще получаю сообщение об ошибке в ловушке ApplicationStart.

Когда я запускаю сценарий start_server. sh вручную, он почти мгновенно запускает сервер и возвращает мне контроль над командной строкой.

appspe c .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

scripts / start_server. sh

#!/usr/bin/env bash

NODE_ENV=production npm start --prefix /var/www/mbmbam.app/app

Сценарий, назначенный npm команде запуска

app / start_app. sh

#!/bin/sh

if [ "$NODE_ENV" = "production" ]; then
  node server.js & 
else
  nodemon --ignore './sessions' server.js;
fi

AWS Ошибка развертывания кода

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]

Любая помощь приветствуется. Я застрял на этом в течение дня или около того.

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Я решил это, изменив 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- процессы

0 голосов
/ 13 марта 2020

Кажется, что проблема заключается в том, что узел не работает корректно в backgroud.

Можете ли вы попробовать следующий способ запустить сервер узлов в 'app / start_app. sh':

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

Также я бы посоветовал взглянуть на то, как заставить ваш узел обрабатывать сервис, чтобы он запускался при перезагрузке сервера:

...