--- name: Gitea Internal API Access description: git.azcomputerguru.com is NOT behind Cloudflare — it's the office Cox IP NAT'd to NPM (openresty) on Jupiter. Prefer internal 172.16.3.20:3000 for reliability (bypasses NPM SSL-renewal reload blips) type: reference originSessionId: 511840e9-1aba-40e6-a81e-4905bac958ec --- **CORRECTED 2026-05-27** (prior note claimed "behind Cloudflare / curl gets a JS challenge" — that is WRONG/outdated). `git.azcomputerguru.com` resolves to a **direct public A record `72.194.62.10`** (an ACG-office Cox static IP, adjacent to ix at .5 — `wsip-72-194-62-10.ph.ph.cox.net`). NOT Cloudflare-proxied (same answer from 1.1.1.1; no CF edge IP). Path: `.10` → office firewall NAT → **NPM (Nginx Proxy Manager = openresty) on Jupiter `172.16.3.20`** → Gitea container `:3000`. The NPM proxy host is `/data/nginx/proxy_host/4.conf`. `curl`/HTTPS works fine and returns `200` (Server: openresty) — there is no challenge page. **Why prefer the internal address for API/git on-network:** the external path goes through NPM, which periodically renews its SSL certs and reloads openresty — that briefly drops external `:443` (observed 2026-05-27: ~7-9 min TCP-timeout window, self-recovered when renewal completed). The internal address bypasses NPM, so it's faster and immune to those renewal blips. It is NOT about Cloudflare. Use the internal LAN/Tailscale address: ``` http://172.16.3.20:3000/api/v1/... ``` Works when on LAN or when Tailscale is connected. Requires the API token from vault: ```bash bash D:/vault/scripts/vault.sh get-field services/gitea.sops.yaml credentials.api.api-token # 9b1da4b79a38ef782268341d25a4b6880572063f ``` Example issue creation: ```bash TOKEN="9b1da4b79a38ef782268341d25a4b6880572063f" curl -s -X POST "http://172.16.3.20:3000/api/v1/repos/azcomputerguru/gururmm/issues" \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "...", "body": "..."}' ```