Self-host
Runs on a box you own.
One compose file, one wildcard DNS record, and a host with Docker. Source and database snapshots stay on your network. There is no hosted version. Yet.
Why self-hosted.
Teams that want real-database previews usually can't ship that data to a vendor. Self-hosted keeps snapshots, secrets, and build logs on infrastructure you already control. Cost-wise, previews are compute, not seats — a $40 VPS handles a dozen-engineer team.
What it needs.
- One Linux host with Docker. 2 vCPU + 4 GB RAM to start.
- Wildcard DNS —
*.preview.yourco.devpointed at the host. - A master key — 32 random bytes. Encrypts secrets. No recovery if lost.
v1 is single-host. Multi-host fleets are roadmap.
Install
Three lines to a working server.
One compose file pulls every control-plane service as a published image. Point a wildcard DNS record at the host and you have previews.
curl -fsSL https://galley.sh/install/docker-compose.yml -o docker-compose.yml
echo "GALLEY_MASTER_KEY=$(openssl rand -hex 32)" > .env
docker compose up -d # On a separate host, after generating a token in
# Admin → Agents → New agent.
sudo docker create --name x galleysh/agent:v1
sudo docker cp x:/usr/local/bin/galley-agent /usr/local/bin/
sudo docker rm x
sudo systemctl enable --now galley-agent Full walk-through with DNS, TLS, and the master key in the quick start docs ↗.
None at all.
No license check, no crash reporting, no usage stats — v1
ships with zero telemetry wired in. Once
docker compose up finishes, the server only
reaches out to services you point it at (GitHub for repos +
webhooks, your DNS provider for ACME challenges, Let's
Encrypt for cert issuance). For air-gapped operation, mirror
the images into a private registry and front the proxy with
your own PKI material; nothing else phones home.
Upgrades and backups.
Upgrade: docker compose pull +
docker compose up -d. Migrations run on boot;
agents reconnect. Forward-only — pin a Postgres backup if you
need to revert.
Backups: dump Postgres the way you already do — every project, env, audit row, and encrypted secret is in there. Back up the master key separately; without it the ciphertext is unrecoverable.