[object Object]

← back to Grant

ecosystem: bind Next to 127.0.0.1:7450 (tailscaled holds :7450 wildcard)

c95598dd87046f6760a498c89cf8238362a905cb · 2026-05-20 13:48:29 -0700 · Steve Abrams

EADDRINUSE on prod — tailscaled was already bound to 100.107.67.67:7450
(tailnet IP, IPv4) and [fd7a:115c:a1e0::d432:4343]:7450 (IPv6), which
blocks any 0.0.0.0:7450 wildcard bind. Pinning Grant to loopback only;
external traffic reaches it through tailscale serve → 127.0.0.1:7450
(or whatever reverse proxy fronts the box).

Files touched

Diff

commit c95598dd87046f6760a498c89cf8238362a905cb
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed May 20 13:48:29 2026 -0700

    ecosystem: bind Next to 127.0.0.1:7450 (tailscaled holds :7450 wildcard)
    
    EADDRINUSE on prod — tailscaled was already bound to 100.107.67.67:7450
    (tailnet IP, IPv4) and [fd7a:115c:a1e0::d432:4343]:7450 (IPv6), which
    blocks any 0.0.0.0:7450 wildcard bind. Pinning Grant to loopback only;
    external traffic reaches it through tailscale serve → 127.0.0.1:7450
    (or whatever reverse proxy fronts the box).
---
 ecosystem.config.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/ecosystem.config.js b/ecosystem.config.js
index 92c8489..408afd5 100644
--- a/ecosystem.config.js
+++ b/ecosystem.config.js
@@ -2,7 +2,11 @@ module.exports = {
   apps: [{
     name: 'grant-app',
     script: 'node_modules/.bin/next',
-    args: 'start -p 7450',
+    // Bind loopback only — `tailscaled` holds 100.107.67.67:7450 (tailnet
+    // IP) and [fd7a:…]:7450, which blocks any 0.0.0.0:7450 wildcard bind
+    // (EADDRINUSE). External traffic reaches Grant via tailscale serve →
+    // 127.0.0.1:7450 (or any reverse proxy fronting it). 2026-05-20.
+    args: 'start -p 7450 -H 127.0.0.1',
     cwd: '/root/Projects/Grant',
     env: {
       NODE_ENV: 'production',

← 9561414 initial scaffold (2026-05-06 overnight session)  ·  back to Grant  ·  harden(auth): add scrypt + rate-limit + refuse-to-boot to /a df9207a →