Files
network/docker.md
T

143 lines
6.0 KiB
Markdown

# Docker Server
## Access
- **Hostname**: DOCKER
- **FQDN**: DOCKER.dohertylan.com
- **IP**: 10.100.0.35 (LAN_100) / 10.50.0.35 (DATA_50) / 10.200.0.35 (IOT_200)
- **OS**: Debian 13 (Trixie) 13.3, kernel 6.12.69+deb13-amd64
- **SSH**: `ssh dohertj2@10.100.0.35` (passwordless) — this is the local machine for Claude Code
- **Docker**: 29.2.1
- **Docker Compose**: v5.0.2
## Hardware (VM on ESXi)
- **CPU**: 22 vCPUs (Intel Xeon E5-2697 v4 @ 2.30GHz)
- **RAM**: 32 GB
- **Disk**: /dev/sda1 999 GB ext4 (930 GB free)
## Network
| Interface | MAC | IP | MTU | Port Group |
|-----------|-----|-----|-----|------------|
| ens192 | 00:0c:29:cf:bb:bb | 10.100.0.35/24 | 1500 | LAN_100 |
| ens256 | 00:0c:29:cf:bb:c5 | 10.50.0.35/24 | 9000 | DATA_50 |
| ens161 | 00:0c:29:cf:bb:cf | 10.200.0.35/24 | 1500 | IOT_200 |
- **Default gateway**: 10.100.0.1 (via ens192)
- **DNS**: 10.100.0.1
- **Domain**: dohertylan.com
### Docker Networks
| Network | Driver |
|---------|--------|
| traefik | bridge |
| semaphore_default | bridge |
## NFS Mounts (via TrueNAS DATA_50)
All mounts use NFS 4.2 with `nconnect=8,_netdev,nofail,x-systemd.automount`.
| Mount Point | NFS Export |
|-------------|-----------|
| /mnt/share | 10.50.0.25:/mnt/mypool/share |
| /mnt/other | 10.50.0.25:/mnt/mypool/Other |
## Reverse Proxy (Traefik)
Traefik handles HTTPS ingress on ports 80/443. All services below are accessed via `*.dohertylan.com` through Traefik, with Authelia providing SSO/2FA.
Cloudflare Companion auto-updates DNS records.
## Docker Containers
All 21 containers running. Most are on the `traefik` network.
### Infrastructure
| Container | Image | URL | Port | Purpose |
|-----------|-------|-----|------|---------|
| traefik | traefik:latest | traefik.dohertylan.com | 80, 443 | Reverse proxy |
| authelia | authelia/authelia:latest | auth.dohertylan.com | 9091 | SSO / 2FA |
| cloudflare-companion | tiredofit/traefik-cloudflare-companion:latest | — | — | Auto DNS updates |
| portainer | portainer/portainer-ce:latest | portainer.dohertylan.com | 9000, 9443 | Docker management UI |
| homepage | ghcr.io/gethomepage/homepage:latest | home.dohertylan.com | 3000 | Dashboard |
| uptime-kuma | louislam/uptime-kuma:latest | uptime.dohertylan.com | 3001 | Uptime monitoring |
### Media Management (Arr Stack)
| Container | Image | URL | Port | Purpose |
|-----------|-------|-----|------|---------|
| sonarr | lscr.io/linuxserver/sonarr:latest | sonarr.dohertylan.com | 8989 | TV show management |
| radarr | lscr.io/linuxserver/radarr:latest | radarr.dohertylan.com | 7878 | Movie management |
| whisparr | ghcr.io/hotio/whisparr:v3 | whisp.dohertylan.com | 6969 | Adult content management |
| prowlarr | lscr.io/linuxserver/prowlarr:latest | prowlarr.dohertylan.com | 9696 | Indexer manager |
| seerr | ghcr.io/seerr-team/seerr:latest | requests.dohertylan.com | 5055 | Media request UI |
| profilarr | santiagosayshey/profilarr:latest | profilarr.dohertylan.com | 6868 | Quality profile sync |
| tautulli | ghcr.io/tautulli/tautulli:latest | tautulli.dohertylan.com | 8181 | Plex analytics |
### Downloads
| Container | Image | URL | Port | Purpose |
|-----------|-------|-----|------|---------|
| nzbget | nzbgetcom/nzbget:latest | nzb.dohertylan.com | 6789 | Usenet downloader |
| gluetun | qmcgaw/gluetun:latest | — | 6881 | VPN container |
| qbittorrent | linuxserver/qbittorrent:latest | — (via gluetun) | — | Torrent client (VPN) |
### Utilities
| Container | Image | URL | Port | Purpose |
|-----------|-------|-----|------|---------|
| microbin | danielszabo99/microbin:latest | bin.dohertylan.com | 8080 | Pastebin |
| ittools | corentinth/it-tools:latest | ittools.dohertylan.com | 80 | IT utilities |
| stash | stashapp/stash:latest | stash.dohertylan.com | 9999 | Media organizer |
| ilo-fan | ilo_fan-ilo-fan | fan.dohertylan.com | 8000 | iLO fan control |
### Automation
| Container | Image | URL | Port | Purpose |
|-----------|-------|-----|------|---------|
| semaphore | semaphoreui/semaphore:latest | http://10.100.0.35:3000 | 3000 | Ansible UI |
### lmxopcua (carry `project=lmxopcua` label)
Stacks under `/opt/otopcua-*/` migrated from the Wonderware dev VM (DESKTOP-6JL3KKO) on 2026-04-28. Discoverable via `docker ps --filter label=project=lmxopcua`. Brought up on demand by the developer from WW via `lmxopcua-fix.ps1` (in `~/bin/` on WW), which SSHes here and runs compose.
| Container/Stack | Image | Port | Purpose |
|---|---|---|---|
| otopcua-mssql (always-on) | mcr.microsoft.com/mssql/server:2022-latest | 14330→1433 | Central config DB for OtOpcUa v2 |
| otopcua-pymodbus-* | otopcua-pymodbus:3.13.0 (local build) | 5020 | Modbus driver test fixture (5 profiles) |
| otopcua-ab-server-* | otopcua-ab-server:libplctag-release (local build) | 44818 | AB CIP driver test fixture (4 profiles) |
| otopcua-python-snap7-* | otopcua-python-snap7:1.0 (local build) | 1102 | S7 driver test fixture |
| otopcua-opc-plc | mcr.microsoft.com/iotedge/opc-plc:2.14.10 | 50000 | OPC UA reference simulator |
## Semaphore / Ansible
- **Semaphore UI**: http://10.100.0.35:3000
- **Data**: `/opt/semaphore/data/database.sqlite`
- **Compose file**: `/opt/semaphore/docker-compose.yml`
### Ansible Playbook
- **Location**: `/home/dohertj2/playbook/`
- **Main playbook**: `/home/dohertj2/playbook/site.yml`
- **Roles**: `/home/dohertj2/playbook/roles/`
- **Import tasks**: `/home/dohertj2/playbook/import/` (radarr, sonarr, nzbget, prowlarr, docker-compose-arr)
- **iLO fan playbook**: `/home/dohertj2/playbook/ilo_fan/`
## Docker Compose Locations
All compose files are under `/opt/<service>/docker-compose.yml`:
```
/opt/traefik/ /opt/portainer/ /opt/homepage/
/opt/sonarr/ /opt/radarr/ /opt/whisparr/
/opt/prowlarr/ /opt/seerr/ /opt/profilarr/
/opt/tautulli/ /opt/nzbget/ /opt/vpn_downloads/
/opt/uptime_kuma/ /opt/stash/ /opt/utilities/
/opt/semaphore/ /opt/ilo_fan/
/opt/otopcua-mssql/ /opt/otopcua-modbus/ /opt/otopcua-abcip/
/opt/otopcua-s7/ /opt/otopcua-opcuaclient/
```