Something went wrong. Try again.
gotta store my records
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960name: crate
# crate on a single droplet. Caddy terminates TLS (auto Let's Encrypt for# crate.mokkenstorm.dev) and reverse-proxies to the app over the compose# network; the app publishes no ports of its own. DNS is a plain A record →# the droplet, DNS-only (no Cloudflare proxy), so Bluesky's OAuth metadata# fetch hits the cert directly with no edge WAF in the way. Postgres is a# self-hosted container on the same droplet (db-data volume) rather than a# managed DO database, since this is a single-instance deploy with no# replicas planned. Secrets come from .env (gitignored; see gen-env.sh).services: app: image: ghcr.io/nmokkenstorm/crate:${CRATE_TAG:-latest} restart: unless-stopped env_file: .env depends_on: db: condition: service_healthy # No healthcheck block: the image's own HEALTHCHECK is the one definition # of what "healthy" means, and it ships with every pull. # Autopush needs CRATE_TAG=latest: the pull timer re-resolves whatever # tag this is started with, so a sha pins it forever (which is the rollback).
db: image: postgres:18-alpine restart: unless-stopped environment: - POSTGRES_USER=atrecord - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=atrecord volumes: # Postgres 18's image changed the expected mount point to the parent # dir (it now organizes data in version-specific subdirs) — mounting # at .../data like pre-18 images crash-loops on startup. - db-data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U atrecord"] interval: 10s timeout: 3s retries: 5
caddy: image: caddy:2 restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy-data:/data - caddy-config:/config depends_on: app: condition: service_healthy
volumes: caddy-data: caddy-config: db-data: