Skip to content

Sample deployments

The project’s own Confabulous Code instances run on two different stacks. Both configurations are public and you can copy from them.

The free managed instance at code.confabulous.dev runs on Fly.io, using:

  • App + worker as separate Fly processes from a single image.
  • Tigris (Fly Object Storage) for S3-compatible session-blob storage.
  • Neon as the managed Postgres provider — connection string passed in as DATABASE_URL (a Fly secret).
  • Resend for share-invitation email.
  • Anthropic for Smart Recaps.

The full configuration lives in the repo at fly.toml, with the deploy script at deploy-to-fly.sh.

Notable choices for a Fly.io deployment:

  • Two [[vm]] blocks — one for the app process (auto-stop enabled), one for the always-on worker singleton.
  • S3_ENDPOINT = "fly.storage.tigris.dev" for Tigris, with S3_USE_SSL = "true".
  • Secrets (AWS_*, CSRF_SECRET_KEY, RESEND_API_KEY, and ANTHROPIC_API_KEY or OPENAI_API_KEY for the smart recap provider) are set via fly secrets set, not in fly.toml.
  • auto_stop_machines = 'stop' plus min_machines_running = 1 keeps response latency low while letting unused machines stop on idle.
Terminal window
# One-time:
fly launch # or `fly deploy` if the app already exists
# Run database migrations against the production DB, then deploy:
export PRODUCTION_DATABASE_URL='postgresql://user:pass@host/db?sslmode=require'
./deploy-to-fly.sh

demo.confabulous.dev runs on a ~$7/month Linode Nanode (1 GB + backups). The full infra-as-code lives in ConfabulousDev/confab-demo-site — the Deployment walkthrough stack plus Demo mode, Caddy for HTTPS, and MAX_USERS=0.

What’s in the repo:

  • stack/ — docker-compose.yml and Caddyfile.
  • tofu/ — OpenTofu for the Linode VM and firewall. cloud-init.yaml.tftpl renders stack/ plus secrets into /opt/confab/ on first boot and starts the stack via systemd. ignore_changes = [metadata] keeps later applys from rebuilding the VM.
  • scripts/deploy.sh — image and compose updates. Infra goes through tofu apply; secrets are edited in /opt/confab/.env on the VM.

Cloudflare DNS is added by hand so no DNS token lives in the repo.

If you want… Use
Managed PaaS, scale-to-zero, minimal ops Fly.io (or similar — Railway, Render)
Full control of a VM, low monthly cost Linode VPS (or DigitalOcean, Hetzner) + Docker Compose + Caddy
Enterprise infra, OIDC SSO Bring your own — k8s, ECS, etc. Confabulous Code is just a single Docker image plus Postgres + S3.