From 5324bf12d4457a58adfa8c340d8286c9a7fb75bd Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 27 Aug 2026 21:52:54 +0200 Subject: [PATCH] fix(startup): use stable internal service addresses (#6721) --- nginx.conf | 4 ++-- packages/api/src/shared.ts | 2 +- scripts/run.sh | 11 ++++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/nginx.conf b/nginx.conf index 7754b4087..a433abfd9 100644 --- a/nginx.conf +++ b/nginx.conf @@ -9,7 +9,7 @@ http { # Route websockets traffic to port 3001 location /websockets { - proxy_pass http://${HOSTNAME}:3001; + proxy_pass http://127.0.0.1:3001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; @@ -18,7 +18,7 @@ http { # Route all other traffic to port 3000 location / { - proxy_pass http://${HOSTNAME}:3000; + proxy_pass http://127.0.0.1:3000; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; diff --git a/packages/api/src/shared.ts b/packages/api/src/shared.ts index e05700f22..9237a37a9 100644 --- a/packages/api/src/shared.ts +++ b/packages/api/src/shared.ts @@ -43,7 +43,7 @@ async function importCookiesAsync() { function getBaseUrl() { if (typeof window !== "undefined") return window.location.origin; - return `http://${process.env.HOSTNAME ?? "localhost"}:3000`; + return "http://127.0.0.1:3000"; } export const trpcPath = "/api/trpc"; diff --git a/scripts/run.sh b/scripts/run.sh index 6357c723c..efcc50f9f 100644 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -21,20 +21,18 @@ fi export AUTH_SECRET=$(openssl rand -base64 32) # Start nginx proxy -# 1. Replace the HOSTNAME in the nginx template file -# 2. Create the nginx configuration file from the template -# 3. Start the nginx server +# 1. Create the nginx configuration file from the template +# 2. Start the nginx server # Only listen on IPv6 when the host actually has IPv6 configured (#4596). # Otherwise nginx aborts with "socket() [::]:7575 failed (97: Address family # not supported by protocol)". Check HOMARR_DISABLE_IPV6 first so users can # force IPv4-only even when the host supports IPv6, then probe for IPv6 # addresses via grep (not -s: proc files always report size 0). -export HOSTNAME export NGINX_LISTEN_IPV6='' if [ "${HOMARR_DISABLE_IPV6:-false}" != "true" ] && grep -q . /proc/net/if_inet6 2>/dev/null; then NGINX_LISTEN_IPV6='listen [::]:7575;' fi -envsubst '${HOSTNAME} ${NGINX_LISTEN_IPV6}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf +envsubst '${NGINX_LISTEN_IPV6}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf # Start services in the background and store their PIDs nginx -g 'daemon off;' & NGINX_PID=$! @@ -67,6 +65,9 @@ terminate() { trap terminate TERM INT +# Next.js standalone uses HOSTNAME as its bind address. Docker's generated +# hostname can be unresolvable, so bind explicitly while nginx uses loopback. +export HOSTNAME=0.0.0.0 node apps/nextjs/server.js & NEXTJS_PID=$!