Деплой Next.js приложения на собственный сервер может показаться сложной задачей, особенно если вы ранее не сталкивались с управлением Linux-сервером или настройкой веб-сервера. Однако, следуя пошаговым инструкциям, вы сможете развернуть свое приложение, обеспечить его стабильную работу и защитить соединение с помощью HTTPS. В этой статье рассмотрим весь процесс деплоя: от подключения к серверу по SSH до настройки проксирования через Nginx и установки SSL-сертификата от Let’s Encrypt.
Подключение к серверу
Подключаемся по SSH от имени пользователя root:
ssh root@<IP-адрес_или_домен> -p <порт>
Замените <IP-адрес_или_домен> и <порт> на реальные значения. Если используется стандартный порт (22), параметр -p можно опустить.
Обновление пакетов
sudo apt update
Создание нового пользователя и настройка SSH-доступа
adduser <имя_пользователя>
usermod -aG sudo <имя_пользователя>
Отключитесь от сервера (exit) и скопируйте ваш SSH-ключ в нового пользователя:
ssh-copy-id <имя_пользователя>@<IP-адрес_или_домен>
Подключаемся под новым пользователем:
ssh <имя_пользователя>@<IP-адрес_или_домен>
Отключение доступа по SSH для root
Откройте конфигурационный файл SSH:
sudo nano /etc/ssh/sshd_config
Найдите и измените строку:
PermitRootLogin no
Сохраните файл и перезапустите SSH-сервис:
sudo systemctl restart ssh
Настройка SSH-ключей для доступа к GitHub
Сгенерируйте пару ключей:
ssh-keygen
Скопируйте публичный ключ:
cat ~/.ssh/id_rsa.pub
Добавьте его в Deploy Keys на GitHub (в настройках репозитория: Settings → Deploy keys).
Клонирование репозитория и установка Node.js
git clone <ссылка_на_репозиторий>
cd <директория_проекта>
Установка nvm и Node.js:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
nvm install --lts
Установка зависимостей и сборка проекта
npm ci
npm run build
Установка и настройка PM2 для запуска Next.js
Устанавливаем pm2 глобально:
npm install -g pm2
Запускаем приложение как фоновый процесс:
pm2 start npm --name <название_процесса> -- start
Настраиваем автоматический запуск pm2 при перезагрузке сервера:
pm2 startup
pm2 save
Настройка брандмауэра (UFW)
sudo apt install ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
sudo ufw status verbose
Установка и настройка Nginx
sudo apt install nginx
sudo systemctl enable nginx
sudo systemctl is-enabled nginx
Создайте конфигурационный файл:
sudo nano /etc/nginx/sites-available/<ваш_домен>.conf
Замените ваш_домен на фактическое доменное имя вашего сайта (например, moiseevp.ru).
Пример конфигурации (для домена без www):
server {
listen 80;
server_name <ваш_домен> www.<ваш_домен>;
return 301 https://<ваш_домен>$request_uri;
}
server {
listen 443 ssl;
server_name www.<ваш_домен>;
return 301 https://<ваш_домен>$request_uri;
}
server {
listen 443 ssl;
server_name <ваш_домен>;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
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;
}
}
Активируем конфигурацию:
sudo ln -s /etc/nginx/sites-available/<ваш_домен>.conf /etc/nginx/sites-enabled/
sudo nginx -s reload
Настройка HTTPS с Let’s Encrypt
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d <ваш_домен>
Проверка планировщика обновления сертификатов:
sudo systemctl status certbot.timer
Пробный запуск обновления:
sudo certbot renew --dry-run
Теперь ваше Next.js приложение успешно развернуто на сервере, работает в фоновом режиме с помощью PM2, доступно через доменное имя и защищено SSL-сертификатом. Такой подход обеспечивает стабильность, безопасность и масштабируемость проекта. Надеемся, эта инструкция поможет вам быстрее и увереннее ориентироваться в процессе деплоя. Удачи в разработке и сопровождении вашего веб-приложения!