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
| Component | Technology | Port |
|---|---|---|
| Frontend | Vite + React (nginx) | 3000 |
| Backend | FastAPI (uvicorn) | 8000 |
| Database | PostgreSQL 16 | 5432 |
| Storage | Vultr Object Storage (S3-compatible) | — |
| GPU worker | Modal (serverless, optional) | — |
CI pipeline
Every push to main triggers three checks:- typecheck —
bunx tsc --noEmiton the frontend - CLI tests — 75 unit tests via pytest
- backend syntax — AST parse check on all Python files
Deploy pipeline
On push to main (after CI passes):- SSH into Vultr server via ed25519 key
git fetch origin main && git reset --hard origin/maindocker compose build --parallel && docker compose up -d- Health check: polls
/api/healthuntil backend responds docker image prune -fto clean up old images
Docs pipeline
On push to main (if non-docs files changed):- Feeds the git diff to Gemini
- Gemini analyzes what documentation needs updating
- Commits and pushes doc changes automatically
- Mintlify auto-redeploys from
docs/
Server layout
Docker Compose services
frontend— builds frominfra/Dockerfile.frontend, serves on port 3000backend— builds frominfra/Dockerfile.backend, serves on port 8000, reads.envdb— PostgreSQL 16 Alpine with persistent volumegpu-worker— optional, activated with--profile gpu
GitHub secrets
| Secret | Purpose |
|---|---|
DEPLOY_HOST | Vultr server IP |
DEPLOY_SSH_KEY | Ed25519 private key for SSH |
GEMINI_API_KEY | For auto-docs agent |