Задать вопрос
@GC8

Как запустить 2 и более приложения в 1-ой папке домена?

При созданий сайта панель создает папку domain/, куда я должен загрузить приложение.
Помимо этого панель просит, чтобы в коде для запуска я указал переменные среды, которая она сама сгенерирует process.env.PORT/HOST. С этим все ок, frontend загрузил и все работает, но с остальными приложениями проблемы. Например я хочу загрузить backend, соответственно приходится создать отдельную папку server, которая уже будет смешана с frontend + добавить эту папку в .gitignore, а так же backend не проксируется и никаких портов для него панель не сгенерирует, поэтому нужно еще и менять NGINX конфиг. Подскажите это вообще нормальный подход, а то мне кажется я что то делаю не то.

P.S А есть ли вообще в этом смысл делать как просит ISPmanager, если все равно приходится лезть в NGINX конфиг?
Мне если честно проще в папке domain/ создать другие папки под каждое приложение типо:
client
backend
bot
...
и в NGINX все настроить под себя.
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@GC8 Автор вопроса
Помучался я с этой панелью.
В общем встроенный обработчик NodeJS не подойдет, я попробовал способы, которые описал в своем вопросе и они не работают, а конкретней если в /domain будет отсутствовать nodejs приложение (package.json), то изменить NGINX конфиг ISPmanager вам просто не даст. Будет каждый раз выводится ошибка независимо оттого правильный nginx конфиг у вас или нет: "Поле '' имеет недопустимое значение".

+ Я так же попробовал у сгенерированного конфига изменить proxy_pass

location @fallback {
proxy_pass http://127.0.0.1:10000; # Изменил на свой порт 5000
}

В результате отредактировать конфиг нельзя по причиние: "Поле '' имеет недопустимое значение". И это в обоих случаях с сокетом и портом.

Я пытался обойти это и каким то образом получилось, но в консоли будут сыпаться ошибки каждый раз когда вы обращаетесь к своему сайту типа "не удалось найти файлы приложения nodejs и т п".

Решение:
Сразу говорю, что я не силен в linux и возможно какие-то пункты покажутся странными.

1. Выдаем через root аккаунт в панели "Shell клиент" аккаунту, который владеет сайтом. В моем случае это admin.
2. В качестве обработчика для сайта указываем: "Не используется"
3. Заходим в панель через аккаунт admin и выбираем "Shell-клиент". После нажатия на пункт у вас должна открыться консоль.
4. Устанавливаем nodejs (я установил через NVM) и pm2
5. Выполняем след.код для того чтобы занести эти настройки в .bashrc

echo 'export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"' >> ~/.bashrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc
echo 'nvm use 18.13.0' >> ~/.bashrc


Обратите внимание, что на последней строке я указал свою версию nodejs, вы можете ее заменить на свою.

5. Выполняем подобный код только уже для pm2

echo 'pm2 startup' >> ~/.bashrc

6. Переходим в директорию вашего сайта (Например: cd www/domain) и устанавливаете свои приложения запуская их через pm2.

7. Возвращаемся в аккаунт root и переходим в раздел "Файл конифгурации" вашего сайта, где добавляем в существующий NGINX конфиг свои настройки.
В моем случае:

location / {
    proxy_pass http://localhost:5000; # Порт на котором запускается node.js приложение
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
location /api {
    proxy_pass http://localhost:6000; # Порт на котором запускается node.js приложение
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}


Единственный минус это при каждой авторизаций в shell клиент нужно выполнять команду: source ~/.bashrc для того чтобы нам был доступен node и pm2
Ответ написан
Комментировать
ispmanager
@ispmanager
Панель управления веб-сервером и сайтами
Интересный кейс в контексте ispmanager.
А не думали попробовать решить эту задачу путем использования поддоменов?
Frontend на основном домене сайта, backend на втором и bot на третьем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы