Процесс разворачивания сайта на Ubuntu

1. Подключение к серверу: ssh Логин@IPv4

2. Вводим пароль

3. Обновление системы apt update && apt upgrade -y

4. Установка Nginx: apt install nginx -y

4.1 Запуск Nginx: systemctl start nginx

4.2 Добавить Nginx в автозагрузку: systemctl enable nginx

5. Скачать NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

5.1 Активация NVM: source ~/.bashrc

5.2 Установка Node.js: nvm install --lts

5.3 Выбор версии: nvm use --lts

6. Установка PM2: npm install -g pm2

7. Клонирование репозитория:

7.1 Создание директории: mkdir -p /var/www

7.2 Переход в директорию: cd /var/www

7.3 Клонирование репозитория: git clone https://github.com/ваш-репозиторий.git

7.4 Переход в проект: cd {Название проекта}

8. Установка зависимостей: npm install

9. Билд: npm run build

10. Запуск: pm2 start npm --name "Имя процесса(Название проекта)" -- start

10.1 Сохраниние конфигурации:

10.1.1 pm2 save

10.1.2 pm2 startup

11. Сознание nginx конфига: nano /etc/nginx/sites-available/{Домен}

Пример конфига:

# Редирект с HTTP на HTTPS
server {
    listen 80;
    server_name {{ДОМЕН}};
    return 301 https://$server_name$request_uri;
}

# HTTPS сервер
server {
    listen 443 ssl http2;
    server_name {{ДОМЕН}};

    ssl_certificate /etc/ssl/certs/{{ДОМЕН}}.crt;
    ssl_certificate_key /etc/ssl/private/{{ДОМЕН}}.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://localhost:3000;
        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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

11.1 Активация сайта: ln -s /etc/nginx/sites-available/{ДОМЕН} /etc/nginx/sites-enabled/

11.2 Проверяем конфигурацию на ошибки: nginx -t

11.3 Перезагрузка Nginx: systemctl reload nginx

12. Установка сертификатов:

12.1 Скачивание с локального компьютера

12.1.1 Сертификат: scp /путь/к/файлу.crt {ЛОГИН}@{IPv4}:/etc/ssl/certs/{ДОМЕН}.crt

12.1.2 Приватный ключ: scp /путь/к/файлу.key {ЛОГИН}@{IPv4}:/etc/ssl/private/{ДОМЕН}.key

12.1.3 Установка прав на сертификат: chmod 644 /etc/ssl/certs/{ДОМЕН}.crt

12.1.4 Установка прав на приватный ключ: chmod 600 /etc/ssl/private/{ДОМЕН}.key

12.2 Через Certbot

12.2.1 Установка: apt install certbot python3-certbot-nginx -y

12.2.2 Получение сертификата: certbot --nginx -d {ДОМЕН}

13. Перезагрузка: systemctl reload nginx

14. Проверки:

14.1 pm2 list:

  • status должен быть online
  • name — ваше приложение есть в списке

14.2 systemctl status nginx: Показывает статус Nginx

14.3 ss -tlnp | grep -E ":80|:443": Проверяет, какие программы слушают порты 80 (HTTP) и 443 (HTTPS)

14.4 curl -I https://localhost -k: Проверяет, отвечает ли HTTPS локально

15. Обновление проекта:

  • cd /var/www/{Папка}
  • git pull origin main
  • npm install
  • npm run build
  • pm2 restart {Имя процесса}