Nuxt deploy
Шаг 1. Установка менеджера процессов pm2
Для того, чтобы управлять процессами и приложениями, запущенными в среде Node.js, а также автоматического их запуска после перезагрузки сервера, нам понадобится менеджер процессов Node.js, который мы установим глобально в систему через пакетный менеджер npm. Пакет называется pm2:
npm install -g 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

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

Вставляем туда следующее содержимое и сохраняем комбинацией клавиш 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-версию:

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

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

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

[Дополнительно] Графический интерфейс pm2 вне терминала
Для запуска веб-интерфейса управления процессами pm2 необходимо зарегистрироваться на сайте pm2.io и создать Bucket.
Будем считать, что есть существующий аккаунт и Bucket (инструкцию можно почитать на оф. сайте pm2).
Вводим команду для подключения к веб-интерфейсу:
pm2 plus
На первом этапе pm2 спросит, есть ли у Вас аккаунт pm2.io (в нашем случае есть и мы вводим букву y и жмем клавишу Enter

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

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

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

Шаг 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

Теперь можно перезагрузить веб-сервер*:
a2ensite ваш_домен
systemctl reload apache2
* В команде a2ensite ваш_домен не обязательно указывать расширение конфигурационного файла
Смотрим результат

Как видим — приложение успешно открывается на необходимом нам адресе и стандартном порту веб-сервера Apache2
Шаг 4. Тестирование работы pm2
Теперь необходимо проверить, срабатывает ли автоматический запуск приложений менеджером pm2 после перезагрузки сервера.
Для этого в терминале пропишем команду init 6, либо перезагрузим сервер в панели управления хостингом.
Шаг 1. Установка менеджера процессов pm2
Для того, чтобы управлять процессами и приложениями, запущенными в среде Node.js, а также автоматического их запуска после перезагрузки сервера, нам понадобится менеджер процессов Node.js, который мы установим глобально в систему через пакетный менеджер npm
Проверенный хостинг
Международный хостинг-провайдер, аккредитованный национальный и международный регистратор доменных имён.
Сервис, предоставляющий широкий спектр услуг в области веб-хостинга и виртуальных серверов.