fix(deploy): give migrate the API's client-address settings, and say what Doctor checked
CI / verify (pull_request) Successful in 54s
CI / infrastructure-smoke (pull_request) Successful in 13s
CI / migration-smoke (pull_request) Successful in 1m42s
CI / image-build (pull_request) Successful in 19s
CI / deploy-smoke (same-origin) (pull_request) Successful in 48s
CI / deploy-smoke (split) (pull_request) Successful in 56s
CI / verify (pull_request) Successful in 54s
CI / infrastructure-smoke (pull_request) Successful in 13s
CI / migration-smoke (pull_request) Successful in 1m42s
CI / image-build (pull_request) Successful in 19s
CI / deploy-smoke (same-origin) (pull_request) Successful in 48s
CI / deploy-smoke (split) (pull_request) Successful in 56s
Doctor checks the client-address configuration of the process it runs in, and operators run it as `migrate`. The proxy overlay set trusted-proxy mode on `api` only, so Doctor reported "Direct client-address mode" for an installation that trusts its proxy. - compose.proxy.yaml defines the three variables once, as a YAML anchor, and applies it to both `api` and `migrate`. Rendered with `docker compose config`, `api` is unchanged and `migrate` now matches it, keeping NODE_EXTRA_CA_CERTS from the base. - The example deploy/.env sets COMPOSE_FILE=compose.yaml:compose.proxy.yaml, as the instance already does. Plain `docker compose run --rm migrate ...` in the README then runs with the overlay; it used to read compose.yaml alone. - Every client-address check in Doctor now says it checked the environment Doctor runs with, and how to read the running API's own value (`docker compose exec api printenv EKKLESIA_CLIENT_ADDRESS_MODE`, confirmed to work in the image). - The deploy README explains why operator commands need the same files as the stack. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
2a64383af5
commit
4a9012f64c
@@ -13,6 +13,13 @@
|
||||
# its lower half; the proxy (and the tunnel connector, if used) take addresses from the upper half,
|
||||
# which Docker never hands to another container.
|
||||
|
||||
# Exactly one trusted peer: this proxy. Set from the same variable that fixes the proxy's address,
|
||||
# so the two cannot drift apart. These override any value in ekklesia.env.
|
||||
x-ekklesia-client-address: &ekklesia-client-address
|
||||
EKKLESIA_CLIENT_ADDRESS_MODE: trusted-proxy
|
||||
EKKLESIA_CLIENT_ADDRESS_HEADER: x-forwarded-for
|
||||
EKKLESIA_CLIENT_ADDRESS_TRUSTED_PROXIES: ${EKKLESIA_PROXY_ADDRESS:-10.249.250.254}/32
|
||||
|
||||
services:
|
||||
proxy:
|
||||
image: caddy:2.11.4-alpine@sha256:6aeddd44c3078b0f9a35206472a11420648a79c184603ef95957d0a20044cb2b
|
||||
@@ -59,12 +66,12 @@ services:
|
||||
api:
|
||||
networks:
|
||||
edge: {}
|
||||
environment:
|
||||
# Exactly one trusted peer: this proxy. Set here from the same variable that fixes the proxy's
|
||||
# address, so the two cannot drift apart. These override any value in ekklesia.env.
|
||||
EKKLESIA_CLIENT_ADDRESS_MODE: trusted-proxy
|
||||
EKKLESIA_CLIENT_ADDRESS_HEADER: x-forwarded-for
|
||||
EKKLESIA_CLIENT_ADDRESS_TRUSTED_PROXIES: ${EKKLESIA_PROXY_ADDRESS:-10.249.250.254}/32
|
||||
environment: *ekklesia-client-address
|
||||
|
||||
# Operator commands (migrations, Doctor) run as `migrate`. It gets the API's client-address
|
||||
# configuration too, so that Doctor checks what the API actually runs rather than an empty one.
|
||||
migrate:
|
||||
environment: *ekklesia-client-address
|
||||
|
||||
object-storage:
|
||||
networks:
|
||||
|
||||
Reference in New Issue
Block a user