Очень новичок в серверных вещах, извините, если это может быть нубский вопрос.
Проблема
Я пытаюсь запустить 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?).
Не уверен, есть ли концепция, которую я не понял на данный момент, или я все еще что-то упускаю. Или, может быть, у вас просто неправильная конфигурация на данный момент.
Любая помощь приветствуется!