====== Установка приложения на NodeJS - Ackee ======
В данной статье мы будем работать с хостингом через терминал.\\
Предполагается, что вы уже умеете [[ssh|подключаться к терминалу]].
Перед установкой Ackee нам потребуется установить зависимости.
* MongoDB (v4.4 или выше) -- [[mongodb|инструкция по установке MongoDB]]
* NodeJS (v14 или выше) -- [[nodejs|инструкция по установке NodeJS]]
* yarn -- [[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 должен быть запущен, как это описано [[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|инструкции по установке 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-login.png?400|}}
Готово! Сайт работает.\\
Форма авторизации, где необходимо ввести **ACKEE_USERNAME** и **ACKEE_PASSWORD** для дальнейшей эксплуатации приложения.
Скорее всего вы пожелаете, чтобы сайт работал по протоколу HTTPS.\\
Выпустите и установите сертификат Let's Encrypt согласно [[free_ssl|инструкции]].
Затем измените файл **.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]
> [[start|Вернуться к главной странице Wiki]]