Skip to main content

Deployment

infrastructure

Push to main. It deploys.

Iris runs on a Vultr VPS via Docker Compose. GitHub Actions handles CI checks and auto-deployment on every push to main.

Production stack

ComponentTechnologyPort
FrontendVite + React (nginx)3000
BackendFastAPI (uvicorn)8000
DatabasePostgreSQL 165432
StorageVultr Object Storage (S3-compatible)
GPU workerModal (serverless, optional)

CI pipeline

Every push to main triggers three checks:
  1. typecheckbunx tsc --noEmit on the frontend
  2. CLI tests — 75 unit tests via pytest
  3. backend syntax — AST parse check on all Python files

Deploy pipeline

On push to main (after CI passes):
  1. SSH into Vultr server via ed25519 key
  2. git fetch origin main && git reset --hard origin/main
  3. docker compose build --parallel && docker compose up -d
  4. Health check: polls /api/health until backend responds
  5. docker image prune -f to clean up old images

Docs pipeline

On push to main (if non-docs files changed):
  1. Feeds the git diff to Gemini
  2. Gemini analyzes what documentation needs updating
  3. Commits and pushes doc changes automatically
  4. Mintlify auto-redeploys from docs/

Server layout

/opt/iris/              # git repo
/opt/iris/infra/        # docker-compose.yml
/opt/iris/.env          # production environment

Docker Compose services

  • frontend — builds from infra/Dockerfile.frontend, serves on port 3000
  • backend — builds from infra/Dockerfile.backend, serves on port 8000, reads .env
  • db — PostgreSQL 16 Alpine with persistent volume
  • gpu-worker — optional, activated with --profile gpu

GitHub secrets

SecretPurpose
DEPLOY_HOSTVultr server IP
DEPLOY_SSH_KEYEd25519 private key for SSH
GEMINI_API_KEYFor auto-docs agent