Skip to content

HT-016 — Nginx Reverse Proxy Setup on WSL2 (Atlantis LAN)

Atlantis ITS · How-To · v1.1 · June 2026 Author: Scout (Ozzy review) · Updated: Ozzy — June 2026 Supersedes: HT-016 (archived)

Field Value
Document ID HT-016
Title Nginx Reverse Proxy Setup on WSL2 (Atlantis LAN)
Version 1.1
Status Active
Author Scout (Ozzy review)
Last Updated June 10, 2026
Owner Ozzy / Scout
Related Docs HT-015 (WSL Bridge), HT-022 (Tailscale + RustDesk), SOP-003, INC-004
Forgejo Path atlantis-docs/how-tos/HT-016-Nginx-WSL2-Atlantis-LAN.md
Local Path C:\AtlantisITS\knowledge\HT-016-Nginx-WSL2-Atlantis-LAN.md

1. Purpose

Provide clean .atlantis.lan hostnames for all local Trunks services instead of remembering localhost port numbers. This how-to covers the Windows hosts file, nginx WSL2 site configs, and the enable/test/reload cycle for every active Atlantis service.

⚠️ WARNING: The Windows hosts file is wiped by any Windows repair install or Reset this PC procedure. Re-apply this HT after any Trunks rebuild. See INC-004 for context.

Mercy's Rule: "Ports are for machines. Names are for humans."


2. Current Services (June 2026)

Core Infrastructure

Hostname Service Port Notes
forgejo.atlantis.lan Forgejo 3010 Git platform — source of truth
nova.atlantis.lan Nova Router 7100 Agent routing — NOT raw Ollama
n8n.atlantis.lan n8n Automation 5678 Trunks WSL2 instance
ops.atlantis.lan OPS Command Center 3000 Mercy owned
mkdocs.atlantis.lan MkDocs KB 8000 Local build only

AI Operations Suite (V26 — NEW)

Hostname Service Port Notes
litellm.atlantis.lan LiteLLM Gateway 4000 Model router — Docker WSL2
noc.atlantis.lan Atlantis AI NOC 5200 AA-NOC frontend
radar.atlantis.lan Repo Radar 5300 OSS intelligence
tailscale.atlantis.lan Tailscale Radar 5400 Network health dashboard
council.atlantis.lan Atlantis Council 5150 Multi-agent roundtable
quest.atlantis.lan Atlantis Quest 5153 16-bit RPG dev

Apps & Tools

Hostname Service Port Notes
jobs.atlantis.lan Job Engine 3005 Lead aggregator
horizon.atlantis.lan Horizon Runway 5176 Local dev — prod is Vercel
moltbook.atlantis.lan Nova Moltbook 7202 Docker, atlantis-sandbox

Monitoring (Docker Desktop)

Hostname Service Port Notes
grafana.atlantis.lan Grafana 3021 Metrics dashboards
prometheus.atlantis.lan Prometheus 9090 Metrics collector
ntfy.atlantis.lan NTFY 8080 Push notifications

Docker Services Note: Grafana (3021) and Prometheus (9090) run in Docker Desktop — NOT in WSL2 PM2. Docker Desktop on Windows exposes these ports to localhost automatically so Nginx proxies them the same way. If proxying fails, verify Docker Desktop is running and containers are healthy.

Nova Router tip: nova.atlantis.lan routes to Nova Router on port 7100 (agent routing layer) — NOT raw Ollama on 11434. Always hit the router.

Horizon tip: horizon.atlantis.lan is local dev only. Production Horizon Runway lives at horizon.atlantisits.ai on Vercel.


3. Step-by-Step Setup

Step 1 — Windows Hosts File

⚠️ Must be done as Administrator. Skipping Admin causes silent save failures.

Open Notepad as Administrator, then open:

C:\Windows\System32\drivers\etc\hosts

Add this complete block at the bottom:

# ==================== ATLANTIS LAN ====================
127.0.0.1       localhost

# Core Infrastructure
127.0.0.1       forgejo.atlantis.lan
127.0.0.1       nova.atlantis.lan
127.0.0.1       n8n.atlantis.lan
127.0.0.1       ops.atlantis.lan
127.0.0.1       mkdocs.atlantis.lan

# AI Operations Suite
127.0.0.1       litellm.atlantis.lan
127.0.0.1       noc.atlantis.lan
127.0.0.1       radar.atlantis.lan
127.0.0.1       tailscale.atlantis.lan
127.0.0.1       council.atlantis.lan
127.0.0.1       quest.atlantis.lan

# Apps & Tools
127.0.0.1       jobs.atlantis.lan
127.0.0.1       horizon.atlantis.lan
127.0.0.1       moltbook.atlantis.lan

# Monitoring
127.0.0.1       grafana.atlantis.lan
127.0.0.1       prometheus.atlantis.lan
127.0.0.1       ntfy.atlantis.lan

# Future (uncomment when ready)
# 127.0.0.1     bluesky.atlantis.lan
# 127.0.0.1     soc.atlantis.lan
# 127.0.0.1     nova-grid.atlantis.lan
# ======================================================

Save the file, then flush DNS from Command Prompt (Admin):

ipconfig /flushdns

WSL2 Localhost Forwarding: Use 127.0.0.1 in the Windows hosts file. WSL2 has built-in localhost forwarding — Windows automatically tunnels 127.0.0.1 traffic on any port straight into WSL2. No portproxy needed. The 172.26.x.x address is dynamic — ignore it.

For Maranda on the same LAN: Use Trunks' Windows IP instead of 127.0.0.1 in her hosts file: run ipconfig on Windows, find IPv4 Address.


Step 2 — Install Nginx in WSL2

If nginx is not already installed:

sudo apt update && sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
sudo nginx -t    # Should return: syntax is ok / test is successful

Step 3 — Create Nginx Site Configs

Create one config file per service in /etc/nginx/sites-available/. The pattern is identical — only server_name and proxy_pass port change.

Config Template

server {
    listen 80;
    server_name SERVICE.atlantis.lan;

    access_log /var/log/nginx/SERVICE.atlantis.lan.access.log;
    error_log  /var/log/nginx/SERVICE.atlantis.lan.error.log;

    location / {
        proxy_pass http://127.0.0.1:PORT;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Core Infrastructure Configs

# forgejo.atlantis.lan → :3010
sudo tee /etc/nginx/sites-available/forgejo.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name forgejo.atlantis.lan;
    access_log /var/log/nginx/forgejo.atlantis.lan.access.log;
    error_log  /var/log/nginx/forgejo.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:3010;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# nova.atlantis.lan → :7100
sudo tee /etc/nginx/sites-available/nova.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name nova.atlantis.lan;
    access_log /var/log/nginx/nova.atlantis.lan.access.log;
    error_log  /var/log/nginx/nova.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:7100;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# n8n.atlantis.lan → :5678
sudo tee /etc/nginx/sites-available/n8n.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name n8n.atlantis.lan;
    access_log /var/log/nginx/n8n.atlantis.lan.access.log;
    error_log  /var/log/nginx/n8n.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# ops.atlantis.lan → :3000
sudo tee /etc/nginx/sites-available/ops.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name ops.atlantis.lan;
    access_log /var/log/nginx/ops.atlantis.lan.access.log;
    error_log  /var/log/nginx/ops.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# mkdocs.atlantis.lan → :8000
sudo tee /etc/nginx/sites-available/mkdocs.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name mkdocs.atlantis.lan;
    access_log /var/log/nginx/mkdocs.atlantis.lan.access.log;
    error_log  /var/log/nginx/mkdocs.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

AI Operations Suite Configs (V26 NEW)

# litellm.atlantis.lan → :4000
sudo tee /etc/nginx/sites-available/litellm.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name litellm.atlantis.lan;
    access_log /var/log/nginx/litellm.atlantis.lan.access.log;
    error_log  /var/log/nginx/litellm.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# noc.atlantis.lan → :5200
sudo tee /etc/nginx/sites-available/noc.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name noc.atlantis.lan;
    access_log /var/log/nginx/noc.atlantis.lan.access.log;
    error_log  /var/log/nginx/noc.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:5200;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# radar.atlantis.lan → :5300
sudo tee /etc/nginx/sites-available/radar.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name radar.atlantis.lan;
    access_log /var/log/nginx/radar.atlantis.lan.access.log;
    error_log  /var/log/nginx/radar.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:5300;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# tailscale.atlantis.lan → :5400
sudo tee /etc/nginx/sites-available/tailscale.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name tailscale.atlantis.lan;
    access_log /var/log/nginx/tailscale.atlantis.lan.access.log;
    error_log  /var/log/nginx/tailscale.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:5400;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# council.atlantis.lan → :5150
sudo tee /etc/nginx/sites-available/council.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name council.atlantis.lan;
    access_log /var/log/nginx/council.atlantis.lan.access.log;
    error_log  /var/log/nginx/council.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:5150;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# quest.atlantis.lan → :5153
sudo tee /etc/nginx/sites-available/quest.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name quest.atlantis.lan;
    access_log /var/log/nginx/quest.atlantis.lan.access.log;
    error_log  /var/log/nginx/quest.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:5153;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

Apps, Tools & Monitoring Configs

# jobs.atlantis.lan → :3005
sudo tee /etc/nginx/sites-available/jobs.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name jobs.atlantis.lan;
    access_log /var/log/nginx/jobs.atlantis.lan.access.log;
    error_log  /var/log/nginx/jobs.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:3005;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# horizon.atlantis.lan → :5176 (local dev only)
sudo tee /etc/nginx/sites-available/horizon.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name horizon.atlantis.lan;
    access_log /var/log/nginx/horizon.atlantis.lan.access.log;
    error_log  /var/log/nginx/horizon.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:5176;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# moltbook.atlantis.lan → :7202
sudo tee /etc/nginx/sites-available/moltbook.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name moltbook.atlantis.lan;
    access_log /var/log/nginx/moltbook.atlantis.lan.access.log;
    error_log  /var/log/nginx/moltbook.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:7202;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# grafana.atlantis.lan → :3021
sudo tee /etc/nginx/sites-available/grafana.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name grafana.atlantis.lan;
    access_log /var/log/nginx/grafana.atlantis.lan.access.log;
    error_log  /var/log/nginx/grafana.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:3021;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# prometheus.atlantis.lan → :9090
sudo tee /etc/nginx/sites-available/prometheus.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name prometheus.atlantis.lan;
    access_log /var/log/nginx/prometheus.atlantis.lan.access.log;
    error_log  /var/log/nginx/prometheus.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:9090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

# ntfy.atlantis.lan → :8080
sudo tee /etc/nginx/sites-available/ntfy.atlantis.lan << 'EOF'
server {
    listen 80;
    server_name ntfy.atlantis.lan;
    access_log /var/log/nginx/ntfy.atlantis.lan.access.log;
    error_log  /var/log/nginx/ntfy.atlantis.lan.error.log;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

Step 4 — Enable All Sites

# Core Infrastructure
sudo ln -s /etc/nginx/sites-available/forgejo.atlantis.lan    /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/nova.atlantis.lan       /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/n8n.atlantis.lan        /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/ops.atlantis.lan        /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/mkdocs.atlantis.lan     /etc/nginx/sites-enabled/

# AI Operations Suite
sudo ln -s /etc/nginx/sites-available/litellm.atlantis.lan    /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/noc.atlantis.lan        /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/radar.atlantis.lan      /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/tailscale.atlantis.lan  /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/council.atlantis.lan    /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/quest.atlantis.lan      /etc/nginx/sites-enabled/

# Apps & Tools
sudo ln -s /etc/nginx/sites-available/jobs.atlantis.lan       /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/horizon.atlantis.lan    /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/moltbook.atlantis.lan   /etc/nginx/sites-enabled/

# Monitoring
sudo ln -s /etc/nginx/sites-available/grafana.atlantis.lan    /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/prometheus.atlantis.lan /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/ntfy.atlantis.lan       /etc/nginx/sites-enabled/

# Test and reload
sudo nginx -t && sudo systemctl reload nginx

TIP: Always run nginx -t before reload. A config syntax error blocks the reload without breaking existing traffic.


Step 5 — Verify

From Windows browser, test each hostname:

# Core
http://forgejo.atlantis.lan
http://nova.atlantis.lan
http://n8n.atlantis.lan
http://ops.atlantis.lan

# AI Ops Suite
http://litellm.atlantis.lan
http://noc.atlantis.lan
http://radar.atlantis.lan
http://tailscale.atlantis.lan
http://council.atlantis.lan

# Apps
http://jobs.atlantis.lan
http://horizon.atlantis.lan
http://moltbook.atlantis.lan

From WSL2, test with curl:

curl -I http://forgejo.atlantis.lan
curl -I http://noc.atlantis.lan
curl -I http://litellm.atlantis.lan


4. Quick Reference

Task Command
Test nginx config sudo nginx -t
Reload nginx (no drop) sudo systemctl reload nginx
Restart nginx sudo systemctl restart nginx
Check nginx status sudo systemctl status nginx
List enabled sites ls /etc/nginx/sites-enabled/
Flush DNS (Windows) ipconfig /flushdns
View nginx error log sudo tail -f /var/log/nginx/error.log
View nginx access log sudo tail -f /var/log/nginx/access.log
Disable a site sudo rm /etc/nginx/sites-enabled/sitename
Check port 80 sudo lsof -i :80

5. Post-Rebuild Checklist (INC-004 Context)

Run this checklist any time Trunks receives a Windows repair install or Reset this PC:

[ ] Open Notepad as Administrator
[ ] Re-apply Windows hosts block from Step 1 above
[ ] Run: ipconfig /flushdns (Admin CMD)
[ ] Verify nginx still installed in WSL2: sudo nginx -t
[ ] If nginx was wiped — repeat Steps 2-4
[ ] Verify all PM2 services green: pm2 status
[ ] Verify Docker / WSL2 integration active in Docker Desktop Settings
[ ] Verify LiteLLM Docker container running: docker ps | grep litellm
[ ] Spot-check each .atlantis.lan hostname in browser

6. Notes & Known Limitations

  • .atlantis.lan hostnames are Trunks-local only — they do not resolve on other LAN machines. For Maranda, use Trunks' Windows IP.
  • WSL2 nginx runs inside Ubuntu. If Ubuntu is wiped or re-imported, nginx must be reinstalled (Steps 2-4).
  • horizon.atlantis.lan (port 5176) is local dev only. Production is at horizon.atlantisits.ai on Vercel.
  • nova.atlantis.lan hitting port 7100 (nova-router) is intentional. Raw Ollama at 11434 should not be exposed via nginx.
  • If a service is not running, nginx proxies successfully but returns 502 Bad Gateway. Check pm2 status or docker ps first.
  • nova-bluesky has no handler yet — expected stub warnings in nova-router logs. Not a blocker.
  • LiteLLM runs in Docker WSL2. If Docker is not running, litellm.atlantis.lan will return 502. Check docker ps | grep litellm.

7. Atlantis URL Standard

Layer Domain
Public — Company atlantisits.co
Public — AI Products atlantisits.ai
Public — Knowledge atlantisits.info
Internal LAN *.atlantis.lan
External Tunnels *.atlantisits.co (Cloudflare CF Tunnel)

8. Changelog

Version Date Change
1.0 May 22, 2026 Initial — Scout + Ozzy. Core infrastructure services.
1.1 June 10, 2026 Merged HT-016 (archived). Added V26 AI Ops Suite (LiteLLM, AA-NOC, Repo Radar, Tailscale Radar, Council, Quest). Added monitoring (Grafana, Prometheus, NTFY). Updated Horizon port 3100→5176. Hosts file block ready to paste. INC-004 checklist updated for Docker.

HT-016 v1.1 · Atlantis ITS · Internal Supersedes HT-016 (archived June 2026) "Ports are for machines. Names are for humans." — Mercy 🔱