Содержание
Установка приложения на NodeJS - Ackee
В данной статье мы будем работать с хостингом через терминал.
Предполагается, что вы уже умеете подключаться к терминалу.
Перед установкой Ackee нам потребуется установить зависимости.
- MongoDB (v4.4 или выше) – инструкция по установке MongoDB
- NodeJS (v14 или выше) – инструкция по установке NodeJS
- yarn – инструкция по установке yarn
Установка Ackee
Официальный репозиторий приложения на github: https://github.com/electerious/Ackee
Создаем директорию для будущего приложения на nodeJs – Ackee, скачиваем последний релиз:
mkdir -p ~/nodejs-apps cd ~/nodejs-apps wget https://github.com/electerious/Ackee/archive/refs/tags/v3.4.1.tar.gz tar -xvf v3.4.1.tar.gz rm v3.4.1.tar.gz -f
Создадим пользователя сервера баз данных MongoDB.
Сервер MongoDB должен быть запущен, как это описано в инструкции по установке и запуску сервера.
Порт и имя основного пользователя могут отличаться:
$ mongosh --port 27100 -u admin Enter password: > use ackee switched to db ackee ackee> db.createUser( { user: "ackee", pwd: "123456789", roles: [ { role: "readWrite", db: "ackee" } ] } ) ackee> .exit
Мы создали пользователя «ackee» с паролем «123456789» для базы «ackee» с правами «readWrite».
Далее, в соответствие с инструкцией Ackee, нам необходимо создать файл с именем .env в корневой директории программы:
cd ~/nodejs-apps/Ackee-3.4.1/ touch .env
Откроем файл в редакторе nano и добавим в него начальную конфигурацию:
$ nano .env ACKEE_MONGODB=mongodb://ackee:123456789@localhost:27100/ackee ACKEE_PORT=8100 ACKEE_USERNAME=admin ACKEE_PASSWORD=hardpassword ACKEE_ALLOW_ORIGIN=http://example.com,https://example.com
Описание параметров:
ACKEE_MONGODB – строка подключения к MongoDB, порт сервера 27100 может отличаться.
ACKEE_PORT – выберите порт приложения Ackee в рекомендуемом диапазоне 8000-10000.
ACKEE_USERNAME – желаемое имя пользователя панели управления Ackee.
ACKEE_PASSWORD – желаемый пароль для пользователя ACKEE_USERNAME.
ACKEE_ALLOW_ORIGIN – перечисление доменов, которые будут использовать трекер для аналитики.
Ackee поддерживает автоматическую настройку Access-Control-Allow-Origin заголовка с опцией ACKEE_AUTO_ORIGIN=true, но на момент написания статьи опция не работала должным образом.
Сохраним файл комбинацией клавиш CTRL+O, далее: CTRL+X для выхода из nano.
Установим зависимые пакеты:
yarn install
Протестируем запуск сервера командой yarn start
:
$ yarn start yarn run v1.22.19 warning ../../package.json: No license field $ npm run build && npm run server > ackee@3.4.1 build > node build.js [Ackee] › … awaiting Building and writing 'dist/index.html' [Ackee] › ✔ success Finished building 'dist/index.html' > ackee@3.4.1 server > node src/index.js [Ackee] › … awaiting Connecting to mongodb://localhost:27100/ackee [Ackee] › ✔ success Connected to mongodb://localhost:27100/ackee [Ackee] › ▶ start Starting the server [Ackee] › … watching Listening on http://localhost:8100
Сервер запустился. Остановим его комбинацией клавиш CTRL+C.
Старт приложения через менеджер процессов pm2
Подразумевается, что вы уже установили pm2, когда следовали инструкции по установке MongoDB.
Запустим Ackee через pm2 и сохраним список процессов командой pm2 save
:
$ cd ~/nodejs-apps/Ackee-3.4.1/ $ pm2 start src/index.js --name Ackee [PM2] Starting /home/www/test/data/nodejs-apps/Ackee-3.4.1/src/index.js in fork_mode (1 instance) [PM2] Done. $ pm2 save
Проксирование до приложения на NodeJS
Мы установили и запустили приложение на NodeJS.
Финальным этапом является проксирование на порт приложения 8100.
- В панели управления ISPManager создайте WWW-домен.
- В директории WWW домена создайте файл с именем .htaccess
Добавьте в файл .htaccess следующие строки:
Header set Access-Control-Allow-Methods: "GET,POST,PATH,OPTIONS" Header set Access-Control-Allow-Credentials: true Header set Access-Control-Allow-Headers: "Content-Type, Authorization, Time-Zone" Header set Access-Control-Max-Age: 3600 DirectoryIndex disabled RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://localhost:8100%{REQUEST_URI} [L,P]
Проверка работы
Зайдем по адресу домена в браузере:
Готово! Сайт работает.
Форма авторизации, где необходимо ввести ACKEE_USERNAME и ACKEE_PASSWORD для дальнейшей эксплуатации приложения.
Скорее всего вы пожелаете, чтобы сайт работал по протоколу HTTPS.
Выпустите и установите сертификат Let's Encrypt согласно инструкции.
Затем измените файл .htaccess следующим образом, добавив принудительную переадресацию на HTTPS-протокол:
Header set Access-Control-Allow-Methods: "GET,POST,PATH,OPTIONS" Header set Access-Control-Allow-Credentials: true Header set Access-Control-Allow-Headers: "Content-Type, Authorization, Time-Zone" Header set Access-Control-Max-Age: 3600 DirectoryIndex disabled RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R=301] RewriteRule ^(.*)$ http://localhost:8100%{REQUEST_URI} [L,P]