Deploy NuxtJS SSR на хостинге Beget

Хостинг бегет предоставляет множество возможностей по развертыванию проектов написанных на разных языках. В текущей статье разберемся, как развернуть проект написанный на NuxtJS на продакшене в режиме SSR.

Создание нового NodeJS сайта

Подробнее о настройке сайта под NodeJS можете прочитать в этой статье. Здесь же я кратко пройдусь по основным моментам.

Переходим в панель управления хостинга, открываем сайты, создаём новый сайт. Я для примера его назову node-test.

Подключаемся по ssh.

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

ssh localhost -p 222

Переходим в каталог нового сайта

cd ~/node-test

Далее создаём каталог для проекта (для примера назову его www), а также внутри него каталог tmp. Делаем это всё следующей командой:

mkdir -p www/tmp

Создаём ссылку public указывающую на public_html

ln -s public_html public

Директории под сайт с NuxtJS подготовлены, теперь переходим к самому NuxtJS.

Перенос проекта NuxtJS SSR на хостинг

Подготовка

Для того, чтобы запустить сайт на NuxtJS на хостинге нам потребуется установить nuxt-start. Добавляем его в проект либо через npm либо через yarn.

npm i nuxt-start

# ИЛИ

yarn add nuxt-start

Подготовка проекта завершена.

Теперь переносим проект на хостинг в директорию ~/node-test/www.

Настройка

Создаём файл .htaccess в каталоге public_html со следующим содержимым:

PassengerNodejs /home/первая буква логина/логин/.local/bin/node                 # ЗАМЕНИТЬ НА СВОИ ЗНАЧЕНИЯ
PassengerAppRoot /home/первая буква логина/логин/папка сайта/название_проекта   # ЗАМЕНИТЬ НА СВОИ ЗНАЧЕНИЯ
PassengerAppType node
PassengerStartupFile node_modules/nuxt-start/bin/nuxt-start.js

Теперь переходим в директорию ~/node-test/www пересобираем проект:

node node_modules/nuxt/bin/nuxt.js build

Для того, чтобы Passenger перечитал конфиг, необходимо создать файл tmp/restart.txt. Cделать это нужно в директории, указанной в качестве PassengerAppRoot в файле .htaccess ранее.

touch tmp/restart.txt

Готово! Открываем сайт в браузере и проверяем, что всё работает.