Maestro task: 3bab56a4-f182-4693-85cb-18ccc566a4b2 (Feature 07 - Deployment, Identity and Backups).
Done-condition
deploy/compose.yaml defines project "mealquest" with the mealquest service (build from repo Dockerfile, non-root user, env_file deploy/.env, Docker secrets from deploy/secrets/, named volume mealquest-data mounted at /data, port ${MEALQUEST_BIND_ADDRESS}:8090:8080, healthcheck on /health, restart unless-stopped) on a private network. deploy/.env.example documents every MEALQUEST_ variable with safe placeholder values; .gitignore excludes deploy/.env and deploy/secrets/. docker compose -f deploy/compose.yaml config validates, and docker compose up -d --build yields a healthy container answering /health on the bound port.
Evidence
docker compose config exits 0 with example env/secrets; exits 1 without MEALQUEST_BIND_ADDRESS (fail-fast).
docker compose up -d --build: container Up (healthy) 127.0.0.1:8090->8080/tcp; GET /health -> 200 {"status":"ok","version":"dev"}.
Container uid 10001; /data/mealquest.db owned by 10001.
gofmt/vet/build/test pass.
Scope limited to this task: Litestream, SearXNG, firewall, Traefik and runbooks come in later Feature 07 tasks.
Maestro task: 3bab56a4-f182-4693-85cb-18ccc566a4b2 (Feature 07 - Deployment, Identity and Backups).
## Done-condition
deploy/compose.yaml defines project "mealquest" with the mealquest service (build from repo Dockerfile, non-root user, env_file deploy/.env, Docker secrets from deploy/secrets/*, named volume mealquest-data mounted at /data, port ${MEALQUEST_BIND_ADDRESS}:8090:8080, healthcheck on /health, restart unless-stopped) on a private network. deploy/.env.example documents every MEALQUEST_* variable with safe placeholder values; .gitignore excludes deploy/.env and deploy/secrets/. `docker compose -f deploy/compose.yaml config` validates, and `docker compose up -d --build` yields a healthy container answering /health on the bound port.
## Evidence
- docker compose config exits 0 with example env/secrets; exits 1 without MEALQUEST_BIND_ADDRESS (fail-fast).
- docker compose up -d --build: container `Up (healthy) 127.0.0.1:8090->8080/tcp`; GET /health -> 200 {"status":"ok","version":"dev"}.
- Container uid 10001; /data/mealquest.db owned by 10001.
- gofmt/vet/build/test pass.
Scope limited to this task: Litestream, SearXNG, firewall, Traefik and runbooks come in later Feature 07 tasks.
deploy/compose.yaml defines project "mealquest": the mealquest service built
from the root Dockerfile, running as 10001:10001, configured from deploy/.env
and Docker secrets in deploy/secrets/, with the mealquest-data volume at
/data, published on ${MEALQUEST_BIND_ADDRESS}:8090, a /health healthcheck and
restart unless-stopped, on the private mealquest network.
deploy/.env.example documents every MEALQUEST_* variable: the ones operators
set, the ones fixed by compose.yaml, and the planned ones not yet read.
.gitignore keeps deploy/.env and deploy/secrets/ out while tracking the
example.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
deploy/compose.yaml defines project "mealquest": the mealquest service built
from the root Dockerfile, running as 10001:10001, configured from deploy/.env
and Docker secrets in deploy/secrets/, with the mealquest-data volume at
/data, published on ${MEALQUEST_BIND_ADDRESS}:8090, a /health healthcheck and
restart unless-stopped, on the private mealquest network.
deploy/.env.example documents every MEALQUEST_* variable: the ones operators
set, the ones fixed by compose.yaml, and the planned ones not yet read.
.gitignore keeps deploy/.env and deploy/secrets/ out while tracking the
example.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Maestro task: 3bab56a4-f182-4693-85cb-18ccc566a4b2 (Feature 07 - Deployment, Identity and Backups).
Done-condition
deploy/compose.yaml defines project "mealquest" with the mealquest service (build from repo Dockerfile, non-root user, env_file deploy/.env, Docker secrets from deploy/secrets/, named volume mealquest-data mounted at /data, port ${MEALQUEST_BIND_ADDRESS}:8090:8080, healthcheck on /health, restart unless-stopped) on a private network. deploy/.env.example documents every MEALQUEST_ variable with safe placeholder values; .gitignore excludes deploy/.env and deploy/secrets/.
docker compose -f deploy/compose.yaml configvalidates, anddocker compose up -d --buildyields a healthy container answering /health on the bound port.Evidence
Up (healthy) 127.0.0.1:8090->8080/tcp; GET /health -> 200 {"status":"ok","version":"dev"}.Scope limited to this task: Litestream, SearXNG, firewall, Traefik and runbooks come in later Feature 07 tasks.
deploy/compose.yaml defines project "mealquest": the mealquest service built from the root Dockerfile, running as 10001:10001, configured from deploy/.env and Docker secrets in deploy/secrets/, with the mealquest-data volume at /data, published on ${MEALQUEST_BIND_ADDRESS}:8090, a /health healthcheck and restart unless-stopped, on the private mealquest network. deploy/.env.example documents every MEALQUEST_* variable: the ones operators set, the ones fixed by compose.yaml, and the planned ones not yet read. .gitignore keeps deploy/.env and deploy/secrets/ out while tracking the example. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>deploy/compose.yaml defines project "mealquest": the mealquest service built from the root Dockerfile, running as 10001:10001, configured from deploy/.env and Docker secrets in deploy/secrets/, with the mealquest-data volume at /data, published on ${MEALQUEST_BIND_ADDRESS}:8090, a /health healthcheck and restart unless-stopped, on the private mealquest network. deploy/.env.example documents every MEALQUEST_* variable: the ones operators set, the ones fixed by compose.yaml, and the planned ones not yet read. .gitignore keeps deploy/.env and deploy/secrets/ out while tracking the example. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Independent Codex gpt-6-sol review: APPROVED for this exact commit.