Operations
Everything here is a summary. The runbooks in the Hill90 repository are the procedures; they change in the same pull request as the code they describe, and CI checks them.Deploying
Three stacks, deployed independently:docker-compose.infra.yml creates the
three Docker networks the other stacks attach to as external. Vault deploys before
anything meant to read secrets from it, and deploy.sh vault auto-unseals after compose
up. Observability has no dependencies.
Each stack has its own Compose project name (hill90-{env}-{stack}), so an errant
docker compose down cannot reach across stacks.
Deploy safety
The edge stack is excluded from push-triggered deploys on purpose: recreating Traefik
re-requests certificates, and Let’s Encrypt rate limits make that something to do
deliberately. See Certificates.
Backups
Stateful deploys runscripts/backup.sh automatically before the deploy cycle. Backups
land at /opt/hill90/backups/<service>/<timestamp>/ on the VPS with 7-day default
retention.
Rebuilding the VPS
A full rebuild is automated end to end and requires no manual intervention:Disaster recovery
Recovery from total VPS loss depends on artefacts that must exist before the loss:- A local clone of the repository, current with
main - The SOPS-encrypted secrets file,
infra/secrets/prod.enc.env - The age private key,
infra/secrets/keys/age-prod.key— gitignored and never committed; restore it from your password manager or the VPS - Hostinger API access