From 4aff9c557dea70ce5be8cc869ae819b0acb2fef8 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 14 May 2026 18:27:25 -0400 Subject: [PATCH] =?UTF-8?q?chore:=20docker=20compose=20ergonomics=20?= =?UTF-8?q?=E2=80=94=20rename=20dev=20override,=20bake=20dev=20defaults?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Renamed docker-compose.dev.yml → docker-compose.override.yml so Docker Compose auto-merges it. `docker compose up` (no -f) now Just Works for local development. - Removed the `env_file: .env` requirement from every service in the base file. Operators no longer need to create a .env to bring the stack up. - Baked sane dev defaults directly into docker-compose.yml via ${VAR:-default} interpolation: DB_USER=fabledcurator DB_PASSWORD=fabledcurator_dev DB_NAME=fabledcurator SECRET_KEY=dev_secret_key_not_for_production_change_me LOG_LEVEL=INFO (overridden to DEBUG by the dev override) Defaults are insecure but explicitly named so. For production, override via shell env vars or a .env file at the project root. - README quick-start simplified to a single `docker compose up -d`. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 16 ++++++++++++-- ...ose.dev.yml => docker-compose.override.yml | 0 docker-compose.yml | 22 ++++++++++++++----- 3 files changed, 31 insertions(+), 7 deletions(-) rename docker-compose.dev.yml => docker-compose.override.yml (100%) diff --git a/README.md b/README.md index 371a801..225f318 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,25 @@ Pre-v1. Not yet functional. ## Quick start +For local development and testing, just: + ```bash -cp .env.example .env -# edit .env: set DB_PASSWORD and SECRET_KEY docker compose up -d # UI: http://localhost:8080 ``` +That uses sane dev defaults baked into `docker-compose.yml` and the dev +override (`docker-compose.override.yml`, auto-merged) — local builds, DEBUG +logging, exposed Postgres + Redis ports on the host. No `.env` required. + +For a production-like deployment, override the dev defaults via shell env +or a `.env` file (see `.env.example` for the variable names) and use: + +```bash +docker compose -f docker-compose.yml up -d +# (skips the override so containers pull registry images) +``` + ## Deployment posture FabledCurator is designed to run inside a self-hosted homelab environment over plain HTTP. If you want TLS, terminate it at your reverse proxy. The app does not generate certificates, redirect to HTTPS, or set HSTS. diff --git a/docker-compose.dev.yml b/docker-compose.override.yml similarity index 100% rename from docker-compose.dev.yml rename to docker-compose.override.yml diff --git a/docker-compose.yml b/docker-compose.yml index 7b5c7ca..78b650a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,13 @@ +# Base compose stack. Uses ${VAR:-default} interpolation throughout so the +# stack boots with zero config — sane dev defaults baked in. For production +# deployments, override the defaults via shell env vars or a .env file: +# +# DB_PASSWORD=...real... SECRET_KEY=...real... docker compose up +# +# The dev override (docker-compose.override.yml) is auto-merged when you +# run `docker compose up` from this directory and switches images to +# local builds + DEBUG logging. + services: redis: image: redis:7-alpine @@ -13,7 +23,7 @@ services: image: pgvector/pgvector:pg16 environment: POSTGRES_USER: ${DB_USER:-fabledcurator} - POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_PASSWORD: ${DB_PASSWORD:-fabledcurator_dev} POSTGRES_DB: ${DB_NAME:-fabledcurator} volumes: - postgres_data:/var/lib/postgresql/data @@ -28,12 +38,17 @@ services: command: ["web"] ports: - "${PORT:-8080}:8080" - env_file: .env environment: &app_env + DB_USER: ${DB_USER:-fabledcurator} + DB_PASSWORD: ${DB_PASSWORD:-fabledcurator_dev} DB_HOST: postgres DB_PORT: "5432" + DB_NAME: ${DB_NAME:-fabledcurator} CELERY_BROKER_URL: redis://redis:6379/0 CELERY_RESULT_BACKEND: redis://redis:6379/0 + SECRET_KEY: ${SECRET_KEY:-dev_secret_key_not_for_production_change_me} + EXTENSION_API_KEY: ${EXTENSION_API_KEY:-} + LOG_LEVEL: ${LOG_LEVEL:-INFO} volumes: - ./images:/images - ./import:/import @@ -49,7 +64,6 @@ services: <<: *app_env CELERY_QUEUES: default,import,thumbnail,download CELERY_CONCURRENCY: "2" - env_file: .env volumes: - ./images:/images - ./import:/import @@ -64,7 +78,6 @@ services: environment: <<: *app_env CELERY_QUEUES: maintenance,scan - env_file: .env volumes: - ./images:/images - ./import:/import @@ -78,7 +91,6 @@ services: command: ["ml-worker"] environment: <<: *app_env - env_file: .env volumes: - ./images:/images:ro - ./models:/models