fix and update
This commit is contained in:
@@ -303,6 +303,21 @@ services:
|
||||
timeout: 5s
|
||||
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:
|
||||
postgres_data:
|
||||
redis_data:
|
||||
|
||||
33
infra/nginx-gateway-sync/entrypoint.sh
Normal file
33
infra/nginx-gateway-sync/entrypoint.sh
Normal 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
|
||||
11
install.sh
11
install.sh
@@ -1980,12 +1980,11 @@ nginx_proxy_headers=" proxy_set_header Host \$host;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;"
|
||||
|
||||
# Встроенный DNS Docker. valid=5s + resolver_timeout — баланс между свежим IP и
|
||||
# «Server failure» при кратковременном дауне контейнера во время recreate.
|
||||
NGINX_DOCKER_RESOLVER=" resolver 127.0.0.11 ipv6=off valid=5s;
|
||||
resolver_timeout 5s;"
|
||||
NGINX_DOCKER_SERVER_DNS=" resolver 127.0.0.11 ipv6=off valid=5s;
|
||||
resolver_timeout 5s;"
|
||||
# Встроенный DNS Docker. valid=2s — быстрее подхватывает новый IP после recreate api-gateway.
|
||||
NGINX_DOCKER_RESOLVER=" resolver 127.0.0.11 ipv6=off valid=2s;
|
||||
resolver_timeout 3s;"
|
||||
NGINX_DOCKER_SERVER_DNS=" resolver 127.0.0.11 ipv6=off valid=2s;
|
||||
resolver_timeout 3s;"
|
||||
|
||||
# Имя nginx-переменной из ключа апстрима (только [A-Za-z0-9_]).
|
||||
nginx_upstream_var() {
|
||||
|
||||
Reference in New Issue
Block a user