fix and update

This commit is contained in:
lendry
2026-06-30 11:00:43 +03:00
parent 7f10b18336
commit c082b087c5
3 changed files with 53 additions and 6 deletions

View File

@@ -303,6 +303,21 @@ services:
timeout: 5s timeout: 5s
retries: 3 retries: 3
# После recreate api-gateway nginx держит старый IP upstream → 502. Этот watcher
# делает nginx -s reload когда gateway снова поднялся (~55 с на Nest bootstrap).
nginx-gateway-sync:
profiles: ["proxy"]
image: docker:27-cli
container_name: lendry-id-nginx-gateway-sync
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./infra/nginx-gateway-sync/entrypoint.sh:/entrypoint.sh:ro
depends_on:
nginx:
condition: service_started
entrypoint: ["/bin/sh", "/entrypoint.sh"]
volumes: volumes:
postgres_data: postgres_data:
redis_data: redis_data:

View File

@@ -0,0 +1,33 @@
#!/bin/sh
set -eu
NGINX_CONTAINER="${NGINX_CONTAINER:-lendry-id-nginx}"
GATEWAY_CONTAINER="${GATEWAY_CONTAINER:-lendry-id-api-gateway}"
BOOT_WAIT_SEC="${BOOT_WAIT_SEC:-55}"
reload_nginx() {
if docker exec "$NGINX_CONTAINER" nginx -s reload 2>/dev/null; then
echo "[nginx-gateway-sync] nginx reload OK"
else
echo "[nginx-gateway-sync] nginx reload failed — пробуем restart"
docker restart "$NGINX_CONTAINER" >/dev/null 2>&1 || true
fi
}
verify_gateway() {
docker exec "$NGINX_CONTAINER" wget -qO- --timeout=5 "http://${GATEWAY_CONTAINER}:3000/health" 2>/dev/null \
|| echo "[nginx-gateway-sync] предупреждение: nginx пока не достучался до ${GATEWAY_CONTAINER}:3000/health"
}
echo "[nginx-gateway-sync] слежение за ${GATEWAY_CONTAINER} (boot wait ${BOOT_WAIT_SEC}s)..."
docker events \
--filter "container=${GATEWAY_CONTAINER}" \
--filter event=start \
--format '{{.Time}}' | while read -r _; do
echo "[nginx-gateway-sync] ${GATEWAY_CONTAINER} перезапущен, ждём Nest..."
sleep "$BOOT_WAIT_SEC"
reload_nginx
sleep 2
verify_gateway
done

View File

@@ -1980,12 +1980,11 @@ nginx_proxy_headers=" proxy_set_header Host \$host;
proxy_read_timeout 300s; proxy_read_timeout 300s;
proxy_connect_timeout 75s;" proxy_connect_timeout 75s;"
# Встроенный DNS Docker. valid=5s + resolver_timeout — баланс между свежим IP и # Встроенный DNS Docker. valid=2s — быстрее подхватывает новый IP после recreate api-gateway.
# «Server failure» при кратковременном дауне контейнера во время recreate. NGINX_DOCKER_RESOLVER=" resolver 127.0.0.11 ipv6=off valid=2s;
NGINX_DOCKER_RESOLVER=" resolver 127.0.0.11 ipv6=off valid=5s; resolver_timeout 3s;"
resolver_timeout 5s;" NGINX_DOCKER_SERVER_DNS=" resolver 127.0.0.11 ipv6=off valid=2s;
NGINX_DOCKER_SERVER_DNS=" resolver 127.0.0.11 ipv6=off valid=5s; resolver_timeout 3s;"
resolver_timeout 5s;"
# Имя nginx-переменной из ключа апстрима (только [A-Za-z0-9_]). # Имя nginx-переменной из ключа апстрима (только [A-Za-z0-9_]).
nginx_upstream_var() { nginx_upstream_var() {