Nuxt deploy

Шаг 1. Установка менеджера процессов pm2

Для того, чтобы управлять процессами и приложениями, запущенными в среде Node.js, а также автоматического их запуска после перезагрузки сервера, нам понадобится менеджер процессов Node.js, который мы установим глобально в систему через пакетный менеджер npm. Пакет называется pm2:

npm install -g pm2

При успешной установке мы увидим следующее:

Успешная установка пакета pm2
Успешная установка пакета pm2

При помощи команды pm2 -h можно посмотреть список доступных команд

Шаг 2. Запуск Node.js-приложения (в нашем случае — Nuxt.js-приложения)

Я создам новое приложение на Nuxt.js для демонстрации работы. Можно запустить таким же образом любое Node.js-приложение, как новое, только что созданное, так и уже готовое приложение.

Примечание. Установку Nuxt.js описывать не буду, так как приложение новое и установка стандартная. Она написана на официальном сайте проекта, у которого есть русская версия документации

Nuxt.js проект по-умолчанию запускается в двух режимах:

  • В режиме разработки — npm run dev
  • В режиме продакшена — npm run start

Есть еще режим static, который запускается через команду npm run generate. Но я его рассматривать не буду, так как он не используется для постоянного запуска приложения через Node.js

Я же не буду сразу запускать это приложение одной из этих команд, а сразу воспользуюсь менеджером pm2

Для этого перейдем в папку с проектом и запустим команду инициализации менеджера pm2:

pm2 init
pm2 сообщает об успешной генерации файла экосистемы
pm2 сообщает об успешной генерации файла экосистемы

Открываем файл ecosystem.config.js прямо в терминале через редактор nano командой и удаляем все содержимое:

nano ecosystem.config.js

для Nuxt 3 переименовываем в ecosystem.config.cjs
Пустой файл ecosystem.config.js с удаленными стандартными значениями
Пустой файл ecosystem.config.js с удаленными стандартными значениями

Вставляем туда следующее содержимое и сохраняем комбинацией клавиш Ctrl+O, затем жмем Enter:

module.exports = {
  apps : [
    {
      name: "project-dev-3022_n20",
      script: "npm",
      args: "run dev"
    },
    {
      name: "project-prod-3023_n18",
      script: "npm",
      args: "run start"
    }
  ]
}

где 3023 — порт, n18 — версия node js

Для Nuxt 3 нужно добавить в package.json

"start": "nuxt start"

pm2 start ecosystem.config.js --only project-prod-3023

Для запуска prod-версии:

npm run build && PORT=3023 pm2 start ecosystem.config.js --only project-prod-3023_n18

Ошибка sh: 1: nuxt: Permission denied решается так:

chown -R root:root .

Я, для примера, запущу Dev-версию:

Запущена dev-версия NuxtJS-приложения через pm2
Запущена dev-версия NuxtJS-приложения через pm2

Для последующей остановки/запуска приложения не нужно будет заходить в папку с проектом и запускать командой выше. Достаточно будет ввести название приложения из монитора pm2:

pm2 start nuxt-dev

для запуска, либо

pm2 stop nuxt-dev 

для остановки приложения.

Для просмотра всех запущенных NodeJS-приложений посредством pm2 небходимо ввести в терминал следующую команду:

pm2 status
Статус-панель pm2
Статус-панель pm2

Для просмотра монитора процессов:

pm2 monit
Моинтор pm2
Моинтор pm2

Подключаем автоматический запуск приложений через pm2 после перезагрузки сервера:

pm2 startup

и сохраняем изменения:

pm2 save
Запуск автозагрузки и сохранение параметров
Запуск автозагрузки и сохранение параметров

[Дополнительно] Графический интерфейс pm2 вне терминала

Для запуска веб-интерфейса управления процессами pm2 необходимо зарегистрироваться на сайте pm2.io и создать Bucket.

Будем считать, что есть существующий аккаунт и Bucket (инструкцию можно почитать на оф. сайте pm2).

Вводим команду для подключения к веб-интерфейсу:

pm2 plus

На первом этапе pm2 спросит, есть ли у Вас аккаунт pm2.io (в нашем случае есть и мы вводим букву y и жмем клавишу Enter

Есть ли аккаунт pm2.io?
Есть ли аккаунт pm2.io?

Вводим ваш email и пароль от аккаунта.

Если все введено верно, то pm2 попросит Вас выбрать, к какому Bucket подключиться — выбирайте ранее созданный. У меня это TestBucket

Выбор Bucket для подключения приложения к веб-интерфейсу pm2
Выбор Bucket для подключения приложения к веб-интерфейсу pm2

При успешном подключении к Bucket в веб-интерфейсе pm2 появится Ваше приложение(процесс). Там вы сможете посмотреть статистику, сбросить монитор и перезагрузить приложение:

Веб-интерфейс pm2
Веб-интерфейс pm2

Далее нам необходимо повторно добавить в автозагрузку pm2 и сохранить изменения:

pm2 unstartup
pm2 startup
pm2 save
Перезапуск автозагрузки pm2 и сохранение параметров
Перезапуск автозагрузки pm2 и сохранение параметров

Шаг 3. Проксирование Node.js-приложения через Apache2 Proxy

У нас уже запущено приложение на Nuxt.js на порту 3000 (по-умолчанию)

Теперь нам необходимо проксировать его на определенный адрес и стандартный порт 80 (для HTTP).

Для этого установим и включим модуль Apache2 Proxy:

a2enmod proxy_http

И перезагрузим веб-сервер командой:

systemctl restart apache2

Заходим в ручные настройки FastPanel

Затем, чтобы проксировать наше приложение на этот адрес, нам необходимо добавить следующие строки:

ProxyPreserveHost On

ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/

Где :3000 — Ваш порт приложения

Сохраняем изменения комбинацией клавиш Ctrl+O и жмем Enter. Выходим из редактора комбинацией Ctrl+Z

Проксирование 3000 порта
Проксирование 3000 порта

Теперь можно перезагрузить веб-сервер*:

a2ensite ваш_домен
systemctl reload apache2

* В команде a2ensite ваш_домен не обязательно указывать расширение конфигурационного файла

Смотрим результат

Как видим — приложение успешно открывается на необходимом нам адресе и стандартном порту веб-сервера Apache2

Шаг 4. Тестирование работы pm2

Теперь необходимо проверить, срабатывает ли автоматический запуск приложений менеджером pm2 после перезагрузки сервера.

Для этого в терминале пропишем команду init 6, либо перезагрузим сервер в панели управления хостингом.

Шаг 1. Установка менеджера процессов pm2

Для того, чтобы управлять процессами и приложениями, запущенными в среде Node.js, а также автоматического их запуска после перезагрузки сервера, нам понадобится менеджер процессов Node.js, который мы установим глобально в систему через пакетный менеджер npm

Проверенный хостинг

Beget

Международный хостинг-провайдер, аккредитованный национальный и международный регистратор доменных имён.

Timeweb

Сервис, предоставляющий широкий спектр услуг в области веб-хостинга и виртуальных серверов.

Заказать кастомную разработку

Корпоративные порталы
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Мобильные приложения
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Разработка ИТ-продукта
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM