Web игрa Spy на Node.JS, Angular и Websockets (Часть 5)

Немного о хостинге

Имея более-менее рабочий прототип, почему бы не выложить его на хостинг, подумал я. Стоит отметить, что хостинг виртуальный и под управлением cpanel. Раньше я не деплоил там node приложения, но, что-то связанное с node там мелькало.

Setup Node.js App

cpanel Setup Node.js App

Шаги:

- создал директорию для приложения: /home/myhosting/espia

- создал поддомен: espia.mhost.ru

- в cpanel выбрал опцию Setup Node.js App и нажал кнопку Create Application

- заполнил форму

form

Изначально поле Application startup file я заполнил как server.js, но cpanel при старте приложения выдавал ошибку

Error [ERR_REQUIRE_ESM]: require() of ES Module /home/myhosting/espia/server.js from /usr/share/passenger/helper-scripts/node-loader.js not supported.

Для того чтобы исправить эту ошибку пришлось создать файл загрузчик приложения loader.cjs с таким содержимым:

async function loadApp() {

    await import('./server.js');

}

loadApp();  

После этого приложение запустилось, но к сожалению вебсокеты не работали.

websockets error

Тут мы видим как транспорт вебсокетов переключается (is downgraded) на long polling requests. Изучив немного вопрос, я пришел к выводу, что проблема связана с настройками (а вернее с их отсутствием) apache веб сервера для passenger-а как reverse proxy. Возможное решение описывается тут: https://socket.io/docs/v4/reverse-proxy. Несколько недель я боролся с поддержкой хостинга, но всё что они могли предложить, это: https://support.cpanel.net/hc/en-us/articles/1500000615942-Getting-Started-with-Socket-IO-and-NodeJS-10-on-cPanel, что так же не работало, и сводилось к моей же изначальной проблеме. Однако там предлагалось использовать другую опцию cpanel, Application manager. Ну чтож, попытка не пытка.

Application manager

С такой конфигурацией

Application manager conf

К сожалению, это не помогло и проблема осталась. В итоге я плюнул на хостинг, немного переосмыслил идею, и пришел к другому решению. Хоть и локальному но не менее интересному.

TERMUX

Как оказалось, в сети существует бесплатное приложение под Android, которое цитирую: "сочетает в себе мощную эмуляцию терминала с обширной коллекцией пакетов Linux", читаем: "позволяет хостить (будь то планшет или телефон, или ещё чего) приложения на Node". И гордо зовётся оно: Termux.

Я без проблем установил его на планшет, впервые развернул новую силиконовую bluetooth клавиатуру, долгие годы пролежавшую до этого в коробочке,  сделал update + upgrade, установил node, vim и git.

mkdir projects/espia -> cd

Скачал через git своё приложение (предварительно захостив его в гит репозитории). Получил ip планшета (команда ifconfig), запустил приложение, подключился по ip c телефона, и всё заработало!

Ниже команда для копирования (не клонирования) сурс кода из гит репозитория.

git archive --format=tar --remote=ssh://hostinguser@hostingip:port/home/myhosting/gitrepo/espia master | tar -xf –

npm i

node server.js или

nodemon server.js

Продолжение следует ...

Leave a Reply

Your email address will not be published. Required fields are marked *