Files
homelab-configs/siklos-docker-services.md
T

6.9 KiB

Siklos Docker Services — Project Knowledge

Host

  • VM112 / siklos / docker-server
  • IP: 192.168.88.27
  • Specs: 4c/12GB RAM
  • SSH: jgitta@192.168.88.27 (via Proxmox host jump)
  • Docker compose files: /srv/docker/<service>/docker-compose.yml
  • Note: vm.swappiness=10 set in /etc/sysctl.conf (April 2026)

Running Containers (verified 2026-06-18)

Container Image Port(s) Compose Path
portainer portainer/portainer-ce:latest 9000, 9443 /srv/docker/portainer/
pihole pihole/pihole:latest 53, 8080 /srv/docker/pihole/
open-webui ghcr.io/open-webui/open-webui:main 3000 /srv/docker/open-webui/
onlyoffice onlyoffice/documentserver 8880 /srv/docker/media/
homarr homarr:latest 7575 /srv/docker/homarr/
uptime-kuma uptime-kuma:2 3001 /srv/docker/uptime-kuma/
beszel henrygd/beszel:latest 8085 /srv/docker/beszel/
beszel-agent henrygd/beszel-agent:latest host (unix socket) /srv/docker/beszel/
glances nicolargo/glances:latest 61208 /srv/docker/glances/
meshcentral typhonragewind/meshcentral:latest 444 /srv/docker/meshcentral/
guacamole jwetzell/guacamole 8383 /srv/docker/guacamole/
karakeep-web-1 karakeep:release 3010 /srv/docker/karakeep/
karakeep-meilisearch-1 meilisearch:v1.13.3 7700 (internal) /srv/docker/karakeep/
karakeep-chrome-1 alpine-chrome:124 /srv/docker/karakeep/
linkwarden-linkwarden-1 linkwarden:latest 3015 /srv/docker/linkwarden/
linkwarden-postgres-1 postgres:16-alpine 5432 /srv/docker/linkwarden/
wordpress wordpress:php8.3-apache 8095 /srv/docker/wordpress/
wordpress-db mariadb:10.11 3306 (internal) /srv/docker/wordpress/
dashy lissy93/dashy:latest 8081 /srv/docker/dashy/
dashboard dashboard-dashboard 8096 /srv/docker/dashboard/
grav linuxserver/grav:latest 8585 /srv/docker/grav/
watchtower containrrr/watchtower /srv/docker/watchtower/

Open WebUI

  • URL: https://ai.jgitta.com
  • Port: 3000
  • Compose: /srv/docker/open-webui/docker-compose.yml
  • Connects to Ollama backend running on jgpc (192.168.88.41, no external port)

Photo Management

  • Immich runs on VM113 (photos, 192.168.88.32) — migrated from siklos in April 2026
  • PhotoPrism was removed from siklos in June 2026 — Immich chosen as the single photo management solution

Pi-hole

  • Port: 53 (DNS), 8080 (web UI)
  • URL: https://pihole.jgitta.com
  • Network mode: host (no docker-proxy — eliminates the port-53 freeze bug)
  • Config: listeningMode = "ALL" in pihole.toml
  • Upstream DNS: 192.168.88.1 only (MikroTik) — MikroTik resolves local jgitta.com domains and forwards everything else to 1.1.1.1/8.8.8.8. Do NOT add 1.1.1.1 directly as a Pi-hole upstream — dnsmasq load-balances across all upstreams, which would cause local domains to sometimes resolve to the WAN IP instead of internal Caddy IP.
  • FTL DB: /etc/pihole/pihole-FTL.db
  • Rate limit: 300 concurrent queries
  • Excluded from Watchtower auto-updates
  • Pi-hole v6
  • Watchdog: native cron on Siklos at */5 * * * */usr/local/bin/pihole-watchdog.sh (restarts if DNS fails); Claude scheduled task is a secondary layer
  • Uptime Kuma DNS monitor uses 192.168.88.27 (host IP, not Docker internal)

Monitoring Stack — Beszel (migrated 2026-06-18)

Replaced Prometheus + Grafana + cAdvisor + node_exporter with Beszel — a lightweight all-in-one monitoring tool.

  • Hub: Docker container on siklos, port 8085 → https://beszel.jgitta.com
  • Compose: /srv/docker/beszel/docker-compose.yml
  • Architecture: Hub communicates with agents over SSH (port 45876). On siklos the agent uses a unix socket (/srv/docker/beszel/beszel_socket/beszel.sock) to avoid Docker network isolation issues.
  • Agent deployment: Binary + systemd service (beszel-agent.service) on each remote host. Install script: curl -sL https://get.beszel.dev/agent | bash
  • Universal token: Used to auto-register agents — stored in PocketBase universal_tokens collection
  • Agents installed on: siklos (.27), jellyfin (.10), jgpc (.41), proxmox jg-hud (.25), PBS (.60), caddy (.110), photos VM113 (.32), OCIS VM114 (.63)
  • Alerts configured (via PocketBase API, regular user token required — not superuser):
    • Status — host goes down
    • CPU — >90%
    • Memory — >90%
    • Disk — >85%
  • Notifications: Telegram bot 8758434542:AAEW6omM7twyInsb2INuy6mD1w2EWXHqmzE, chat 8260387200
  • Uptime Kuma: port 3001 (status.jgitta.com), joined to pihole_default network — handles HTTP/port/DNS uptime checks (separate from Beszel resource monitoring)

OnlyOffice

  • URL: https://office.jgitta.com
  • Port: 8880 (all interfaces)
  • Compose: /srv/docker/media/docker-compose.yml
  • Replaces Collabora (richdocuments app is disabled in Nextcloud; onlyoffice app is enabled)
  • JWT secret (must match Nextcloud config): 4f2b0c719af2de99befacfec9ca5e8373cbdeb76
  • Nextcloud occ settings (set on VM103/next):
    • DocumentServerUrl = https://office.jgitta.com/
    • DocumentServerInternalUrl = http://192.168.88.27:8880/
    • StorageUrl = https://next.jgitta.com/
    • jwt_secret = (matches container local.json above)
    • jwt_header = Authorization
  • To reconfigure after container recreation: re-run occ config:app:set onlyoffice jwt_secret --value="<secret from local.json>"
  • Container JWT secret location: /etc/onlyoffice/documentserver/local.json.services.CoAuthoring.secret.inbox.string

Key Notes

  • Watchtower excludes Pi-hole from auto-updates
  • OnlyOffice replaced Collabora (lighter RAM usage)
  • RAM reduced from 16GB → 12GB (April 2026, live via Proxmox balloon driver, no reboot) — freed further in June 2026 when PhotoPrism was removed
  • vm.swappiness=10 set to reduce swap pressure
  • NFS mount /mnt/immich-photos (from VM113 192.168.88.32) is in fstab — read-only access to Immich photo storage

Portainer Setup (April 2026)

Portainer CE manages Docker across three hosts from a single UI.

Server (web UI):

  • URL: http://192.168.88.27:9000 or https://192.168.88.27:9443
  • Future URL (once Caddy SSH fixed): https://portainer.jgitta.com
  • Compose: /srv/docker/portainer/docker-compose.yml

Agents (managed remote environments):

Host IP Agent Port Compose Path
jellyfin 192.168.88.10 9001 /srv/docker/portainer-agent/
jgpc 192.168.88.41 9001 /srv/docker/portainer-agent/

Adding agents in Portainer UI (first-time setup):

  1. Open Portainer at http://192.168.88.27:9000 and create your admin account
  2. Go to Environments → Add environment → Agent
  3. For jellyfin: name jellyfin, URL 192.168.88.10:9001
  4. For jgpc: name jgpc, URL 192.168.88.41:9001

Caddy config: Entry for portainer.jgitta.com is ready in workspace Caddyfile — needs deploying once Caddy VM SSH access is restored.