You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Bind dev and local Postgres, Redis and app ports to loopback only #414
The dev and local compose files publish Postgres and Redis on 0.0.0.0. Postgres uses a default password when DB_PASSWORD is unset, and Redis has no auth. On a laptop on shared Wi-Fi, or a dev VM with a public IP, anyone on the network can reach both. Production is not affected: self-host docs use docker-compose.prod.yml.
App ports also bind on all interfaces: docker-compose.dev.yml:82,155,216,287 and docker-compose.backend-local.override.yml:15,21,27 (used by Makefile:95).
Fix plan
Prefix every published port with 127.0.0.1:, for example '127.0.0.1:${DB_PORT:-5432}:5432'.
Apply the same to the app ports (4000, 4001, 4002, 3000) in the dev and local override files.
If a developer needs LAN access (phone testing), document a BIND_HOST variable, for example '${BIND_HOST:-127.0.0.1}:4000:4000'.
Optionally make the dev Postgres refuse to start without DB_PASSWORD (${DB_PASSWORD:?set DB_PASSWORD}).
Acceptance criteria
docker compose -f docker-compose.dev.yml up then ss -ltn shows 5432 and 6379 on 127.0.0.1 only.
make targets that use these files still work locally.
Containers still reach each other by service name.
changed the title [-]Dev and local compose files publish Postgres and Redis on all network interfaces[/-][+]Bind dev and local Postgres, Redis and app ports to loopback only[/+]on Oct 6, 2026
Status: fixed in 0a09b5d on claude/youthful-lovelace-3nvsc6. Not merged yet.
What shipped: every published port in docker-compose.dev.yml, docker-compose.local.yml and docker-compose.backend-local.override.yml now binds to 127.0.0.1. That covers 5432, 6379, 4000, 4001, 4002 and 3000. It also covers the dev admin dashboard on ${ADMIN_PORT:-3100}, which this issue did not list. docker-compose.prod.yml is unchanged.
Not done: step 3 (BIND_HOST) and step 4 (a required DB_PASSWORD). Both were optional. To test from a phone on the LAN, edit the port line on your machine only.
Verify: run docker compose -f docker-compose.dev.yml up, then ss -ltn. Every published port must show 127.0.0.1.
Activity
[-]Dev and local compose files publish Postgres and Redis on all network interfaces[/-][+]Bind dev and local Postgres, Redis and app ports to loopback only[/+]HMarzban commentedon Oct 6, 2026
Status: fixed in
0a09b5donclaude/youthful-lovelace-3nvsc6. Not merged yet.What shipped: every published port in
docker-compose.dev.yml,docker-compose.local.ymlanddocker-compose.backend-local.override.ymlnow binds to127.0.0.1. That covers 5432, 6379, 4000, 4001, 4002 and 3000. It also covers the dev admin dashboard on${ADMIN_PORT:-3100}, which this issue did not list.docker-compose.prod.ymlis unchanged.Not done: step 3 (
BIND_HOST) and step 4 (a requiredDB_PASSWORD). Both were optional. To test from a phone on the LAN, edit the port line on your machine only.Verify: run
docker compose -f docker-compose.dev.yml up, thenss -ltn. Every published port must show127.0.0.1.Generated by Claude Code
chore(merge): land the security and push fixes branch