Рейтинг:0

Приложение NodeJs работает при запуске с помощью npm start, но не с PM2

флаг in

Очень новичок в серверных вещах, извините, если это может быть нубский вопрос.

Проблема

Я пытаюсь запустить React и Node/express на сервере. React работает, и когда я запускаю свое приложение node через запуск нпм сервер на самом деле тоже работает, что означает: открытие веб-сайта на IP-адресе w.x.y.z показывает мой веб-сайт, и использование отправки формы достигает серверной части узла. Когда я пытаюсь использовать PM2 для запуска приложения узла, оно не работает. PM2 запустит мое приложение, но я не могу до него добраться ни через веб-сайт, ни через curl локальный хост/апи/....


Рабочий пример с запуском npm

Вывод запуска моего приложения node с запуском npm:
Экспресс-сервер прослушивает порт 3001
Затем, используя curl, я получаю ожидаемое сообщение от бэкэнда:
curl localhost/api/пользователи -> {сообщение: "блабла"}


Неудачный пример с запуском и статусом PM2

С запуск нпм В настоящее время нет я запускаю приложение с помощью следующей команды:
sudo pm2 start app.js -- запустить который затем показывает мне, что он онлайн:

— ... ... - ...
— идентификатор — имя — режим — состояние — процессор — память —
â········································· ‒ â â ¼ ¼ â â ... ¤
— 0 — приложение — форк — 0 — онлайн — 0% — 10,5мб —
â–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– ... ... - â ' â â

Но теперь, используя curl, я получаю ошибку сервера 503:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Unavailable</title>
</head><body>
<h1>Service Unavailable</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
<hr>
<address>Apache/2.4.48 (Ubuntu) Server at localhost Port 80</address>
</body></html>

Сервер на локальном хосте, порт 80 уже заставил меня задуматься, указывает ли это на проблему, но давайте двигаться дальше.


Структура файла

Статические файлы реакции -> /var/www/html/клиент/сборка/
Материал узла -> /var/www/html/сервер/


Конфигурация апача

Конфигурация была изменена, чтобы указать на папку сборки приложения реакции, что также позволило маршрутизатору реакции работать правильно.

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/client/build/

        # following is used for React Router to work properly
        <Directory "/var/www/html/client/build/">
                RewriteEngine on
                RewriteCond %{REQUEST_FILENAME} -f [OR]
                RewriteCond %{REQUEST_FILENAME} -d
                RewriteRule ^ - [L]
                RewriteRule ^ index.html [L]
        </Directory>

        # following is what I thought is the right way to add the possibility to talk to the nodejs backend
        # ServerName localhost
        ProxyPreserveHost on

        ProxyPass /api http://localhost:3001/api
        ProxyPassReverse /api http://localhost:3001/api
...
</VirtualHost>

Выход Netstat

TCP 0 0 127.0.0.1:27017 0.0.0.0:* ПРОСЛУШИВАТЬ
TCP 0 0 127.0.0.53:53 0.0.0.0:* ПРОСЛУШИВАТЬ
TCP 0 0 0.0.0.0:22 0.0.0.0:* ПРОСЛУШИВАТЬ
tcp6 0 0 :::80 :::* СЛУШАТЬ
tcp6 0 0 :::22 :::* СЛУШАТЬ

Вывод состояния UFW

К действию от
-- ------ ----
22 РАЗРЕШИТЬ ВСЕГДА
80 РАЗРЕШИТЬ ВСЕГДА
443 РАЗРЕШИТЬ ВСЕГДА
Nginx HTTP РАЗРЕШИТЬ ВСЕГДА
8080 РАЗРЕШИТЬ ВСЕГДА
3001 РАЗРЕШИТЬ ВСЕГДА
22 (v6) РАЗРЕШИТЬ ВСЕГДА (v6)
80 (v6) РАЗРЕШИТЬ ВСЕГДА (v6)
443 (v6) РАЗРЕШИТЬ ВСЕГДА (v6)
Nginx HTTP (v6) РАЗРЕШИТЬ везде (v6)
8080 (v6) РАЗРЕШИТЬ ВСЕГДА (v6)
3001 (v6) РАЗРЕШИТЬ ВСЕГДА (v6)

Что я пробовал до сих пор

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

Я также попытался изменить настройку apache ProxyPass, добавив порт 3001 к разрешенным портам в UFW (имеет ли это смысл при использовании proxypass?).

Не уверен, есть ли концепция, которую я не понял на данный момент, или я все еще что-то упускаю. Или, может быть, у вас просто неправильная конфигурация на данный момент.

Любая помощь приветствуется!

флаг jp
`netstat` показывает, что нет процессов, прослушивающих порт `3001`. Либо ваше приложение не запущено, либо оно не прослушивает порт 3001.
Tommy avatar
флаг in
Хорошо, тогда это может быть проблемой.Я уже пытался использовать такой флаг порта, как `sudo pm2 start app.js -- start --port 3001`, который ничего не меняет. Может ли это быть проблемой в моем приложении node?
флаг jp
Вам необходимо убедиться, что ваше приложение 1) работает 2) прослушивает порт 3001. Вы можете проверить это с помощью `netstat`.
Tommy avatar
флаг in
Ваши комментарии привели меня к (глупому) решению, это была простая ошибка при запуске приложения с PM2. Вы можете добавить это как ответ, чтобы я мог принять его как решение :), затем я прокомментирую точную проблему, которую я нашел.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.