Skip to content

Cloud deploy

Primary path: VPS deploy with Docker Compose + Caddy via scripts/deploy-keprix-production.sh.

Contabo shared-nginx / marketing-origin patterns differ from this Caddy-only VPS path. See keprixai.com origin (Cloudflare + Contabo). Do not treat Contabo as identical to the Caddy deploy below. Do not install Keprix Caddy on Contabo 80/443.

bash scripts/generate-production-env.sh --domain https://app.example.com
bash scripts/deploy-keprix-production.sh --bootstrap --domain app.example.com --skip-scout

Keep BACKEND_BIND=127.0.0.1 and FRONTEND_BIND=127.0.0.1. TLS at Caddy (deploy/Caddyfile / template).

DigitalOcean

bash scripts/bootstrap-do-droplet.sh \
  --domain app.example.com \
  --email [email protected] \
  --ssh-key "your-do-ssh-key-name" \
  --ref v0.16.0

Requires a DO SSH key. Cloud-init installs Docker + Caddy from apt repos, clones a pinned ref, and runs the production path. It does not pipe install.sh from the network.

Fly.io (optional helper)

Not one-click. Use fly.fullstack.toml after creating Postgres, Redis, volume, and secrets. See file header. Backend-only sketch: fly.backend-only.toml.

bash scripts/deploy-managed.sh fly

Verified install

See Release signing. The curl installer is the public CLI path for workstations; production VPS uses the deploy scripts above and does not require piping install.sh on the server.

Canary

bash scripts/deploy-keprix-production.sh --domain app.example.com --canary --tag v0.16.1 --skip-scout

Post-deploy

First run, Hardening.