65 lines
2.9 KiB
YAML
65 lines
2.9 KiB
YAML
# =============================================================================
|
|
# feature-container-runtime-contract — local infrastructure override
|
|
#
|
|
# Merge with base (and optionally dev):
|
|
# docker compose -f docker-compose.yml -f docker-compose.local.yml up
|
|
#
|
|
# Local intent:
|
|
# - Wires the app environment to point at the shared `db` service, which lives in
|
|
# docker-compose.infra.yml and starts only for lanes whose Compose profile names it.
|
|
# - Declares no depends_on: a depends_on aimed at a profiled service makes every lane that does
|
|
# not enable that profile fail to render at all, and ordering is the runtime-smoke wrapper's
|
|
# job — it knows which services a lane actually starts.
|
|
# - Keeps read-only filesystem and memory limits from the base compose.
|
|
# - Publishes the DB on the loopback interface only, so a host-side run
|
|
# (`./gradlew :app-bootstrap:bootRun`, IDE) reaches the same database the
|
|
# containerised app reaches over the internal `caskeleton-local` network.
|
|
# =============================================================================
|
|
|
|
services:
|
|
app:
|
|
# Optional, because src/.env is operator input and a fresh clone does not have one. Before this
|
|
# was marked optional, untracking that file made `docker compose config` fail outright on a
|
|
# clone — the environment override that exists for convenience became a hard prerequisite for
|
|
# rendering the stack at all. The tracked contract is src/.env.example; copy it.
|
|
env_file:
|
|
- path: ./src/.env
|
|
required: false
|
|
# Wire the app to the local Postgres service on the internal network.
|
|
environment:
|
|
# Explicit, not inherited. A Compose profile selects services; it says nothing about which
|
|
# environment the application believes it is in, and the two drifting is how a dev stack ends
|
|
# up running local's settings.
|
|
SPRING_PROFILES_ACTIVE: "local"
|
|
TZ: "UTC"
|
|
LANG: "C.UTF-8"
|
|
LC_ALL: "C.UTF-8"
|
|
# fallback matches env-keys.yaml SSOT default (30s); base compose grace is 40s.
|
|
APP_SERVER_SHUTDOWN_TIMEOUT: "${APP_SERVER_SHUTDOWN_TIMEOUT:-30s}"
|
|
APP_SERVER_SHUTDOWN: "graceful"
|
|
# Database connection — points to the local `db` service below.
|
|
# Override with your actual DB credentials in a local .env file.
|
|
APP_DATASOURCE_URL: "jdbc:postgresql://db:5432/${POSTGRES_DB:-ca_skeleton}"
|
|
APP_DATASOURCE_USERNAME: "${APP_DATASOURCE_USERNAME:-ca_skeleton}"
|
|
APP_DATASOURCE_PASSWORD: "${APP_DATASOURCE_PASSWORD:-ca_skeleton}"
|
|
healthcheck:
|
|
test:
|
|
- "CMD"
|
|
- "wget"
|
|
- "--no-verbose"
|
|
- "--tries=1"
|
|
- "--spider"
|
|
- "http://localhost:8080/api/healthcheck"
|
|
interval: 5s
|
|
timeout: 3s
|
|
start_period: 20s
|
|
retries: 12
|
|
networks:
|
|
- caskeleton-infra
|
|
|
|
networks:
|
|
# Defined in docker-compose.infra.yml, where the services that share it live.
|
|
caskeleton-infra:
|
|
external: false
|
|
|