Next.js на VPS: деплой production-приложения
Как задеплоить Next.js на VPS: build, PM2, Nginx reverse proxy, SSL, переменные окружения и zero-downtime. Standalone и Node.js режимы.
Краткий ответ: соберите Next.js (next build), запустите через PM2 на порту 3000, настройте Nginx как reverse proxy с SSL. Для production используйте standalone output — меньше зависимостей на сервере.
Next.js на Vercel — просто. Но когда нужен полный контроль, свой домен без лимитов или интеграция с Redis и PostgreSQL на том же VPS — деплой на сервер логичен.
Выбор режима деплоя
| Режим | Когда | RAM |
|---|---|---|
next start (Node) |
SSR, API routes, ISR | 1–2 GB+ |
| Standalone | Production, меньше node_modules | 512 MB–1 GB |
| Static export | Только SSG, без API | Минимум |
Подготовка VPS
Следуйте первой настройке Ubuntu, установите Node.js 20 LTS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v && npm -v
Standalone build
// next.config.js
module.exports = {
output: 'standalone',
};
npm ci
npm run build
Артефакты: .next/standalone, .next/static, public/.
PM2 для автозапуска
sudo npm install -g pm2
cd .next/standalone
PORT=3000 pm2 start server.js --name nextjs-app
pm2 save
pm2 startup
Подробнее о PM2 — Node.js деплой. Для zero-downtime:
pm2 reload nextjs-app
Nginx reverse proxy
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}
}
SSL — Let’s Encrypt на VPS. Альтернатива Nginx — Caddy.
CI/CD
Автоматизируйте через GitHub Actions или GitLab Runner:
- Push в main
- Build на runner или VPS
- rsync/scp артефактов
pm2 reload
Переменные окружения
# /home/deploy/app/.env.production
DATABASE_URL=postgresql://...
REDIS_URL=redis://127.0.0.1:6379
NEXT_PUBLIC_API_URL=https://api.example.com
Не коммитьте секреты. Для секретов в CI — GitHub Secrets.
Оптимизация production
- Включите gzip/brotli в Nginx
- Кэшируйте
/_next/staticна CDN — Cloudflare - Мониторинг — Uptime Kuma
- Логи — Nginx ошибки
RAM и масштабирование
| Трафик | RAM | PM2 instances |
|---|---|---|
| Pet-проект | 1 GB | 1 |
| 10k визитов/день | 2 GB | 2 (cluster) |
| 100k+ | 4 GB+ | 2–4 + CDN |
Итог
Next.js на VPS — полный контроль над стеком. Standalone + PM2 + Nginx + SSL — проверенная связка для production.
VPS от 2 GB — StormNet Cloud. Базовый деплой — развернуть сайт на VPS.
Рекомендуем прочитать
Частые вопросы
Next.js на VPS или Vercel — что выбрать?
Vercel проще для старта. VPS — когда нужен полный контроль, свой Redis/PostgreSQL на том же сервере или нет лимитов serverless.
Сколько RAM нужно для Next.js на VPS?
Standalone build — от 512 МБ–1 ГБ для pet-проекта. SSR с трафиком — от 2 ГБ. PM2 cluster умножает потребление на число воркеров.






