Homelab – Services

CT 104 — Leichtgewichtige Services ohne eigene Isolation. Zurück zum Homelab-Überblick.


Container

EigenschaftWert
CT ID104
Hostnameservices
Cores2
RAM2 GB
Swap512 MB
Disk12 GB (local-zfs)
Bind-Mount/mnt/storage/mnt/media (ro)
Start Order4

Services die keine eigene Isolation brauchen und wenig Ressourcen verbrauchen. Jeder Service hat ein eigenes Compose-File unter /opt/<service>/. Ausnahme: Actual, iSponsorBlockTV, Bambuddy und Portainer Agent teilen sich /opt/services/docker-compose.yml (historisch gewachsen, wird nicht refactored).


Services

ServicePortFunktion
Actual Budget5006Budgetverwaltung
iSponsorBlockTVhost networkSponsorBlock für Apple TV
Bambuddy8000Bambu Lab A1 Drucker-Monitoring
Speedtest Tracker8765WAN-Speedtests alle 2 Stunden
Homarr7575Dashboard (Admin-Board + Freunde-Board)
BetterBahn3000DB Split-Ticketing
Homebox3100Haushaltsinventar mit QR-Codes
Portainer Agent9001Remote-Management für Portainer auf CT 101

Actual Budget

Benötigt SharedArrayBuffer, das nur über HTTPS funktioniert. Gelöst über Tailscale Serve auf dem Proxmox-Host — stellt den Service unter einer Tailscale-HTTPS-URL mit gültigem Zertifikat bereit. Nicht über Cloudflare Tunnel exponiert.

tailscale serve --bg --https=5006 http://<ct-ip>:5006

Die Serve-Konfiguration überlebt Reboots automatisch.


Homarr

Multi-User-Boards: Admin-Board mit allen Services, Freunde-Board mit Jellyfin, Seerr, BetterBahn. Proxmox-Integration über dedizierter API-Token mit PVEAuditor-Rolle.

Extern über Cloudflare Tunnel, eigener Login (kein Cloudflare Access davor).


BetterBahn

Kein eigener Login. Deshalb Cloudflare Access mit E-Mail-OTP davor — sonst wäre der Endpunkt offen für Bot-Traffic der die DB-API überlasten kann.


Compose-Files

# /opt/services/docker-compose.yml
services:
  actual:
    image: actualbudget/actual-server:latest
    container_name: actual
    restart: unless-stopped
    ports:
      - "5006:5006"
    volumes:
      - ./actual:/data
 
  isponsorblocktv:
    image: ghcr.io/dmunozv04/isponsorblocktv:latest
    container_name: isponsorblocktv
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./isponsorblocktv:/app/data
 
  bambuddy:
    image: ghcr.io/maziggy/bambuddy:latest
    container_name: bambuddy
    user: "1000:1000"
    cap_add:
      - NET_BIND_SERVICE
    network_mode: host
    environment:
      - TZ=Europe/Berlin
      - PORT=8000
    volumes:
      - /opt/services/bambuddy/data:/app/data
      - /opt/services/bambuddy/logs:/app/logs
    restart: unless-stopped
 
  portainer-agent:
    image: portainer/agent:lts
    container_name: portainer-agent
    restart: unless-stopped
    ports:
      - "9001:9001"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
# /opt/speedtest-tracker/docker-compose.yml
services:
  speedtest-tracker:
    image: lscr.io/linuxserver/speedtest-tracker:latest
    container_name: speedtest-tracker
    restart: unless-stopped
    ports:
      - "8765:80"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
      - APP_KEY=${SPEEDTEST_APP_KEY}
      - DB_CONNECTION=sqlite
      - SPEEDTEST_SCHEDULE=0 */2 * * *
      - DISPLAY_TIMEZONE=Europe/Berlin
    volumes:
      - ./config:/config
# /opt/homarr/docker-compose.yml
services:
  homarr:
    image: ghcr.io/homarr-labs/homarr:latest
    container_name: homarr
    restart: unless-stopped
    ports:
      - "7575:7575"
    environment:
      - TZ=Europe/Berlin
      - SECRET_ENCRYPTION_KEY=${HOMARR_SECRET}
    volumes:
      - ./appdata:/appdata
# /opt/betterbahn/docker-compose.yml
services:
  betterbahn:
    image: ghcr.io/betterbahn/betterbahn:latest
    container_name: betterbahn
    restart: unless-stopped
    environment:
      TZ: Europe/Berlin
      NODE_ENV: production
      NEXT_TELEMETRY_DISABLED: "1"
    ports:
      - "3000:3000"
# /opt/homebox/docker-compose.yml
services:
  homebox:
    image: ghcr.io/sysadminsmedia/homebox:latest
    container_name: homebox
    restart: unless-stopped
    ports:
      - "3100:7745"
    environment:
      - TZ=Europe/Berlin
      - HBOX_LOG_LEVEL=info
      - HBOX_LOG_FORMAT=text
      - HBOX_WEB_MAX_UPLOAD_SIZE=10
      - HBOX_OPTIONS_ALLOW_ANALYTICS=false
    volumes:
      - ./data:/data

Secrets in .env-Dateien im jeweiligen Verzeichnis.