Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
fd942af
poc: replace nginx proxy with Traefik
vitormattos Sep 18, 2026
d1dcbe8
poc: pin Traefik image digest
vitormattos Sep 18, 2026
ddd5e78
poc: route development services with Traefik labels
vitormattos Sep 18, 2026
413a920
poc: preserve friendly unknown-host routing
vitormattos Sep 18, 2026
9114a71
poc: add Traefik-backed development dashboard
vitormattos Sep 18, 2026
d279124
poc: add dashboard fallback configuration
vitormattos Sep 18, 2026
eb08977
poc: reuse project directory for dashboard assets
vitormattos Sep 18, 2026
48aa19a
poc: remove nginx asset installation from coordinator
vitormattos Sep 18, 2026
7883147
poc: publish runtime diagnostics through Traefik dashboard
vitormattos Sep 18, 2026
cd27ae8
test: route proxy fixture through Traefik
vitormattos Sep 18, 2026
c8b2cb3
test: validate Traefik proxy lifecycle and route API
vitormattos Sep 18, 2026
e23cbd1
test: update proxy policies for Traefik POC
vitormattos Sep 18, 2026
c6862e6
poc: remove obsolete nginx proxy asset .docker/scripts/proxy/assets.sh
vitormattos Sep 18, 2026
46fcf63
poc: remove obsolete nginx proxy asset .docker/nginx-proxy/*.localhost
vitormattos Sep 18, 2026
f285603
poc: remove obsolete nginx proxy asset .docker/nginx-proxy/*.localhos…
vitormattos Sep 18, 2026
5633217
poc: remove obsolete nginx proxy asset .docker/nginx-proxy/Procfile
vitormattos Sep 18, 2026
1e83cb1
poc: remove obsolete nginx proxy asset .docker/nginx-proxy/dashboard.…
vitormattos Sep 18, 2026
cd7cf27
poc: remove obsolete nginx proxy asset .docker/nginx-proxy/docker-gen…
vitormattos Sep 18, 2026
db276d3
poc: remove obsolete nginx proxy location override
vitormattos Sep 18, 2026
e127f38
fix: use valid Traefik rule labels in docker-compose.yml
vitormattos Sep 18, 2026
9ac4b73
fix: use valid Traefik rule labels in tests/proxy/fixtures/compose.yml
vitormattos Sep 18, 2026
699abbd
fix: restore Traefik proxy policy tests
vitormattos Sep 18, 2026
c2c1939
fix: use correct localhost regex in Traefik router
vitormattos Sep 18, 2026
5374970
fix: avoid host-path dashboard mounts in shared proxy
vitormattos Sep 18, 2026
ea687f2
poc: install dashboard assets through Docker API
vitormattos Sep 18, 2026
bf78d68
poc: install Traefik dashboard assets at startup
vitormattos Sep 18, 2026
197ef2e
test: bound proxy HTTP checks
vitormattos Sep 18, 2026
e873491
test: bound proxy HTTP checks
vitormattos Sep 18, 2026
f4dd4a8
test: fail fast with Traefik diagnostics
vitormattos Sep 18, 2026
c78f2ea
poc: centralize Traefik TLS and entrypoint defaults
vitormattos Sep 18, 2026
b941d06
poc: reduce repeated Traefik service labels
vitormattos Sep 18, 2026
1ed2b0c
test: align Traefik fixture with default TLS entrypoint
vitormattos Sep 18, 2026
4c97ae7
poc: run proxy tests on Traefik branch pushes
vitormattos Sep 18, 2026
36f0fa3
merge: sync Traefik POC with nginx POC
vitormattos Sep 18, 2026
852a543
test: expose Traefik routing state on integration failure
vitormattos Sep 18, 2026
5e95bd6
poc: attach Traefik to project networks
vitormattos Sep 18, 2026
94055c8
poc: manage project network attachment with proxy lifecycle
vitormattos Sep 18, 2026
eaa0936
poc: route Traefik through each Compose project network
vitormattos Sep 18, 2026
1529067
test: use project network in Traefik fixture
vitormattos Sep 18, 2026
ad84a3a
test: cover proxy attachment to project networks
vitormattos Sep 18, 2026
bcb5e14
refactor: attach proxy to project networks
vitormattos Sep 18, 2026
f3599db
refactor: manage proxy project network lifecycle
vitormattos Sep 18, 2026
bd334be
refactor: use coordinator leases for proxy ownership
vitormattos Sep 18, 2026
69c6fad
refactor: list routes reachable from proxy networks
vitormattos Sep 18, 2026
1ccb9a1
test: cover proxy attachment to project networks
vitormattos Sep 18, 2026
0225c7c
test: keep lease coverage focused on coordinators
vitormattos Sep 18, 2026
8e170af
test: verify project network isolation
vitormattos Sep 18, 2026
a46cad2
poc: use coordinator leases for proxy ownership
vitormattos Sep 18, 2026
9d41c04
test: keep Traefik lease coverage focused on coordinators
vitormattos Sep 18, 2026
8268ccc
test: verify Traefik project network isolation
vitormattos Sep 18, 2026
bf135ea
poc: remove temporary Traefik branch CI trigger
vitormattos Sep 18, 2026
c026ca2
merge: sync Traefik POC with nginx POC
vitormattos Sep 18, 2026
e707c61
test: wait for proxy project network attachment
vitormattos Sep 18, 2026
570c712
test: wait for proxy project network attachment
vitormattos Sep 18, 2026
6214ab1
merge: sync Traefik POC with nginx POC
vitormattos Sep 18, 2026
cd3f529
poc: remove nginx-proxy metadata from Traefik services
vitormattos Sep 18, 2026
79fc880
test: remove nginx-proxy metadata from Traefik fixture
vitormattos Sep 18, 2026
d127087
poc: tighten and simplify Traefik dashboard routing
vitormattos Sep 18, 2026
06a6218
merge: sync Traefik POC with nginx POC docs
vitormattos Sep 18, 2026
bf3e84d
poc: keep Traefik API on an internal entrypoint
vitormattos Sep 18, 2026
fcc3273
poc: proxy Traefik route metadata through dashboard
vitormattos Sep 18, 2026
654f2c6
merge: sync Traefik POC with nginx POC certificate text
vitormattos Sep 18, 2026
555ac89
poc: keep README aligned with nginx baseline
vitormattos Sep 18, 2026
12ca266
poc: keep environment banner aligned with nginx baseline
vitormattos Sep 18, 2026
f043975
poc: document Traefik Docker daemon access
vitormattos Sep 18, 2026
b612e67
fix: remove empty environment blocks from docker-compose.yml
vitormattos Sep 18, 2026
024beb9
fix: remove empty environment blocks from tests/proxy/fixtures/compos…
vitormattos Sep 18, 2026
5574f0a
test: verify proxy certificate matches project hostname
vitormattos Sep 18, 2026
b010aea
merge: sync Traefik POC with nginx POC
vitormattos Sep 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 34 additions & 33 deletions .docker/docker-compose.proxy.yml
Original file line number Diff line number Diff line change
@@ -1,52 +1,53 @@
services:
nginx-proxy:
image: nginxproxy/nginx-proxy:1.11.6-alpine@sha256:99376e95c8754547213d411222a2c4dca046d974e753ae2a1c9aef09b2c03364
traefik:
image: traefik:v3.7.13@sha256:f86a2cab1b5c649070c49f883c743dd32d8485a56e3368c5f93b9e91f1e91259
container_name: librecode-dev-proxy
labels:
coop.librecode.dev-proxy: "true"
working_dir: /dashboard
command: ["forego", "start", "-r"]
traefik.enable: "true"
traefik.http.routers.librecode-api.rule: Path(`/api/http/routers`)
traefik.http.routers.librecode-api.priority: "200"
traefik.http.routers.librecode-api.entrypoints: api
traefik.http.routers.librecode-api.service: api@internal
command:
- --api=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --providers.docker.network=librecode-dev-proxy
- --entrypoints.web.address=:80
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --entrypoints.websecure.address=:443
- --entrypoints.api.address=:8080
- --entrypoints.websecure.asdefault=true
- --entrypoints.websecure.http.tls=true
ports:
- "${PROXY_IP_BIND:-127.0.0.1}:80:80"
- "${PROXY_IP_BIND:-127.0.0.1}:443:443"
volumes:
- ${DOCKER_SOCKET:-/var/run/docker.sock}:/tmp/docker.sock:ro
- librecode-dev-proxy-vhost:/etc/nginx/vhost.d
- librecode-dev-proxy-assets:/dashboard:ro
- librecode-dev-proxy-log:/etc/nginx/log
- librecode-dev-proxy-certs:/etc/nginx/certs:ro
environment:
- ENABLE_IPV6=true
- VIRTUAL_HOST=localhost,*.localhost
- VIRTUAL_PORT=80
- SELF_SIGNED_HOST=localhost,*.localhost
- ${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock:ro
networks:
- proxy

ssl-companion:
image: sebastienheyd/self-signed-proxy-companion:1.1.0@sha256:dd698341f804aaffe2974931a185aa088561d76094e040e374847f3a64004d43
container_name: librecode-dev-proxy-ssl-companion
dashboard:
image: nginx:1.31.5-alpine@sha256:72ba65eb42c10344912a84ff42408db7d34f2feb642204570ab8fc5ffd29f1d3
container_name: librecode-dev-dashboard
labels:
coop.librecode.dev-proxy-companion: "true"
volumes:
- ${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock:ro
- librecode-dev-proxy-certs:/etc/nginx/certs:rw
environment:
- NGINX_PROXY_CONTAINER=librecode-dev-proxy
coop.librecode.dev-proxy-dashboard: "true"
traefik.enable: "true"
traefik.http.routers.librecode-dashboard.rule: Host(`localhost`)
traefik.http.routers.librecode-dashboard.priority: "100"
traefik.http.routers.librecode-dashboard.service: librecode-dashboard
traefik.http.routers.librecode-dashboard-catchall.rule: HostRegexp(`[a-z0-9-]+\.localhost`)
traefik.http.routers.librecode-dashboard-catchall.priority: "1"
traefik.http.routers.librecode-dashboard-catchall.service: librecode-dashboard
traefik.http.routers.librecode-dashboard-catchall.middlewares: librecode-not-found
traefik.http.middlewares.librecode-not-found.replacepath.path: /__librecode_not_found__
traefik.http.services.librecode-dashboard.loadbalancer.server.port: "80"
networks:
- proxy

networks:
proxy:
name: librecode-dev-proxy
external: true

volumes:
librecode-dev-proxy-vhost:
name: librecode-dev-proxy-vhost
librecode-dev-proxy-assets:
name: librecode-dev-proxy-assets
librecode-dev-proxy-log:
name: librecode-dev-proxy-log
librecode-dev-proxy-certs:
name: librecode-dev-proxy-certs
6 changes: 0 additions & 6 deletions .docker/nginx-proxy/*.localhost

This file was deleted.

1 change: 0 additions & 1 deletion .docker/nginx-proxy/*.localhost_location_override

This file was deleted.

2 changes: 0 additions & 2 deletions .docker/nginx-proxy/Procfile

This file was deleted.

12 changes: 0 additions & 12 deletions .docker/nginx-proxy/docker-gen.cfg

This file was deleted.

2 changes: 0 additions & 2 deletions .docker/nginx-proxy/localhost_location_override

This file was deleted.

7 changes: 3 additions & 4 deletions .docker/scripts/proxy-coordinator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ export COORDINATOR_CONTAINER PROJECT_NAME
# analyze the complete dependency graph without file-wide suppressions.
# shellcheck source=.docker/scripts/proxy/infrastructure.sh
. "$proxy_lib_dir/infrastructure.sh"
# shellcheck source=.docker/scripts/proxy/assets.sh
. "$proxy_lib_dir/assets.sh"
# shellcheck source=.docker/scripts/proxy/dashboard.sh
. "$proxy_lib_dir/dashboard.sh"
# shellcheck source=.docker/scripts/proxy/diagnostics.sh
. "$proxy_lib_dir/diagnostics.sh"
# shellcheck source=.docker/scripts/proxy/services.sh
Expand Down Expand Up @@ -86,9 +86,8 @@ wait_for_shutdown() {
run() {
validate_environment
ensure_proxy_network
install_proxy_assets

proxy_state="$(ensure_proxy_running)"
install_dashboard_assets
install_runtime_diagnostics

acquire_proxy_lease
Expand Down
54 changes: 0 additions & 54 deletions .docker/scripts/proxy/assets.sh

This file was deleted.

9 changes: 9 additions & 0 deletions .docker/scripts/proxy/dashboard.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh

install_dashboard_assets() {
dashboard_container="${PROXY_DASHBOARD_CONTAINER:-librecode-dev-dashboard}"

Docker cp "${PROJECT_DIR:-}/.docker/traefik/dashboard.html" "$dashboard_container:/usr/share/nginx/html/index.html"
Docker cp "${PROJECT_DIR:-}/.docker/traefik/dashboard.conf" "$dashboard_container:/etc/nginx/conf.d/default.conf"
Docker exec "$dashboard_container" nginx -s reload
}
9 changes: 6 additions & 3 deletions .docker/scripts/proxy/diagnostics.sh
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,13 @@ runtime_diagnostics_json() {
}

install_runtime_diagnostics() {
proxy_container="$(compatible_proxy_container)"
[ -n "$proxy_container" ] || return 1
dashboard_container="${PROXY_DASHBOARD_CONTAINER:-librecode-dev-dashboard}"

if ! Docker inspect "$dashboard_container" >/dev/null 2>&1; then
return 1
fi

runtime_diagnostics_json |
Docker exec -i "$proxy_container" \
Docker exec -i "$dashboard_container" \
sh -c 'cat > /usr/share/nginx/html/runtime.json'
}
29 changes: 29 additions & 0 deletions .docker/traefik/dashboard.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
server {
listen 80;
server_name _;

root /usr/share/nginx/html;
index index.html;

location = /__librecode_not_found__ {
return 404;
}

error_page 404 /index.html;

location = /index.html {
}

location = /runtime.json {
try_files $uri =404;
}

location = /api/http/routers {
proxy_pass http://traefik:8080;
proxy_set_header Host localhost;
}

location / {
try_files $uri /index.html;
}
}
Loading
Loading