block / block/buzz

fix(compose): BUZZ_S3_ENDPOINT is hardcoded, so .env cannot point media at external S3

Open
#3,794 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.