Next.js на виртуальной машине Cloud.ru

Платформа Cloud.ru предоставляет удобные инструменты для создания и управления виртуальными машинами. В этом руководстве мы рассмотрим процесс развертывания приложения Next.js: начиная с создания сервера, установки окружения и правил безопасности, заканчивая запуском приложения через PM2 и настройкой SSL-сертификата.

1. Регистрация и создание виртуальной машины в Cloud.ru

Регистрация

  1. Перейдите на console.cloud.ru.
  2. Создайте учетную запись, указав контактные данные и способ оплаты.
  3. Подтвердите e-mail для активации аккаунта.

Создание виртуальной машины

  1. Войдите в личный кабинет Cloud.ru.
  2. Перейдите в раздел Виртуальные машиныСоздать ВМПолучить ВМ бесплатно.
  3. В качестве образа выберите Ubuntu 24.04 (рекомендуется, как самая свежая LTS-версия) или Ubuntu 22.04.
  4. Обязательно подключите внешний IP-адрес (без него доступ к приложению из интернета невозможен; в Cloud.ru внешний IP стоит около 150 ₽/мес).
  5. Задайте имя пользователя (например, ubuntu, user1 или любое другое). Этот пользователь будет использоваться для подключения к серверу по SSH и дальнейшей настройки окружения.

2. Подключение к виртуальной машине

Подключаемся по SSH:

ssh username@your_vm_ip

Проверка: если вход выполнен успешно, вы окажетесь в терминале виртуальной машины.

3. Подготовка окружения

Обновление пакетов

sudo apt update && sudo apt upgrade -y

Проверка: команда должна выполниться без ошибок, пакеты будут обновлены.

Установка git

sudo apt install git -y
git --version

Проверка: команда git --version должна вывести номер версии, например git version 2.34.1.

Установка Node.js через nvm

sudo apt install curl -y
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.bashrc
nvm install --lts

Проверка:

node -v
npm -v

Должны выводиться версии Node.js и npm.

Установка Nginx

sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Проверка:

systemctl status nginx

Статус должен быть active (running).

Установка PM2

npm install -g pm2
pm2 --version

Проверка: команда pm2 --version должна вывести номер версии.

4. Подготовка папки для приложения

По умолчанию каталог /var/www принадлежит root. Чтобы можно было работать с ним без sudo, назначим владельца:

sudo chown -R $USER:$USER /var/www

Проверка:

ls -ld /var/www

Владельцем папки должен быть текущий пользователь.

5. Клонирование проекта с GitHub

Переходим в папку:

cd /var/www

Клонируем репозиторий:

git clone https://github.com/username/nextjs-app.git

Проверка: появится папка nextjs-app.

ls /var/www

Переходим в проект и устанавливаем зависимости:

cd nextjs-app
npm install

Собираем приложение:

npm run build

Проверка: должна создаться папка .next в корне проекта.

6. Настройка Nginx для проксирования Next.js

Создаем конфигурацию:

sudo nano /etc/nginx/sites-available/nextjs_app.conf

Пример файла:

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

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        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;
    }

    access_log /var/log/nginx/nextjs_app.access.log;
    error_log  /var/log/nginx/nextjs_app.error.log;
}

Активируем конфигурацию:

sudo ln -s /etc/nginx/sites-available/nextjs_app.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Проверка:

curl -I http://localhost

Должен вернуться код ответа 200 OK или 301 Moved Permanently.

7. Настройка правил безопасности в Cloud.ru

В интерфейсе Cloud.ru → Группы безопасности добавьте правила:

  • HTTP (80/TCP): разрешить всем (0.0.0.0/0)
  • HTTPS (443/TCP): разрешить всем (0.0.0.0/0)

Проверка: сайт должен открываться по IP в браузере (http://your_vm_ip).

8. Установка SSL-сертификата (Let’s Encrypt)

Установим certbot:

sudo apt install certbot python3-certbot-nginx -y

Выпустим сертификат:

sudo certbot --nginx -d example.com -d www.example.com

Проверка: сайт должен быть доступен по https://example.com.

Автообновление:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Проверка: --dry-run должен завершиться без ошибок.

9. Запуск Next.js с помощью PM2

Собираем проект:

cd /var/www/nextjs-app
npm run build

Запускаем через PM2:

pm2 start npm --name "nextjs-app" -- run start

Проверка:

pm2 status

В статусе процесс должен быть online.

Логи:

pm2 logs nextjs-app

Настроим автозапуск:

pm2 startup
pm2 save

Проверка: после перезагрузки сервера приложение должно стартовать автоматически.

10. Проверка работы

Откройте браузер и перейдите по адресу:

  • http://example.com (будет редирект на HTTPS),
  • https://example.com.

Проверка: должен отобразиться ваш Next.js сайт.

nextjscloudrupm2
Обсудим ваш проект?
Не ждите идеального момента или подходящего времени — начинайте прямо сейчас! Свяжитесь со мной, и я помогу воплотить ваши идеи в реальность.