Next.js на виртуальной машине Cloud.ru
Платформа Cloud.ru предоставляет удобные инструменты для создания и управления виртуальными машинами. В этом руководстве мы рассмотрим процесс развертывания приложения Next.js: начиная с создания сервера, установки окружения и правил безопасности, заканчивая запуском приложения через PM2 и настройкой SSL-сертификата.
1. Регистрация и создание виртуальной машины в Cloud.ru
Регистрация
- Перейдите на console.cloud.ru.
- Создайте учетную запись, указав контактные данные и способ оплаты.
- Подтвердите e-mail для активации аккаунта.
Создание виртуальной машины
- Войдите в личный кабинет Cloud.ru.
- Перейдите в раздел Виртуальные машины → Создать ВМ → Получить ВМ бесплатно.
- В качестве образа выберите Ubuntu 24.04 (рекомендуется, как самая свежая LTS-версия) или Ubuntu 22.04.
- Обязательно подключите внешний IP-адрес (без него доступ к приложению из интернета невозможен; в Cloud.ru внешний IP стоит около 150 ₽/мес).
- Задайте имя пользователя (например,
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 сайт.