# Garage-only stack for Coolify when beenvoice runs as a separate Application resource. # # Deploy: Coolify → Docker Compose → compose file: docker-compose.coolify-garage.yml # # ── Pair with a beenvoice Application (pick ONE) ─────────────────────────────── # # A) Public Garage URL (most reliable — no shared Docker network required) # 1. Redeploy this stack (includes SERVICE_FQDN_GARAGE_3900 below). # 2. Garage resource → assign a domain for port 3900 (e.g. s3.example.com). # 3. Copy SERVICE_URL_GARAGE_3900 from this resource's Environment tab. # 4. beenvoice Application → S3_ENDPOINT= → redeploy beenvoice. # # B) Internal Docker DNS (same Coolify destination network) # 1. Garage resource → Advanced → enable "Connect to Predefined Network" → redeploy. # 2. beenvoice Application → same destination → enable "Connect to Predefined Network". # 3. beenvoice → S3_ENDPOINT=http://garage-:3900 # # Recommended long-term: deploy docker-compose.coolify.yml as one stack (app+db+garage). # See docs/COOLIFY.md. services: garage: image: dxflrs/garage:v2.3.0 environment: GARAGE_DEFAULT_ACCESS_KEY: ${S3_ACCESS_KEY:-GK3515373e4c851ebaad366558} GARAGE_DEFAULT_SECRET_KEY: ${S3_SECRET_KEY:-7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34} GARAGE_DEFAULT_BUCKET: ${S3_BUCKET:-beenvoice-receipts} SERVICE_FQDN_GARAGE_3900: configs: - source: garage_config target: /etc/garage.toml volumes: - beenvoice_garage_meta:/var/lib/garage/meta - beenvoice_garage_data:/var/lib/garage/data command: ["/garage", "server", "--single-node", "--default-bucket"] expose: - "3900" healthcheck: test: ["CMD", "/garage", "status"] interval: 5s timeout: 5s retries: 15 start_period: 20s restart: unless-stopped volumes: beenvoice_garage_meta: beenvoice_garage_data: configs: garage_config: content: | metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" db_engine = "sqlite" replication_factor = 1 rpc_bind_addr = "[::]:3901" rpc_public_addr = "garage:3901" rpc_secret = "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" [s3_api] s3_region = "garage" api_bind_addr = "[::]:3900" root_domain = ".s3.garage" [s3_web] bind_addr = "[::]:3902" root_domain = ".web.garage" index = "index.html" [admin] api_bind_addr = "[::]:3903" admin_token = "beenvoice_garage_admin_token_change_me_in_production" metrics_token = "beenvoice_garage_metrics_token_change_me_in_production"