Деплой: VPS, Railway, Vercel
Практические инструкции деплоя Node.js-приложения на три типа платформ: VPS (полный контроль), Railway (PaaS, минимальная настройка), Vercel (для frontend и serverless API).
Зачем нужно
Знать несколько способов деплоя полезно: каждый подходит для своих задач. Vercel — мгновенный деплой React/Next.js. Railway — backend + PostgreSQL без администрирования. VPS — максимальный контроль и минимальная стоимость для серьёзных проектов.
Где используется
- Vercel: SPA, Next.js, serverless API
- Railway: Node.js API с базой данных, Discord-боты, сервисы
- VPS: production backend с Docker, сложные конфигурации, несколько сервисов
Основной контент
Деплой на Vercel (Next.js / SPA)
npm install -g vercel
vercel login
# Деплой (первый раз — спросит настройки)
vercel
# Production деплой
vercel --prod
# vercel.json() для React Router SPA
{
"rewrites": [{ "source": "/(.*)", "destination": "/" }]
}
Или через GitHub: Settings → Integrations → GitHub → выбрать репо → каждый push в main деплоится автоматически.
Деплой на Railway
npm install -g @railway/cli
railway login
# В директории проекта
railway init # создать проект
railway up # задеплоить
railway open # открыть в браузере
# Добавить PostgreSQL
railway add --plugin postgresql
# DATABASE_URL автоматически добавится в переменные окружения
# Просмотр логов
railway logs
# Переменные окружения
railway variables set JWT_SECRET=mysecret
railway variables # список
// package.json — Railway автоматически запускает npm start
{
"scripts": {
"start": "node dist/index.js",
"build": "tsc"
}
}
Деплой на VPS (пошагово)
# 1. Подготовка сервера (Ubuntu 22.04)
ssh root@SERVER_IP
# Создать пользователя
adduser deploy
usermod -aG sudo deploy
# Скопировать SSH-ключ для нового пользователя
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy
# Установить Docker
curl -fsSL https://get.docker.com | sh
usermod -aG docker deploy
# Выйти и зайти под deploy
exit
ssh deploy@SERVER_IP
# 2. Клонировать репо и запустить
git clone https://github.com/myuser/myapp.git /var/www/myapp
cd /var/www/myapp
# Создать .env с продакшн-переменными
nano .env
# Запустить через docker-compose
docker compose -f docker-compose.yml up -d
# Проверить
docker compose ps
docker compose logs -f
# 3. Nginx + SSL
sudo apt install nginx certbot python3-certbot-nginx
# Создать конфиг
sudo nano /etc/nginx/sites-available/myapp
# (конфиг reverse proxy → localhost:3000)
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo nginx -s reload
# SSL
sudo certbot --nginx -d myapp.com -d www.myapp.com
Автодеплой на VPS через GitHub Actions
# .github/workflows/deploy.yml
name: Deploy to VPS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.VPS_HOST }}
username: deploy
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/myapp
git pull origin main
docker compose up -d --build
docker image prune -f
Сравнение подходов
| Аспект | Vercel | Railway | VPS |
|---|---|---|---|
| Время до деплоя | 5 минут | 10 минут | 1-2 часа |
| Стоимость | Бесплатно / $20 | $5+ | $3-6/мес |
| Масштабирование | Авто | Авто | Вручную |
| БД | Только внешняя | Встроенная | Self-hosted |
| Контроль | Низкий | Средний | Полный |
Частые ошибки
- Деплоить секреты в Vercel/Railway через открытый репозиторий — использовать только dashboard environment variables
- Не настроить
HEALTHCHECKи readiness — платформа думает что сервис готов до его реальной инициализации - VPS без firewall — открыты все порты, только SSH + 80 + 443 должны быть публичными
- Не делать
docker image pruneна VPS — диск заполняется старыми образами
Связанные темы
- _MOC DevOps
- Деплой -- что происходит
- Хостинг -- сравнение платформ
- Docker для Node.js
- Nginx -- reverse proxy