Requirements on the host
- PostgreSQL 13 or newer. Migrations are embedded and applied automatically at startup.
- Docker. Runs execute on the host’s Docker daemon.
- git. Repositories are cloned with the
gitbinary.
Evaluate with Docker Compose
The Keel repository ships a compose file that starts PostgreSQL andkeel-cloud together:
./keel-data at the same path on both sides. That last part
is not cosmetic: runs go through the host daemon, and the engine bind-mounts
run workspaces by path, so a path that only exists inside the container
would mount empty.
Run the binary
keel-cloud for Linux (amd64 and arm64) is in every
release as
keel-cloud_<version>_linux_<arch>.tar.gz, or build it from source with
make build-cloud.
EnvironmentFile is the usual
production shape.
Run the container image
keel-cloud, git, and the Docker CLI. As with compose,
KEEL_DATA_DIR must be a host directory mounted at the same path.
Configuration
The complete table, including every GitHub App variable, is in the
configuration reference.
Behind a reverse proxy
Terminate TLS in front ofkeel-cloud with Caddy, nginx, or Traefik and set
KEEL_BASE_URL to the public https:// URL. Live logs use server-sent
events; if your proxy buffers responses by default, disable buffering for
/orgs/*/repos/*/runs/*/events. With nginx:
GET /healthz returns ok when the database is reachable and is the right
target for load balancer and uptime checks.
Backups
Everything durable is in PostgreSQL plus the encryption key. A nightlypg_dump and a copy of KEEL_ENCRYPTION_KEY in your secret store is a
complete backup. KEEL_DATA_DIR holds only transient clones and can be
recreated.