Деплой Next.js приложения
Деплой 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-сертификатом. Такой подход обеспечивает стабильность, безопасность и масштабируемость проекта. Надеемся, эта инструкция поможет вам быстрее и увереннее ориентироваться в процессе деплоя. Удачи в разработке и сопровождении вашего веб-приложения!



