Files
infrastructure/docs/03-SERVICES-OTHER.md
T
jazzymc 21ff7f5c12
ci/woodpecker/push/woodpecker Pipeline was successful
[IMMICH] Deploy Immich v3 photo server (Google Photos replacement)
- Compose stack at appdata/immich, exposed via Traefik at photos.xtrm-lab.org
- Library on cache NVMe (raidz1), Postgres on cache
- Nightly backup (DB dump + originals rsync) to parity-protected array disk1
- Google Takeout import ready via immich-go v0.32.0
2026-07-08 15:15:14 +00:00

555 lines
13 KiB
Markdown

# Other Services
**Last Updated:** 2026-07-08
Non-critical services that enhance functionality but don't affect core network operation.
---
## DevOps
### Gitea (Git Server)
| Component | IP | URL |
|-----------|-----|-----|
| gitea | 172.18.0.31 | https://git.xtrm-lab.org |
**Ports:** 2222→22 (SSH), 3005→3000 (HTTP)
**Auth:** Authentik OAuth2
**Database:** postgresql17 (gitea)
### Woodpecker CI
| Component | IP | URL |
|-----------|-----|-----|
| woodpecker-server | 172.18.0.32 | https://ci.xtrm-lab.org |
| woodpecker-agent | 172.18.0.33 | - |
**Auth:** Gitea OAuth2
**Purpose:** CI/CD pipelines for infrastructure repo
---
## Network Management
### NetDisco (Network Discovery)
| Component | IP | URL |
|-----------|-----|-----|
| netdisco-web | 172.18.0.41 | https://netdisco.xtrm-lab.org |
| netdisco-backend | 172.18.0.42 | - |
**Database:** postgresql17 (netdisco_db)
**Purpose:** SNMP-based device discovery, MAC/ARP tracking
### Unimus
| Network | URL |
|---------|-----|
| host | https://unimus.xtrm-lab.org |
**Purpose:** Network device configuration backup (MikroTik)
---
## Monitoring
### Uptime Kuma
| Component | IP | URL |
|-----------|-----|-----|
| UptimeKuma | 172.18.0.20 | https://uptime.xtrm-lab.org |
| Uptime-Kuma-API | 172.18.0.18 | - |
| AutoKuma | 172.18.0.19 | - |
**Monitors:** 24 services configured
### Speedtest Tracker
| Component | IP | URL |
|-----------|-----|-----|
| speedtest-tracker | 172.18.0.21 | https://speed.xtrm-lab.org |
### NetAlertX
| Network | URL |
|---------|-----|
| host | https://netalert.xtrm-lab.org |
**Purpose:** Network device discovery and alerting
---
## Gaming
### Minecraft Server
| Component | IP | Port | Address |
|-----------|-----|------|---------|
| minecraft | 172.18.0.80 | 25565 | minecraft.xtrm-lab.org |
**Image:** itzg/minecraft-server (Java Edition)
**Version:** Latest (1.21.11)
**Mode:** Survival, Normal difficulty, PVP enabled
**Max Players:** 10
**RAM:** 2 GB
**Online Mode:** Yes (requires paid account)
**Data:** `/mnt/user/appdata/minecraft/data`
**NAT:** WAN:25565 → 192.168.10.20:25565 + hairpin NAT
**Dockge Stack:** `minecraft`
---
## Media
### Immich (Photos)
| Component | IP (dockerproxy) | URL |
|-----------|------------------|-----|
| immich_server | 172.18.0.132 | https://photos.xtrm-lab.org |
| immich_machine_learning | (immich_default) | - |
| immich_postgres | (immich_default) | - (vectorchord) |
| immich_redis | (immich_default) | - |
**Purpose:** Self-hosted Google Photos replacement (Immich v3)
**Stack:** docker compose at `/mnt/user/appdata/immich/` (`IMMICH_VERSION=v3`)
**Access:** Traefik → `photos.xtrm-lab.org` (wildcard cert, no forward-auth so mobile app works) + direct LAN `192.168.10.20:2283`
**Storage:** library on cache NVMe pool `/mnt/user/photos` (raidz1, redundant, fast); Postgres on cache `appdata/immich/postgres`
**Backup:** nightly 03:30 (`scripts/immich-backup.sh`, cron `dynamix/immich-backup.cron`) — pg_dumpall (keep 14) + originals rsync → `/mnt/disk1/immich-backup` (array disk1, parity-protected, independent media)
**Import:** immich-go v0.32.0 at `scripts/` for Google Takeout import (`scripts/import-google-photos.sh`)
### Plex
| Network | Port | URL |
|---------|------|-----|
| host | 32400 | https://plex.xtrm-lab.org |
**Libraries:** Movies, TV Shows, Music
### Plex Debrid
| Network | Purpose |
|---------|---------|
| host | Debrid integration for Plex |
**Purpose:** Integrates Real-Debrid/AllDebrid with Plex for streaming
### Zurg + Rclone
| Component | Port | Purpose |
|-----------|------|---------|
| zurg | 9999 | Real-Debrid WebDAV mount |
| zurg-rclone | - | Rclone FUSE mount |
**Purpose:** Mounts Real-Debrid library as local filesystem for Plex
### Overseerr
| Component | Port | URL |
|-----------|------|-----|
| overseerr | 5055 | https://overseerr.xtrm-lab.org |
**Purpose:** Media request management for Plex
### Radarr
| Component | IP | URL |
|-----------|-----|-----|
| radarr | 172.18.0.43 | https://radarr.xtrm-lab.org |
**Purpose:** Movie collection manager (PVR)
### Sonarr
| Component | IP | URL |
|-----------|-----|-----|
| sonarr | 172.18.0.44 | https://sonarr.xtrm-lab.org |
**Purpose:** TV series collection manager (PVR)
### Prowlarr
| Component | IP | URL |
|-----------|-----|-----|
| prowlarr | 172.18.0.45 | https://prowlarr.xtrm-lab.org |
**Purpose:** Indexer manager for Radarr/Sonarr
### Libation
| Component | IP |
|-----------|-----|
| Libation | 172.18.0.23 |
**Purpose:** Audiobook management
### Transmission
| Component | IP | Ports |
|-----------|-----|-------|
| transmission | 172.18.0.26 | 9091, 51413 |
**Purpose:** Torrent client
### Roms (SMB Share)
| Property | Value |
|----------|-------|
| Share Path | /mnt/user/roms |
| Protocol | SMB (guest access, read-only) |
| Size | 2.3 TB (49 systems) |
**Consumers:**
| Device | Mount Point | Method |
|--------|-------------|--------|
| Nobara | /mnt/roms | fstab (CIFS, guest, systemd.automount) |
| Recalbox | /recalbox/share/roms_network | custom.sh boot script (CIFS) |
**Recalbox:** Network roms are bind-mounted over local rom directories at boot via `/recalbox/share/system/custom.sh`. Local roms were deleted from SD card to save space.
---
## Productivity
### Nextcloud
| Component | IP | URL |
|-----------|-----|-----|
| Nextcloud | 172.18.0.24 | https://cloud.xtrm-lab.org |
**Purpose:** File sync, calendar, contacts
### Actual Budget
| Component | IP | URL |
|-----------|-----|-----|
| actual-budget | 172.18.0.16 | https://actual.xtrm-lab.org |
**Purpose:** Personal finance tracking
### n8n
| Component | IP | URL |
|-----------|-----|-----|
| n8n | 172.18.0.17 | https://n8n.xtrm-lab.org |
**Purpose:** Workflow automation
### Karakeep
| Component | IP | URL |
|-----------|-----|-----|
| karakeep | 172.18.0.25 | https://karakeep.xtrm-lab.org |
**Purpose:** Bookmark manager
### Homarr (Dashboard)
| Component | IP | URL |
|-----------|-----|-----|
| homarr | 172.18.0.4 | https://xtrm-lab.org |
**Purpose:** Home dashboard with Docker integration
---
## Storage & Backup
### TimeMachine
| Network | IP |
|---------|-----|
| br0 macvlan | 192.168.10.12 |
**Purpose:** macOS Time Machine backup target
### UrBackup
| Network | URL |
|---------|-----|
| host | https://urbackup.xtrm-lab.org |
**Purpose:** File and image backup for PCs
### RustFS
| Network |
|---------|
| bridge |
**Purpose:** Rust-based filesystem utilities
---
## Remote Access
### Kasm Workspaces (Browser Isolation)
| Component | IP | URL |
|-----------|-----|-----|
| kasm (DinD host) | 172.18.0.66 | https://kasm.xtrm-lab.org |
| kasm_proxy | 172.19.0.8 (internal) | - |
| kasm_api | 172.19.0.7 (internal) | - |
| kasm_manager | 172.19.0.6 (internal) | - |
| kasm_agent | 172.19.0.2 (internal) | - |
| kasm_db | 172.19.0.3 (internal) | - |
| kasm_guac | 172.19.0.9 (internal) | - |
**Version:** 1.18.1
**Architecture:** Docker-in-Docker (runs its own Docker daemon with internal containers)
**Network:** dockerproxy (outer), kasm_default_network 172.19.0.0/16 (inner)
**Ports:** 3000 (web UI), 6333 (proxy/sessions)
**Data:** `/mnt/user/appdata/kasm/`
**Traefik Integration:**
- Uses `kasm-headers` middleware (no `frameDeny` — Kasm requires iframes)
- Service backend: `https://172.18.0.66:6333` with `insecure-skip-verify`
- Zone config: `proxy_port=443`, `proxy_hostname=$request_host$` (routes sessions through Traefik)
### RustDesk
| Component | Ports |
|-----------|-------|
| rustdesk-hbbs | 21115-21116 (TCP), 21116 (UDP) |
| rustdesk-hbbr | 21117-21119 |
**Purpose:** Self-hosted remote desktop
### Tailscale
| Host | IP |
|------|-----|
| HAP1 | 172.17.0.3 |
**Purpose:** Mesh VPN for remote access
### Open WebUI
| Component | Port |
|-----------|------|
| open-webui | 3080 |
**Purpose:** Web UI for Ollama (ChatGPT-like interface)
---
## Smart Home
### Home Assistant
| Network | URL |
|---------|-----|
| host | https://ha.xtrm-lab.org |
**Purpose:** Home automation hub
**Trusted Proxies:** 172.18.0.0/16, 192.168.10.0/24
### Home Assistant Time Machine
| Component | Port |
|-----------|------|
| Home-Assistant-Time-Machine | 54000 |
**Purpose:** HA backup/snapshot management
### Tuya Gateway
| Network |
|---------|
| host |
**Purpose:** Local Tuya device integration
---
## Notifications
### ntfy
| Component | Port | Purpose |
|-----------|------|---------|
| ntfy | 8380 | Push notification server |
**Purpose:** Self-hosted push notifications (UnifiedPush compatible)
---
## Sync & Knowledge
### Obsidian LiveSync
| Component | Port |
|-----------|------|
| obsidian-livesync | 5984 |
**Purpose:** CouchDB-based real-time sync for Obsidian vaults
### Supabase (OpenBrain)
| Component | Purpose |
|-----------|---------|
| supabase-db | PostgreSQL database |
| supabase-auth | Authentication |
| supabase-rest | PostgREST API |
| supabase-storage | File storage |
| supabase-studio | Web dashboard |
| supabase-meta | Metadata service |
| supabase-analytics | Analytics/logging |
| supabase-imgproxy | Image processing |
| supabase-edge-functions | Edge functions runtime |
| supabase-pooler | Connection pooling |
| supabase-vector | Vector/embeddings |
| supabase-kong | API gateway (stopped) |
| realtime-dev.supabase-realtime | Realtime subscriptions |
**Purpose:** Self-hosted Supabase stack with PGVector for AI persistent memory (OpenBrain)
---
## Database Tools
### pgAdmin 4
| Component | Port |
|-----------|------|
| pgAdmin4 | 5050 |
**Purpose:** PostgreSQL web administration UI
---
## Development
### OpenVSCode Server (Web IDE)
| Network | Port | URL |
|---------|------|-----|
| host | 3100 | https://code.xtrm-lab.org |
**Purpose:** Web-based VS Code IDE with full host access
**Auth:** Authentik forward auth (SSO)
**Binary:** `/mnt/user/appdata/openvscode/current/` (host-native, not a container)
**Config:** `/mnt/user/appdata/openvscode/config/`
**Workspace:** `/mnt/user/projects/` (12 personal repos + 18 AMPECO projects)
**See:** `12-DEVELOPMENT-ENVIRONMENT.md`
### Claude Code
| Network | Version |
|---------|---------|
| host | 2.1.71 |
**Purpose:** AI coding assistant CLI
**Binary:** `/mnt/user/appdata/claude-code/.npm-global/bin/claude`
**Config:** `/mnt/user/appdata/claude-code/.claude/`
### Cooperator CLI
| Network | Version |
|---------|---------|
| host | 3.36.1 |
**Purpose:** AI-driven development workflow automation (AMPECO)
**Binary:** `/usr/local/lib/node_modules/@ampeco/cooperator/`
---
## Container Management
### Dockge
| Network | Port |
|---------|------|
| bridge | 5001 |
**Purpose:** Docker Compose stack management UI
**Access:** http://192.168.10.20:5001
**Data:** `/mnt/user/appdata/dockge/data`
**Stacks:** `/mnt/user/appdata/dockge/stacks`
### Dockhand
| Network |
|---------|
| dockerproxy |
**Purpose:** Docker container health monitoring
### Docker Socket Proxy
| Component | IP |
|-----------|-----|
| dockersocket | 172.18.0.2 |
**Purpose:** Secure Docker socket proxy for Traefik and other services
---
## Agents
### xtrm-agent
| Component | Port |
|-----------|------|
| xtrm-agent | 8088 |
**Purpose:** Claude Code agent for server management
### SeekAndWatch
| Component |
|-----------|
| SeekAndWatch |
**Purpose:** Media monitoring/automation
---
## AI / LLM
### Ollama (Local LLM Inference)
| Network | Port |
|---------|------|
| bridge | 11434 |
**Purpose:** Local LLM inference, GPU-accelerated on the integrated AMD Radeon 780M (gfx1103) via ROCm 7.2.
**Image:** `ollama/ollama:rocm` (Dockge stack — replaced old `dockerman` template `my-ollama.xml`)
**API:** http://192.168.10.20:11434
**Data:** `/mnt/user/appdata/ollama`
**Stack:** `/mnt/user/appdata/dockge/stacks/ollama/compose.yaml`
**iGPU enablement** (gfx1103 not on AMD's official ROCm allowlist):
| Setting | Value |
|---------|-------|
| `HSA_OVERRIDE_GFX_VERSION` | 11.0.0 (report 780M as gfx1100) |
| `OLLAMA_IGPU_ENABLE` | 1 (Ollama 0.30+ drops iGPUs otherwise) |
| devices | `/dev/kfd`, `/dev/dri` |
| group_add | `18` (video) |
**Verified:** Ornith 1.0 9B GGUF runs 100% on GPU (33/33 layers), ~11 tok/s. iGPU is RAM-bandwidth bound (shared GTT, ~23 GiB addressable). 9B fits; 35B RAM-tight (no swap); 397B not feasible.
**⚠️ Limitation:** large prompts (~10k+ tokens) crash the iGPU (`ROCm unspecified launch failure` — gfx1103 rocBLAS). Tried flash-attn off, gfx1100/gfx1102, `num_batch=128` — all crash, so `OLLAMA_FLASH_ATTENTION`/`OLLAMA_KV_CACHE_TYPE=q8_0` were removed. Good for direct/interactive chat only, **not** an agent backend with big system prompts (tried as Hermes' model with a ~15.5k-token prompt — crashed every call, reverted to cloud).
---
## Stopped/Disabled Services
| Service | Reason | Status |
|---------|--------|--------|
| charge-* (12 containers) | Dev/test stack, stopped 6 weeks ago | Exited |
| minecraft | Not started | Created |
| supabase-kong | API gateway, stopped 2 days ago | Exited |
| unmarr | Stopped 5 days ago | Exited |
| llama-baseline-test | LLM benchmark, completed | Exited |
| llama-spec-test | LLM benchmark, completed | Exited |
| NetBox + Diode (8 containers) | Removed from active use | Removed |
| Portainer | Replaced by Dockge | Removed |
| Pi-hole | Replaced by AdGuard Home | Removed |
| Slurp'it | Replaced by Diode | Removed |
| binhex-plexpass | Duplicate of Plex | Removed |
| HomeAssistant_inabox | Duplicate of Home-Assistant-Container | Removed |
| nextcloud-aio-mastercontainer | Replaced by Nextcloud container | Removed |