3 KiB
3 KiB
Деплой Indexium
MVP (один VPS, <$20/мес)
Инфра
- VPS: Hetzner CX22 (2 vCPU, 4GB) или аналог.
- Postgres: Supabase Free / Neon Free / или Docker на том же VPS.
- Redis: Valkey/Redis в Docker.
- Reverse proxy: Caddy (авто TLS) или Nginx.
Компоновка
VPS
├─ Caddy :80/:443 → :3000 (Axum) + :5173 (SvelteKit SSR)
├─ indexium-backend (systemd / docker)
├─ indexium-frontend (adapter-node)
├─ postgres:5432
└─ redis:6379
Docker Compose (prod)
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: indexium
POSTGRES_USER: indexium
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes: [pgdata:/var/lib/postgresql/data]
healthcheck: { test: ["CMD-SHELL", "pg_isready -U indexium"] }
redis:
image: valkey/valkey:8-alpine
command: ["valkey-server", "--save", ""]
healthcheck: { test: ["CMD", "valkey-cli", "ping"] }
backend:
build: ./indexium-backend
env_file: ./indexium-backend/.env
depends_on: [postgres, redis]
ports: ["3000:3000"]
frontend:
build: ./indexium-frontend
environment: { PUBLIC_API_URL: "https://api.indexium.example.com" }
ports: ["5173:3000"]
volumes: { pgdata: {} }
Env (backend)
DATABASE_URL=postgres://indexium:***@postgres:5432/indexium
REDIS_URL=redis://redis:6379
GITHUB_APP_ID=...
GITHUB_APP_PRIVATE_KEY=...
WEBHOOK_SECRET=...
RUST_LOG=info
Деплой шаги
# на VPS
git pull origin main
docker compose -f docker-compose.prod.yml build
docker compose -f docker-compose.prod.yml up -d
# миграции
docker compose exec backend sqlx migrate run
# проверка
curl https://api.indexium.example.com/api/v1/health
Бэкапы
- Postgres: ежедневный
pg_dump+ WAL (PITR если managed). - Хранить 7 дней в S3/R2.
- Тест восстановления раз в месяц.
Мониторинг (MVP минимум)
/health+ Uptime Kuma / Hetrix.- Логи:
journalctl -u indexium-backendилиdocker logs. - Позже: Prometheus + Grafana + Loki.
CI/CD (GitHub Actions)
# .github/workflows/ci.yml
on: [push, pull_request]
jobs:
backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo fmt --check
- run: cargo clippy -- -D warnings
- run: cargo test
frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install --cwd indexium-frontend
- run: bun run check --cwd indexium-frontend
Деплой: on: push: branches: [main] → SSH в VPS → git pull && docker compose up -d (или через Watchtower).
Масштабирование (когда >1k RPS)
- Вынести Worker в отдельный сервис/реплики.
- Postgres read-replica.
- Redis Cluster / NATS JetStream.
- Cloudflare перед API (кэш GET).