# Seattle Contabo cloud VPS in Seattle, US. Public internet-facing host for services that need a stable external IP, plus Tailscale exit node / DERP relay for the mesh. ## Specs | | | |---|---| | Hostname | `vmi2076105` | | OS | Ubuntu 24.04.4 LTS (Noble) | | Public IP | YOUR_WAN_IP | | Tailscale IP | 100.82.197.124 (Headscale node ID:2) | | RAM | 62 GB | | Disk | 290 GB root (~110 GB free) | | Tailscale | 1.96.4 | SSH aliases (see `~/.ssh/config`): `seattle` (public IP, Contabo SSH), `seattle-tailscale` (via Tailscale IP). ## Role - **Public exit node** for Tailscale mesh - **DERP relay** (`derper`) — self-hosted DERP, advertised to Headscale - **Stoatchat** (Revolt fork) full stack — see `docs/admin/stoatchat-operational-status.md` - **AI coding workstation** (HolyClaude, :3059) - **Personal productivity** (Obsidian remote, Wallabag, KeeWeb, Padloc) - **Matrix / LiveKit** signalling + TURN for video calls - **DDNS updaters** for `*.vish.gg` records pointing to this VPS ## Running services All managed via `docker compose`. Twenty containers as of 2026-04-18. | Container | Purpose | Ports | |---|---|---| | `holyclaude` | Web UI for Claude Code via [coderluii/holyclaude](https://github.com/coderluii/holyclaude) | `100.82.197.124:3059 → 3001` | | `derper` | Tailscale DERP relay | `:3478/udp`, `:8444/tcp` | | `livekit` | WebRTC SFU for Matrix calls | `:7880-7881/tcp`, `:50000-50100/udp` | | `fluxer_server` | Fluxer backend | `127.0.0.1:8088` | | `nats-core` | NATS messaging | internal | | `nats-jetstream` | NATS persistence | internal | | `elasticsearch` | Stoatchat search | `:9200` | | `valkey` | Redis-compatible cache (Stoatchat) | internal | | `meilisearch` | Full-text search | `:7700` | | `padloc-nginx` / `padloc-server` / `padloc-pwa` | Padloc password manager | `:5500` | | `keeweb` | KeeWeb password vault | `:8443` | | `obsidian` | Headless Obsidian via LinuxServer image | `127.0.0.1:3000-3001` | | `wallabag` | Read-later service | `127.0.0.1:8880` | | `dozzle-agent` | Remote log agent | `:7007`, `:8080` | | `diun` | Docker image update notifier | — | | `ddns-ddns-seattle-derp-1` | Cloudflare DDNS for DERP DNS | — | | `ddns-ddns-seattle-proxied-1` | Cloudflare DDNS for proxied records | — | | `ddns-ddns-seattle-stoatchat-1` | Cloudflare DDNS for Stoatchat | — | Nginx runs on the host (not in Docker) on `:80/:443` with Let's Encrypt and terminates SSL for all public-facing services. ## Networking - `eth0` — Contabo public IP (YOUR_WAN_IP) - `tailscale0` — 100.82.197.124, advertises as exit node - Firewall: Contabo panel + ufw; ports 80, 443, 2222 (SSH), 7880-7881, 50000-50100/udp, 8444, 5500, 3478/udp open - DDNS: three Cloudflare DDNS containers keep DNS records synced to the public IP ## Related docs - [HolyClaude service](../services/individual/holyclaude.md) - [Stoatchat operational status](../admin/stoatchat-operational-status.md) - [Seattle monitoring update (Feb 2026)](../admin/monitoring-update-seattle-2026-02.md) - [Headscale](../services/individual/headscale.md) — DERP relay advertisement ## Host access ```sh ssh seattle # public IP, port 2222 ssh seattle-tailscale # via Tailscale (100.82.197.124) ``` SSH login is `root` (key-based); no password auth.