fix(compose): BUZZ_S3_ENDPOINT is hardcoded, so .env cannot point media at external S3
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
**Describe the bug**
`deploy/compose/compose.yml:14` hardcodes the S3 endpoint on the relay service:
```yaml
BUZZ_S3_ENDPOINT: http://minio:9000
```
Every other S3 setting is env-driven and documented in `.env.example` — `BUZZ_S3_ACCESS_KEY`, `BUZZ_S3_SECRET_KEY`, `BUZZ_S3_BUCKET`, `BUZZ_S3_ADDRESSING_STYLE` — so setting `BUZZ_S3_ENDPOINT` there looks like it should work. It is silently ignored, and the relay keeps using the bundled MinIO.
The failure is quiet: the stack comes up, `Media storage connected` is logged, and uploads succeed — into MinIO on local disk rather than the configured bucket. Nothing indicates the endpoint was overridden.
This matters because the Helm chart directs production deployments the other way (`deploy/charts/buzz/values.yaml`):
> Production: point endpoint/bucket at an external S3-compatible service and supply credentials. Quickstart (`minio.enabled: true`): the chart runs an in-cluster, eval-only MinIO.
So compose users following the same guidance get local MinIO regardless of what they configure.
**Steps to reproduce**
1. Set `BUZZ_S3_ENDPOINT=https://.r2.cloudflarestorage.com` in `deploy/compose/.env`.
2. `docker compose up -d`.
3. `docker exec printenv BUZZ_S3_ENDPOINT` → `http://minio:9000`.
4. Uploads land in the bundled MinIO volume, not the configured bucket.
**Expected behavior**
`BUZZ_S3_ENDPOINT` honours `.env` like the other `BUZZ_S3_*` values, defaulting to the bundled MinIO when unset:
```yaml
BUZZ_S3_ENDPOINT: ${BUZZ_S3_ENDPOINT:-http://minio:9000}
```
Ideally with the variable added to `.env.example` alongside the other S3 settings.
**Version and platform**
- Buzz version: relay `ghcr.io/block/buzz:sha-63496cc`; also present on `main` as of 2026-07-30
- OS: Ubuntu 24.04, Docker Compose
**Logs / additional context**
Workaround is a compose override that also has to reset the MinIO health dependency, since the relay `depends_on` it:
```yaml
services:
relay:
environment:
BUZZ_S3_ENDPOINT: ${BUZZ_S3_ENDPOINT:?}
depends_on: !reset
postgres: {condition: service_healthy}
redis: {condition: service_healthy}
minio: {profiles: ["disabled"]}
minio-init: {profiles: ["disabled"]}
```
Possibly related to #3273 (hardcoded path-style S3 addressing), which is the same class of compose-level S3 config being fixed rather than configurable.
Contributor guide
Assessment
This issue has not been assessed yet.