Приложение pm2 в каталоге с символической ссылкой дает 502 Bad Gateway

У меня есть приложение node.js, настроенное для запуска через pm2 в такой структуре каталогов:

/opt/project/v1/web/index.js
/opt/project/current -> /opt/project/v1

То есть current — это символическая ссылка на v1. Мне нужно pm2, чтобы запустить приложение в current/web, а не в v1/web.

Я сначала сделал это:

cd /opt/project/current/web
pm2 start index.js

Веб-сайт работал нормально, но pm2 разрешил символическую ссылку на /opt/project/v1/web/index.js. Итак, я нашел эту ветку форума о pm2 разрешении символических ссылок, и оттуда я попробовал это вместо этого :

cd /opt/project
pm2 start current/web/index.js

Казалось, что процесс запустился, и pm2 показал его в списке и показал символический путь, за исключением того, что посещение страницы теперь приводит к ошибке 502 (Bad Gateway).

Вывод pm2 show для этой последней попытки:

┌───────────────────┬───────────────────────────────────────┐
│ status            │ online                                │
│ name              │ index                                 │
│ restarts          │ 7                                     │
│ uptime            │ 2s                                    │
│ script path       │ /opt/project/current/web/index.js     │
│ script args       │ N/A                                   │
│ error log path    │ /root/.pm2/logs/index-error-0.log     │
│ out log path      │ /root/.pm2/logs/index-out-0.log       │
│ pid path          │ /root/.pm2/pids/index-0.pid           │
│ interpreter       │ node                                  │
│ interpreter args  │ N/A                                   │
│ script id         │ 0                                     │
│ exec cwd          │ /opt/project                          │
│ exec mode         │ fork_mode                             │
│ node.js version   │ 6.8.1                                 │
│ watch & reload    │ ✘                                     │
│ unstable restarts │ 0                                     │
│ created at        │ 2016-12-03T22:08:58.972Z              │
└───────────────────┴───────────────────────────────────────┘

Подумав, что, возможно, проблема в другом cwd, я попробовал это, также из этой темы:

  1. Создайте файл app.json:

    {
     "apps": [
        {
          "name": "index",
          "script": "index.js",
          "args": [],
          "watch": true,
          "node_args": "",
          "merge_logs": true,
          "cwd": "/opt/project/current/web",
          "env": {
          }
        }
      ]
    }
    
  2. Начните с pm2 start app.json

Когда я сделал это таким образом, результаты были такими же, как и в предыдущей попытке, за исключением того, что pm2 показал правильный cwd, но все равно получил 502.

Кажется, ни один из файлов журнала не показывает никаких ошибок, а pm2 показывает приложение как онлайн.

Я действительно ничего не знаю о node.js или pm2, мне передали существующую систему и поручили немного реорганизовать файловую систему. Теперь у меня есть очень базовые практические знания о командах pm2, но это все.

Итак, мой вопрос: как я могу заставить приложение работать по пути символической ссылки и почему оно отвечает 502, когда я пытаюсь?


person Jason C    schedule 03.12.2016    source источник


Ответы (1)


Ну, я понял это. Я решил это, используя этот файл конфигурации (сохраненный как app.json):

{
    "apps": [
    {
        "name": "index",
        "script": "./index.js",
        "cwd": "/opt/project/current/web",
        "exec_mode": "fork_mode",
        "env": {
        }
    }
    ]
}

И начиная это как:

cd /opt/project
pm2 start current/web/app.json

И это сработало как волшебство, хотя я не уверен, какое именно отличие здесь решило проблему, я не стал тратить время на дальнейшее расследование.

person Jason C    schedule 04.12.2016