Barazo Docker Compose templates for self-hosting barazo.forum

fix(deploy): prune unused Docker images after deploy and add log rotation (#59)

After each staging deploy, run `docker image prune -f` to remove dangling
images left behind by the previous pull. Without this, every deploy
accumulates ~800MB of unreferenced layers, eventually filling the VPS disk
(as happened with 146 images consuming 29GB on a 38GB disk).

Add json-file log rotation (10MB x 3 files) to all services via a shared
x-logging anchor. Docker's default json-file driver has no size limit,
so container logs can grow unbounded on long-running instances.

authored by

Guido X Jansen and committed by
GitHub
742e6547 38a2c9d9

+15
+3
.github/workflows/deploy-staging.yml
··· 221 echo "Starting containers..." 222 docker compose ${{ env.COMPOSE_FILES }} up -d 223 224 echo "Deploy complete at $(date -u '+%Y-%m-%dT%H:%M:%SZ')" 225 226 # ----------------------------------------------------------------------
··· 221 echo "Starting containers..." 222 docker compose ${{ env.COMPOSE_FILES }} up -d 223 224 + echo "Pruning unused images..." 225 + docker image prune -f 226 + 227 echo "Deploy complete at $(date -u '+%Y-%m-%dT%H:%M:%SZ')" 228 229 # ----------------------------------------------------------------------
+12
docker-compose.yml
··· 10 # 11 # Startup order: postgres -> valkey -> tap -> barazo-api -> barazo-web -> caddy 12 13 services: 14 # --------------------------------------------------------------------------- 15 # PostgreSQL 16 with pgvector (full-text + optional semantic search) ··· 17 postgres: 18 image: pgvector/pgvector:pg16 19 restart: unless-stopped 20 environment: 21 POSTGRES_USER: ${POSTGRES_USER} 22 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ··· 40 valkey: 41 image: valkey/valkey:9-alpine 42 restart: unless-stopped 43 command: > 44 valkey-server 45 --requirepass ${VALKEY_PASSWORD} ··· 68 image: ghcr.io/bluesky-social/indigo/tap:latest 69 platform: linux/amd64 70 restart: unless-stopped 71 environment: 72 TAP_RELAY_URL: ${RELAY_URL:-https://bsky.network} 73 TAP_SIGNAL_COLLECTION: forum.barazo.topic.post ··· 88 barazo-api: 89 image: ghcr.io/barazo-forum/barazo-api:${BARAZO_API_VERSION:-latest} 90 restart: unless-stopped 91 environment: 92 NODE_ENV: production 93 DATABASE_URL: ${DATABASE_URL} ··· 137 barazo-web: 138 image: ghcr.io/barazo-forum/barazo-web:${BARAZO_WEB_VERSION:-latest} 139 restart: unless-stopped 140 environment: 141 NODE_ENV: production 142 API_INTERNAL_URL: http://barazo-api:3000 ··· 162 caddy: 163 image: caddy:2-alpine 164 restart: unless-stopped 165 environment: 166 COMMUNITY_DOMAIN: ${COMMUNITY_DOMAIN} 167 ports:
··· 10 # 11 # Startup order: postgres -> valkey -> tap -> barazo-api -> barazo-web -> caddy 12 13 + x-logging: &default-logging 14 + driver: json-file 15 + options: 16 + max-size: "10m" 17 + max-file: "3" 18 + 19 services: 20 # --------------------------------------------------------------------------- 21 # PostgreSQL 16 with pgvector (full-text + optional semantic search) ··· 23 postgres: 24 image: pgvector/pgvector:pg16 25 restart: unless-stopped 26 + logging: *default-logging 27 environment: 28 POSTGRES_USER: ${POSTGRES_USER} 29 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ··· 47 valkey: 48 image: valkey/valkey:9-alpine 49 restart: unless-stopped 50 + logging: *default-logging 51 command: > 52 valkey-server 53 --requirepass ${VALKEY_PASSWORD} ··· 76 image: ghcr.io/bluesky-social/indigo/tap:latest 77 platform: linux/amd64 78 restart: unless-stopped 79 + logging: *default-logging 80 environment: 81 TAP_RELAY_URL: ${RELAY_URL:-https://bsky.network} 82 TAP_SIGNAL_COLLECTION: forum.barazo.topic.post ··· 97 barazo-api: 98 image: ghcr.io/barazo-forum/barazo-api:${BARAZO_API_VERSION:-latest} 99 restart: unless-stopped 100 + logging: *default-logging 101 environment: 102 NODE_ENV: production 103 DATABASE_URL: ${DATABASE_URL} ··· 147 barazo-web: 148 image: ghcr.io/barazo-forum/barazo-web:${BARAZO_WEB_VERSION:-latest} 149 restart: unless-stopped 150 + logging: *default-logging 151 environment: 152 NODE_ENV: production 153 API_INTERNAL_URL: http://barazo-api:3000 ··· 173 caddy: 174 image: caddy:2-alpine 175 restart: unless-stopped 176 + logging: *default-logging 177 environment: 178 COMMUNITY_DOMAIN: ${COMMUNITY_DOMAIN} 179 ports: