Деплой Nextjs, nodejs, два сайта и SSL

Деплой Nextjs, nodejs, два сайта и SSL

Разворачивание nextjs на vps c nodejs, двумя сайтами и SSL.

  1. Устанавливаем Nodejs и NPM
  2. Разворачиваем свой проект из Git
  3. Устанавливаем pm2 для демонизации, запускаем демонов (‡▼益▼)
  4. Устанавливаем nginx, настраиваем сервера
  5. Ставим сертификат через Certbot

Nodejs нужной версии через nvm

Скачиваем

Github NVM

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

После установки я запускал

source ~/.nvm/nvm.sh

Ещё пишут про

source ~/.bashrc

Затем выбираете из списка нужную версию или ставите LTS

nvm list-remote
nvm install --lts
nvm use ВАША_НОВАЯ_ВЕРСИЯ

В процессе установки nodejs вылезала ошибка (из-за того что сразу через nvm не начал ставить)

npm -v o/p : Error: bash: /usr/local/bin/npm: No such file or directory

Запустил which npm, затем npm -v отработал корректно и можно было продолжать

Установить pm2

npm install pm2 -g
pm2 startup ubuntu
выполнить команду которая появится
pm2 save

Если не установлен Nginx

sudo apt-get update
sudo apt-get install nginx

Nginx proxy

sudo nano /etc/nginx/sites-available/default

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/html;
    index index.html index.htm;

    location / {
            proxy_pass             http://127.0.0.1:3000;
            proxy_read_timeout     60;
            proxy_connect_timeout  60;
            proxy_redirect         off;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    }
}

Перезапускаем nginx

sudo service nginx restart

Установка SSL сертификата через Certbot

sudo apt-get install snapd
sudo snap install core; sudo snap refresh core
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
sudo certbot renew --dry-run

Проверяем что настроилось

sudo nano /etc/nginx/sites-available/default

Перезагружаем nginx и pm2

sudo systemctl reload nginx
pm2 reload all

Чтобы создать второй сайт в Nginx

Cоздаем папку с проектом, устанавливаем приложение. Заставляем его работать на порту, отличном от 3000.

Для next это команда старта с ключом -p

npx next start -p 4000

и в package.json добавить:

"start": "next start -p 4000"

Я устанавливал Strapi CMS, в корне есть .env файл, там можно изменить константу PORT.

Затем

npm run build

Войти в папку второго сайта

pm2 start npm --name "project_name" -- start

Ещё столкнулся с проблемой редиректа с www на без www. Справился с такой конфигурацией. Оказывается нужно не в 1 сервере писать, а создать 3 варианта.

server {
    server_name example.com www.example.com;

    listen 80;

    return 301 https://example.com$request_uri;
}

server {
    server_name www.example.com;

    listen 443 ssl;

    return 301 https://example.com$request_uri;
}

server {
    server_name example.com;

    listen 443 ssl;

    ... настройки обычного сервера ...
}

После каждого пула:

npm run build
pm2 reload all
Вернуться назад