fix(admin): alias réseau dédié pour éviter la collision DNS prod/dev sur "api"

Root cause du 404 intermittent : les stacks prod et dev déclarent tous les
deux un service nommé "api" attaché au même réseau externe coolify. Docker
DNS répond aléatoirement avec l'IP du conteneur prod OU dev pour le nom
"api" — quand admin/nginx tombait sur le mauvais conteneur (inaccessible
depuis cet environnement), ça donnait "connect() failed: Connection
refused" puis 404 côté client. Le resolver dynamique (commit précédent)
ne corrige pas cette collision, il la rend juste plus visible/intermittente.

Fix : alias réseau unique par environnement (bm-api-internal en prod,
dev-api-internal en dev) sur le service api, et apps/admin/Dockerfile
prend un ARG API_UPSTREAM substitué par sed dans nginx.conf au build,
pointant vers l'alias correspondant.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Nicolas Fryder 2026-06-30 22:27:47 +02:00
parent def2b1214f
commit 10ab0055d5
3 changed files with 12 additions and 2 deletions

View file

@ -1,3 +1,5 @@
FROM nginx:alpine FROM nginx:alpine
ARG API_UPSTREAM=http://api:3000
COPY site/ /usr/share/nginx/html COPY site/ /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf COPY nginx.conf /etc/nginx/conf.d/default.conf
RUN sed -i "s|http://api:3000|${API_UPSTREAM}|g" /etc/nginx/conf.d/default.conf

View file

@ -85,7 +85,9 @@ services:
ADMIN_SEED_USERNAME: ${ADMIN_SEED_USERNAME} ADMIN_SEED_USERNAME: ${ADMIN_SEED_USERNAME}
ADMIN_SEED_PASSWORD_HASH: ${ADMIN_SEED_PASSWORD_HASH} ADMIN_SEED_PASSWORD_HASH: ${ADMIN_SEED_PASSWORD_HASH}
networks: networks:
- coolify coolify:
aliases:
- dev-api-internal
labels: labels:
- traefik.enable=true - traefik.enable=true
- traefik.docker.network=coolify - traefik.docker.network=coolify
@ -98,6 +100,8 @@ services:
admin: admin:
build: build:
context: apps/admin context: apps/admin
args:
API_UPSTREAM: http://dev-api-internal:3000
networks: networks:
- coolify - coolify
labels: labels:

View file

@ -57,7 +57,9 @@ services:
ADMIN_SEED_USERNAME: ${ADMIN_SEED_USERNAME} ADMIN_SEED_USERNAME: ${ADMIN_SEED_USERNAME}
ADMIN_SEED_PASSWORD_HASH: ${ADMIN_SEED_PASSWORD_HASH} ADMIN_SEED_PASSWORD_HASH: ${ADMIN_SEED_PASSWORD_HASH}
networks: networks:
- coolify coolify:
aliases:
- bm-api-internal
labels: labels:
- traefik.enable=true - traefik.enable=true
- traefik.docker.network=coolify - traefik.docker.network=coolify
@ -70,6 +72,8 @@ services:
admin: admin:
build: build:
context: apps/admin context: apps/admin
args:
API_UPSTREAM: http://bm-api-internal:3000
networks: networks:
- coolify - coolify
labels: labels: