---
title: "Homelab — Full Services Map & Network Reference"
aliases: [homelab-map, services-map, homelab-reference]
tags: [homelab, proxmox, docker, dns, networking, reference]
created: 2026-04-26
updated: 2026-05-03
last_verified: 2026-05-03 (live audit)
status: live
---

## Infrastructure — Containers & VMs

| CT/VM | Name | IP | RAM | Cores | Status | Role |
|-------|------|----|-----|-------|--------|------|
| host | pve | 192.168.1.48 | 24 GB | 4 | running | Proxmox VE 9.1.9 (`ssh pve`) |
| ~~CT101~~ | ~~adguard~~ | ~~192.168.1.62~~ | — | — | **destroyed** | Legacy AdGuard — destroyed 2026-05-03 |
| CT102 | docker | 192.168.1.225 | 9 GB | 4 | running | All Docker services (root 20GB + data-hdd 300GB) |
| CT105 | immich | 192.168.1.71 | 8 GB | 4 | running | Immich photos (native install, GPU bug fixed 2026-05-03) |
| CT111 | media | 192.168.1.230 | 4 GB | 4 | running | Jellyfin + *arr stack + GPU passthrough |
| CT112 | n8n | 192.168.1.232 | 2 GB | 2 | running | n8n workflow automation |
| VM200 | kali-linux | DHCP | 8 GB | — | stopped | Pentest (start manually: `qm start 200`) |

> **CT103/104/107/109/110 already destroyed** — old beszel, vaultwarden, homarr, grafana, uptime-kuma LXCs removed. All services migrated to CT102 Docker.

---

---

## CT102 — Docker Services (192.168.1.225)

### Edge / Reverse Proxy

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| Nginx Proxy Manager | http://192.168.1.225:81 (admin) | :80/:443/:81 | /opt/npm/ | ✅ running |
| CrowdSec | — | — | /opt/services/crowdsec/ | ✅ running (IPS only — no bouncer yet) |

### Dashboard / Management

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| Glance | https://home.ai-impress.com 🌐 | :8085 | /opt/services/glance/ | ✅ running |
| Portainer | https://192.168.1.225:9443 | :9000/:9443 | `portainer_data` volume | ✅ running |
| Dozzle | http://192.168.1.225:9999 | :9999 | /opt/services/dozzle/ | ✅ running |
| Uptime Kuma | http://192.168.1.225:3001 | :3001 | /opt/services/uptime-kuma/ | ✅ running |
| Beszel Hub | https://beszel.ai-impress.com 🏠 | :8090 | /opt/services/beszel/ | ✅ running |

### Apps

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| Nextcloud | https://nextcloud.ai-impress.com 🌐 | :8080 | /opt/nextcloud/ | ✅ running |
| Collabora (CODE) | — (internal to Nextcloud) | :9980 | docker compose w/ nextcloud | ✅ running |
| Vaultwarden | https://passwords.ai-impress.com 🌐 | :8082 | /opt/services/vaultwarden/ | ✅ running |
| Paperless-ngx | https://docs.ai-impress.com 🏠 | :8010 | /opt/services/paperless/ | ✅ running |
| Forgejo | https://git.ai-impress.com 🏠 | :3002 / :222 (ssh) | /opt/services/forgejo/ | ✅ running |
| Karakeep | https://links.ai-impress.com 🏠 | :3000 | /opt/karakeep/ | ✅ running |
| Stirling PDF | https://pdf.ai-impress.com 🏠 | :8088 | /opt/services/stirling-pdf/ | ⚠️ BROKEN |
| IT Tools | https://tools.ai-impress.com 🏠 | :8880 | /opt/services/it-tools/ | ✅ running |
| Documenso | https://edoc.ai-impress.com 🌐 | :3004 | /opt/services/documenso/ | ✅ running |
| Cheatsheet | http://192.168.1.225:8999 | :8999 | /opt/services/cheatsheet/ | ✅ running |

### Finance / Planning

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| Actual Budget | https://budget.ai-impress.com 🏠 | :5006 | /opt/services/actual/ | ✅ running |
| Maybe Finance | https://finance.ai-impress.com 🏠 | :3003 | /opt/services/maybe/ | ✅ running |
| Plane | https://plan.ai-impress.com 🏠 | :8181 | /opt/services/plane/ | ✅ running |

### Media Requests

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| Jellyseerr | https://media.ai-impress.com 🌐 | :5055 | /opt/services/jellyseerr/ | ✅ running |

### DNS (CT102)

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| AdGuard Home (Docker) | https://dns.ai-impress.com 🏠 | :53 / :8053 (admin UI) | /opt/services/adguard/ | ✅ running |

### Monitoring & Alerting

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| Prometheus | http://192.168.1.225:9090 | :9090 | /opt/monitoring/ | ✅ running |
| Alertmanager | http://192.168.1.225:9093 | :9093 | /opt/monitoring/ | ✅ running |
| Loki | — | :3100 | /opt/monitoring/ | ✅ running |
| Promtail | — | :9080 | /opt/monitoring/ | ✅ running (Docker + syslog targets) |
| Node Exporter | — | :9100 | — | ✅ running |
| Beszel Agent | — | (internal) | — | ✅ running |
| Ntfy | https://ntfy.ai-impress.com 🌐 | :2586 | /opt/services/ntfy/ | ✅ running |
| Power Cost | https://power.ai-impress.com 🌐 | :8091 | /opt/services/power-cost/ | ✅ running |

### Backup & Infra

| Service | URL | Internal Port | Config | Status |
|---------|-----|---------------|--------|--------|
| Backrest (restic) | https://backup.ai-impress.com 🏠 | :9898 | /opt/services/backrest/ | ✅ running |
| Watchtower | — | — | /opt/services/watchtower/ | ✅ running |
| Diun | — | — | /opt/services/diun/ | ✅ running |
| Docker Socket Proxy | — | **127.0.0.1:2376** | — | ✅ running ✅ fixed |

---

## CT111 — Media Stack (192.168.1.230)

| Service | URL | Port | Config | Status |
|---------|-----|------|--------|--------|
| Jellyfin | https://jellyfin.ai-impress.com 🌐 | :8096 | /opt/media/jellyfin/ | ✅ running |
| Sonarr | https://sonarr.ai-impress.com 🏠 | :8989 | /opt/media/sonarr/ | ✅ running |
| Radarr | https://radarr.ai-impress.com 🏠 | :7878 | /opt/media/radarr/ | ✅ running |
| Prowlarr | https://prowlarr.ai-impress.com 🏠 | :9696 | /opt/media/prowlarr/ | ✅ running |
| qBittorrent | https://qbit.ai-impress.com 🏠 | :8080 (WebUI) / :50000 (P2P) | /opt/media/qbittorrent/ | ✅ running |
| Bazarr | https://bazarr.ai-impress.com 🏠 | :6767 | /opt/media/bazarr/ | ✅ running (added 2026-05-03) |
| Recyclarr | — (cron only) | — | /opt/media/recyclarr/ | ✅ running (added 2026-05-03) |
| FlareSolverr | — | :8191 | — | ✅ running |

- GPU: Intel HD Graphics 630 → `/dev/dri/card1` + `/dev/dri/renderD128` (NOT renderD129 — that doesn't exist)
- Media mount: `data-hdd:vm-111-media` (500 GB LV) → `/mnt/media`
- qBit port: changed 6881 → 50000 (compose + config). **Pending**: router Virtual Server 50000 TCP+UDP → 192.168.1.230:50000
- Russian 1080p quality profile: minFormatScore=100 (requires Russian audio). Custom formats: Russian Audio +500, English Audio +50
- Prowlarr indexers: RuTracker, RuTor, NNM-Club, 1337x, Nyaa, Anidub, LimeTorrents
- Bazarr: connected to Sonarr+Radarr, OpenSubtitles.com provider enabled
- Recyclarr: config at /opt/media/recyclarr/recyclarr.yml (Sonarr+Radarr API keys set)

---

## CT105 — Immich (192.168.1.71) — STOPPED

| Service | URL | Port |
|---------|-----|------|
| Immich | https://photo.ai-impress.com 🌐 | :2283 (native install, not Docker) |

- Native install: `/opt/immich/`
- DHCP reservation: MAC `BC:24:11:EA:8F:FD → 192.168.1.71`
- Fix: `pct set 105 --delete dev1 && pct set 105 --delete dev2 && pct start 105`

---

## CT112 — n8n (192.168.1.232)

| Service | URL | Port |
|---------|-----|------|
| n8n | https://auto.ai-impress.com 🌐 | :5678 |

- NPM proxy id=32
- Compose: CT112 root `/` (Docker process, not compose file)

---

## NPM Proxy Hosts — Full List

| id | Domain | Backend | Enabled | Notes |
|----|--------|---------|---------|-------|
| 1 | nextcloud.ai-impress.com | 192.168.1.225:8080 | ✅ | 🌐 |
| 2 | links.ai-impress.com | 192.168.1.225:3000 | ✅ | 🏠 Karakeep |
| 3 | home.ai-impress.com | 192.168.1.225:8085 | ✅ | 🌐 Glance |
| 4 | passwords.ai-impress.com | 192.168.1.225:8082 | ✅ | 🌐 Vaultwarden |
| 5 | flow.ai-impress.com | 192.168.1.105:80 | ✅ | ❌ DEAD — 192.168.1.105 doesn't exist |
| 6 | ssh.ai-impress.com | 192.168.1.142:80 | ✅ | ❌ DEAD — 192.168.1.142 doesn't exist |
| 7 | uptime.ai-impress.com | 192.168.1.225:3001 | ✅ | 🏠 Uptime Kuma |
| 8 | grafana.ai-impress.com | 192.168.1.88:3000 | ✅ | ❌ DEAD — Grafana deleted |
| 9 | photo.ai-impress.com | 192.168.1.71:2283 | ✅ | 🌐 Immich (502 — CT stopped) |
| 10 | dns.ai-impress.com | 192.168.1.62:80 | ✅ | ⚠️ Points to CT101 — should be 192.168.1.225:8053 |
| 11 | beszel.ai-impress.com | 192.168.1.225:8090 | ✅ | 🏠 |
| 12 | auth.ai-impress.com | 192.168.1.225:9001 | ✅ | ❌ DEAD — Authentik deleted |
| 13 | logs.ai-impress.com | 192.168.1.225:9999 | ✅ | 🏠 Dozzle |
| 14 | ntfy.ai-impress.com | 192.168.1.225:2586 | ✅ | 🌐 |
| 15 | backup.ai-impress.com | 192.168.1.225:9898 | ✅ | 🏠 Backrest |
| 16 | docs.ai-impress.com | 192.168.1.225:8010 | ✅ | 🏠 Paperless |
| 17 | tools.ai-impress.com | 192.168.1.225:8880 | ✅ | 🏠 IT Tools |
| 18 | pdf.ai-impress.com | 192.168.1.225:8088 | ✅ | 🏠 Stirling-PDF (broken) |
| 19 | budget.ai-impress.com | 192.168.1.225:5006 | ✅ | 🏠 Actual |
| 20 | uptime.ai-impress.com | 192.168.1.225:3001 | ❌ disabled | duplicate of id=7 |
| 21 | jellyfin.ai-impress.com | 192.168.1.230:8096 | ✅ | 🌐 |
| 22 | sonarr.ai-impress.com | 192.168.1.230:8989 | ✅ | 🏠 |
| 23 | radarr.ai-impress.com | 192.168.1.230:7878 | ✅ | 🏠 |
| 24 | prowlarr.ai-impress.com | 192.168.1.230:9696 | ✅ | 🏠 |
| 25 | qbit.ai-impress.com | 192.168.1.230:8080 | ✅ | 🏠 |
| 26 | mail.ai-impress.com | 57.128.160.249:443 | ✅ | 🌐 → aimpress VPS (Mailcow) |
| 27 | power.ai-impress.com | 192.168.1.225:8091 | ✅ | 🌐 |
| 28 | git.ai-impress.com | 192.168.1.225:3002 | ✅ | 🏠 Forgejo |
| 29 | plan.ai-impress.com | 192.168.1.225:8181 | ✅ | 🏠 Plane |
| 30 | finance.ai-impress.com | 192.168.1.225:3003 | ✅ | 🏠 Maybe |
| 31 | media.ai-impress.com | 192.168.1.225:5055 | ✅ | 🌐 Jellyseerr |
| 32 | auto.ai-impress.com | 192.168.1.232:5678 | ✅ | 🌐 n8n (CT112) |
| 33 | edoc.ai-impress.com | 192.168.1.225:3004 | ✅ | 🌐 Documenso |

**Dead proxies to clean up:** id=5, 6, 8, 12 (delete or disable)
**Wrong target:** id=10 — change to `192.168.1.225:8053` (after CT101 migration complete)

---

## DNS Architecture

### Current State (2026-05-03)

```
LAN devices → DNS: 192.168.1.62 (CT101, native AdGuard)
                                 ↓
            *.ai-impress.com → 192.168.1.225 (NPM)
            mail.ai-impress.com → 57.128.160.249 (VPS)
            upstreams: quad9 + cloudflare + google
```

### Target State (after router DNS update)

```
LAN devices → DNS: 192.168.1.225 (CT102 Docker AdGuard :53)
                                 ↓
            *.ai-impress.com → 192.168.1.225 (NPM, split-DNS)
            mail.ai-impress.com → 57.128.160.249 (VPS override)
```

**Pending**: Update router DHCP Primary DNS: 192.168.1.62 → **192.168.1.225**

### External DNS (Cloudflare)

Public A records → `83.151.203.105` (home public IP):
- `nextcloud`, `photo`, `passwords`, `home`, `jellyfin`, `power`, `media`, `auto`, `edoc`, `ntfy`

LAN-only (no Cloudflare A record):
- `dns`, `beszel`, `logs`, `tools`, `pdf`, `sonarr`, `radarr`, `prowlarr`, `qbit`, `backup`, `docs`, `links`, `git`, `budget`, `finance`, `plan`

---

## Storage Layout

| Pool | Device | Size | Used by |
|------|--------|------|---------|
| local-lvm | NVMe SSD | 141 GB | All CT root disks (CT101:4G, CT102:20G, CT105:20G, CT111:16G, CT112:8G, VM200:60G) |
| data-hdd | HDD | 5.6 TB | CT102 data mount (300G), CT105 upload (200G) + data (50G), CT111 media (500G LV) |
| usb-backup | USB Toshiba 1TB | 916 GB | vzdump backups (daily 12:20) |

---

## Quick Commands

```bash
# SSH to Proxmox
ssh pve

# Run command in CT102 (docker host)
ssh pve "pct exec 102 -- bash -lc '<cmd>'"

# Full docker list
ssh pve "pct exec 102 -- docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"

# Restart a service in CT102
ssh pve "pct exec 102 -- bash -lc 'cd /opt/services/<name> && docker compose restart'"

# Check NPM proxy hosts
ssh pve "pct exec 102 -- sqlite3 /opt/npm/data/database.sqlite 'SELECT id, domain_names, forward_host, forward_port, enabled FROM proxy_host;'"

# Check AdGuard rewrites
ssh pve "pct exec 102 -- docker exec adguard cat /opt/adguardhome/conf/AdGuardHome.yaml | grep -A3 rewrites"

# Free thin-pool (run after bulk deletes)
ssh pve "pct exec 102 -- fstrim -av"
```

---

## Related

- [[wiki/infrastructure/server-pve|server-pve]] — host hardware + storage details
- [[wiki/infrastructure/network-topology|network-topology]] — traffic flow diagram
- [[wiki/homelab/router-tplink-ax72-config|router-tplink-ax72-config]] — AX72 DHCP/DNS/ports
- [[wiki/homelab/homelab-media-stack|homelab-media-stack]] — CT111 GPU setup details
- [[wiki/homelab/glance-dashboard|glance-dashboard]] — CT102 Glance config
