Немного о хостинге
Имея более-менее рабочий прототип, почему бы не выложить его на хостинг, подумал я. Стоит отметить, что хостинг виртуальный и под управлением cpanel. Раньше я не деплоил там node приложения, но, что-то связанное с node там мелькало.
Setup Node.js App
Шаги:
- создал директорию для приложения: /home/myhosting/espia
- создал поддомен: espia.mhost.ru
- в cpanel выбрал опцию Setup Node.js App и нажал кнопку Create Application
- заполнил форму
Изначально поле 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();
После этого приложение запустилось, но к сожалению вебсокеты не работали.
Тут мы видим как транспорт вебсокетов переключается (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. Ну чтож, попытка не пытка.
С такой конфигурацией
К сожалению, это не помогло и проблема осталась. В итоге я плюнул на хостинг, немного переосмыслил идею, и пришел к другому решению. Хоть и локальному но не менее интересному.
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
Продолжение следует ...
