fix and update
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
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_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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user