Mein Self-Hosting-Ökosystem: Ein Dell OptiPlex 3070 Micro als Proxmox-Host, ergänzt durch einen Raspberry Pi 4 für Home Assistant. Externer Zugang über Cloudflare Tunnel und Tailscale. Kalender und Kontakte über Nextcloud auf Uberspace. Alles containerisiert, wartungsarm, auf Datensouveränität ausgelegt.
Architektur
Zwei physische Geräte im Rack, klare Aufgabenteilung:
Zugangsschicht: Cloudflare Tunnel + Tailscale. Kein klassischer Reverse Proxy. Kein Port-Forwarding. Externer Zugriff läuft ausschließlich über diese beiden Wege.
Identifiers: IPs, Ports, Subdomains, Tailnet-Name und Credentials liegen in Homelab – Privat.md (nicht öffentlich). Ohne diese Datei im Prompt-Kontext sind konkrete Netzwerkadressen unbekannt.
Philosophie: Wartungsarm vor feature-reich. Cronjob vor Monitoring-Stack. Docker vor nativer Installation. Sechs LXCs vor zehn VMs. Neue Services bekommen eigene Compose-Files unter /opt/<service>/.
Dokumentations-Prinzipien
Dieser Zettel ist als einzelne URL für Prompt-Kontext konzipiert — saschaperson.com/Homelab rendert alle Unter-Seiten per Transklusion auf einer Seite. Einem KI-Assistenten genügt diese URL plus Homelab – Privat.md als Kontext.
Strukturregeln für zukünftige Dokumentation:
Konzepte, Entscheidungslogik und Compose-Patterns gehören in die öffentlichen Zettel
Alle Identifier (IPs, Ports, Subdomains, Tokens, Usernamen) gehören ausschließlich in Homelab – Privat.md
Jeder LXC bekommt einen eigenen Zettel — kein Zusammenfassen
Hardware-unabhängige Services (HA, Nextcloud) bekommen eigene Zettel ohne Homelab-Prefix
Keine vergangene Konfiguration dokumentieren — nur aktueller Stand und Entscheidungsgründe
Homelab – Netzwerk & Zugang
Homelab – Netzwerk & Zugang
Die Zugangsschicht des Homelab-Ökosystems: lokales Netzwerk via Fritz!Box, externer Zugang über Cloudflare Tunnel und Tailscale. Zurück zum Homelab-Überblick.
Fritz!Box
Zentrale Netzwerkkomponente. DHCP-Server für das LAN, verweist auf Pi-hole als primären DNS-Server für alle Clients. IPv6 Router Advertisement aktiv, DNSv6 via RA und DHCPv6 deaktiviert.
Bekannte Einschränkung: Die Fritz!Box 6591 Cable erlaubt im UI nur einen DNS-Eintrag — kein expliziter Fallback-DNS konfigurierbar. Fällt Pi-hole aus, greift die Fritz!Box auf ihren eigenen Resolver zurück.
Fritz!Box Recovery (EVA-Tools)
Falls die Fritz!Box in einer Bootloop steckt oder ein fehlgeschlagenes Update recovered werden muss:
# eva_tools herunterladen, dann im PowerShell:./EVA-Discover.ps1 # Bootloader abfangen./EVA-FTP-Client.ps1 -ScriptBlock { SetEnvironmentValue DMC "RTL=y,SL1" } # RTL auf y./EVA-FTP-Client.ps1 -ScriptBlock { RebootTheDevice } # Neustart
Tailscale
Läuft auf dem Proxmox-Host direkt (nicht in einem LXC) als Subnet Router für das gesamte LAN. Alle LXCs und der Pi 4 sind damit von Tailscale-Geräten aus erreichbar, ohne dass auf jedem Gerät ein Agent laufen muss.
Warum Subnet Router statt Agent pro Gerät: Zentrale Konfiguration, ein einziger Punkt für ACLs, kein Overhead pro LXC.
--accept-dns=false: Der Host verwaltet DNS selbst über Pi-hole. Tailscale MagicDNS wird nicht verwendet.
MagicDNS — bewusst nicht genutzt
Der Subnet Router macht alle lokalen IPs (192.168.178.x) von überall erreichbar sobald Tailscale aktiv ist — dieselbe URL funktioniert zuhause im LAN und von unterwegs via Tailscale. MagicDNS-Hostnamen (z.B. proxmox statt 192.168.178.3) wären eine komfortablere Schreibweise, fügen aber keine Funktionalität hinzu.
Einzige Ausnahme: Wenn das Heimnetz-Subnetz (192.168.178.x) mit dem Netz am aktuellen Standort kollidiert (passiert gelegentlich in Hotels oder bei anderen Heimnetzwerken), versagt der Subnet Router. In diesem Fall sind die Tailscale-IPs aus [[Homelab – Privat]] der Fallback.
Key Expiry deaktiviert: Für Server-Geräte nötig — sonst alle 180 Tage manuelle Reauthentifizierung.
Der Pi 4 (Home Assistant) hat keinen eigenen Tailscale-Agent. HA ist über den Proxmox Subnet-Router erreichbar — kein separater Agent nötig.
Tailscale Serve
Actual Budget benötigt HTTPS wegen SharedArrayBuffer. Da kein öffentlicher Tunnel sinnvoll ist, löst Tailscale Serve das Problem: der Proxmox-Host stellt den Service unter einer Tailscale-HTTPS-URL mit gültigem Zertifikat bereit. Die Serve-Konfiguration überlebt Reboots automatisch.
Zwei Ebenen, ein System: Cloudflare Tunnel transportiert den Traffic, Cloudflare Access sichert ihn ab. Beides wird im Cloudflare Zero Trust Dashboard konfiguriert — kein lokales Config-File.
Cloudflare Tunnel
Der Cloudflared-Container in CT 101 baut eine ausgehende Verbindung zu Cloudflare auf. Kein Port-Forwarding, keine öffentliche IP nötig. Vier Services sind über Public Hostnames exponiert.
Warum nicht alles über Tunnel: Clients wie Infuse (Jellyfin) und die Immich Mobile App können keinen Browser-basierten OAuth-Flow. Diese Services laufen ausschließlich über Tailscale.
Cloudflare Access
Optionale Schutzschicht vor einzelnen Tunnel-Services. Authentifizierung per E-Mail-OTP — kein eigenes Passwort nötig. Cookie-Domain gilt für alle Access-geschützten Subdomains: einmal einloggen, überall gültig.
Welche Services Access bekommen: Nur Services ohne eigene Authentifizierung (z.B. BetterBahn). Services mit eigenem Login (Jellyfin, Seerr, Homarr) laufen ohne Access davor.
Exponierte Services
Service
Schutz
Jellyfin
Eigener Login (kein Access — Infuse kann keinen Browser-Flow)
Seerr
Eigener Login
Homarr
Eigener Login
BetterBahn
Cloudflare Access (E-Mail-OTP)
Konkrete Subdomains und Ports in [[Homelab – Privat]].
IP-Schema
Feste Reservierungen per DHCP in der Fritz!Box. Konkrete IPs in [[Homelab – Privat]].
Bereich
Geräte
Infrastruktur (.1–.9)
Fritz!Box, Powerline, OptiPlex, Pi 4
LXC-Container (.10–.15)
CT 101–106
Feste Geräte (.20–.39)
Apple TV, TV, PlayStation, Roborock, Bambu A1, ESP32, Aqara Hub
Pi-hole als DNS unter Heimnetz → Netzwerk → IPv4-Einstellungen → Lokaler DNS-Server eintragen. Die Fritz!Box verteilt diese Adresse per DHCP an alle Clients.
Bekannte Einschränkung Fritz!Box 6591 Cable: Nur ein DNS-Eintrag möglich, kein expliziter Fallback.
Cloudflared
Konfiguriert ausschließlich über das Cloudflare Zero Trust Dashboard, nicht lokal. Der Tunnel-Token liegt in einer .env-Datei. Details zur Tunnel-Konfiguration in Homelab – Netzwerk & Zugang.
Pulse
Proxmox-Monitoring über die Proxmox API. SSL-Verify deaktiviert (self-signed Zertifikat). API-Token mit PVEAuditor-Rolle — Monitoring-only, kein Schreibzugriff. Zeigt alle LXCs mit CPU, RAM, Disk, Netzwerk, Temperatur.
Portainer
Portainer CE als Container-Management GUI. Portainer Agents laufen zusätzlich auf CT 102, 103 und 104. Wird gelegentlich genutzt wenn das GUI praktischer ist als SSH.
Compose
Zwei separate Compose-Files: /opt/infrastructure/ (Pi-hole, Cloudflared, Portainer) und /opt/pulse/ (Pulse).
CT 103 — Jellyfin als Medienserver. Hardware-Transcoding über die Intel UHD 630 iGPU. Zurück zum Homelab-Überblick.
Container
Eigenschaft
Wert
CT ID
103
Hostname
media
Cores
2
RAM
2 GB
Swap
512 MB
Disk
20 GB (local-zfs)
iGPU
✅ dev0: /dev/dri/renderD128,mode=0666
Bind-Mount
/mnt/storage → /mnt/media (ro)
Start Order
3
Read-only Bind-Mount — Jellyfin liest nur. Schreibzugriff auf Medien läuft über CT 102 (Servarr).
Jellyfin
Läuft mit network_mode: host wegen DLNA-Discovery. Transkodiert über die iGPU via VA-API. Die iGPU wird mit CT 105 (Immich) geteilt.
Transcoding-Buffer auf /dev/shm (RAM-Disk) statt SSD — spart Schreibzyklen und ist schneller.
Externer Zugang: Cloudflare Tunnel. Kein Cloudflare Access davor — Infuse und Swiftfin (iOS/tvOS-Clients) können keinen Browser-Login-Flow. Schutz über Jellyfins eigene Benutzerverwaltung.
Libraries
Library
Pfad im Container
Typ
Movies
/mnt/media/Movies
Movies
TV Shows
/mnt/media/TV Shows
Shows
YouTube
/mnt/media/YouTube
Shows
Die YouTube-Library nutzt den Typ „Shows”. Keine aggressiven Remote-Metadata-Provider für diese Library — lokale Ordnerstruktur hat Vorrang.
CT 104 — Leichtgewichtige Services ohne eigene Isolation. Zurück zum Homelab-Überblick.
Container
Eigenschaft
Wert
CT ID
104
Hostname
services
Cores
2
RAM
2 GB
Swap
512 MB
Disk
12 GB (local-zfs)
Bind-Mount
/mnt/storage → /mnt/media (ro)
Start Order
4
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
Service
Port
Funktion
Actual Budget
5006
Budgetverwaltung
iSponsorBlockTV
host network
SponsorBlock für Apple TV
Bambuddy
8000
Bambu Lab A1 Drucker-Monitoring
Speedtest Tracker
8765
WAN-Speedtests alle 2 Stunden
Homarr
7575
Dashboard (Admin-Board + Freunde-Board)
BetterBahn
3000
DB Split-Ticketing
Homebox
3100
Haushaltsinventar mit QR-Codes
Portainer Agent
9001
Remote-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.
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.
CT 105 — Immich als Google-Photos-Alternative. Gesichtserkennung und Smart Search über OpenVINO auf der iGPU. Zurück zum Homelab-Überblick.
Container
Eigenschaft
Wert
CT ID
105
Hostname
photos
Cores
4
RAM
4 GB
Swap
1 GB
Disk
16 GB (local-zfs)
iGPU
✅ dev0: /dev/dri/renderD128,mode=0666
Bind-Mount
/mnt/storage/Photos → /mnt/photos (rw)
Start Order
5
4 Cores und 4 GB RAM weil Immich bei ML-Jobs (Gesichtserkennung, Smart Search, OCR) deutlich mehr zieht als andere Services.
Services
Service
Funktion
immich-server
API, Web-UI, Video-Transcoding (VAAPI)
immich-machine-learning
Gesichtserkennung, CLIP, OCR (OpenVINO auf iGPU)
immich-postgres
PostgreSQL mit VectorChord
immich-redis
Valkey — Cache und Job Queue
Hardware-Beschleunigung
Video-Transcoding: VAAPI. In Immich Admin → Video Transcoding → Hardware Acceleration = VAAPI, Hardware Decoding aktiviert.
Machine Learning: OpenVINO-Image (release-openvino). Nutzt die iGPU für Gesichtserkennung (buffalo_l), Smart Search (ViT-B-32) und OCR (PP-OCRv5). Die iGPU wird mit CT 103 (Jellyfin) geteilt.
Verifizieren: OpenVINOExecutionProvider muss vor CPUExecutionProvider in den Logs erscheinen.
Wichtig: PostgreSQL muss auf der SSD liegen — auf HDDs bricht die DB-Performance ein.
Berechtigungen: Immich läuft als root im Container (UID 0 = Host-UID 100000). Bind-Mount-Ordner auf dem Host entsprechend chown.
Externer Zugang
Kein Cloudflare Tunnel — die Immich Mobile App funktioniert nicht hinter Cloudflare Access. Zugang von unterwegs über Tailscale.
Compose
Basis ist die offizielle Immich-Compose. Anpassungen: VAAPI Transcoding + OpenVINO ML aktiviert über die mitgelieferten hwaccel.transcoding.yml und hwaccel.ml.yml.
SQLite statt PostgreSQL: Spart einen Container und RAM. Für einen Einzelbenutzer mit wenigen hundert Dokumenten pro Jahr ausreichend. Migration auf PostgreSQL jederzeit möglich.
Tika + Gotenberg: Ohne diese beiden verarbeitet Paperless nur PDFs und Bilder. Mit ihnen kommen Word, Excel, PowerPoint, E-Mails und weitere Formate dazu.
OCR-Sprachen:deu+eng.
PAPERLESS_WEBSERVER_WORKERS: 1 spart RAM. Für einen Einzelbenutzer reicht ein Worker.
Storage-Architektur und Backup-Strategie des Proxmox-Hosts. Zurück zum Homelab-Überblick.
Storage
MergerFS-Pool
Drei 2,5-Zoll HDDs via USB am OptiPlex, zusammengefasst mit MergerFS zu einem logischen Pool unter /mnt/storage. USB ist der bekannte Schwachpunkt — Langfristplan ist ein M.2-SATA-Controller (ASM1166, 6 Ports).
MergerFS-Policy:category.create=mfs — neue Dateien landen auf der Disk mit dem meisten freien Platz. Reserved Blocks auf 1% reduziert (tune2fs -m 1). Nutzbare Kapazität: ~13,5 TB.
USB-HDDs brauchen beim Boot ein paar Sekunden zum Spin-up. Ohne Fix starten LXCs bevor MergerFS gemountet ist — Services sehen ein leeres Verzeichnis. Drei Maßnahmen:
fstab:x-systemd.device-timeout=120 gibt USB-Disks 120 Sekunden zum Erscheinen
fstab: MergerFS-Eintrag mit x-systemd.requires und x-systemd.after für alle drei Disk-Mounts
systemd Drop-in:pve-guests.service wartet auf mnt-storage.mount bevor LXCs gestartet werden
Wichtig: Wenn Disks manuell ausgehängt werden (z.B. für SMART-Checks), vorher abhängige LXCs stoppen (pct stop 102 105 106). Nach Remount wieder starten.
TRaSH-konforme Struktur: Radarr, Sonarr und SABnzbd bekommen alle /mnt/storage als /data gemountet — ein einziges Dateisystem, Hardlinks und Atomic Moves funktionieren.
LXC Bind-Mounts
CT
Mount auf Host
Mount in LXC
Modus
Host-UID
102 (servarr)
/mnt/storage
/mnt/media
rw
101000
103 (media)
/mnt/storage
/data
ro
—
105 (photos)
/mnt/storage/photos
/mnt/photos
rw
100000
106 (documents)
/mnt/storage/documents
/mnt/documents
rw
101000
CT 104 hat keinen Storage-Mount — kein Service dort braucht Medienzugriff.
Backup
Ebene 1: LXC-Snapshots (vzdump)
Wöchentlich, Sonntag 03:00. Konfiguriert in der Proxmox Web-UI unter Datacenter → Backup.
Einstellung
Wert
Compression
ZSTD
Mode
Snapshot
Retention
Keep Last = 4
Ebene 2: Docker-Config-Backup
Wöchentliches tar der /opt-Verzeichnisse aller LXCs. Script: /root/backup-configs.sh, Cron: Sonntag 04:00.
HA OS internes Backup, wöchentlich, auf Samba-Share am OptiPlex (homeassistant_backup). Retention: 3 Backups. Encryption aktiviert — Emergency Kit (Encryption Key) separat im Passwort-Manager sichern.
Ebene 4: Immich DB-Backups
Immich erstellt automatisch PostgreSQL-Dumps unter /mnt/storage/Photos/backups/.
Ebene 5: Offsite
Geplant: Hetzner Storage Box + Borgbackup für Immich-Fotos und Paperless-Dokumente (beides unersetzbar). Muss automatisiert sein.
Kritikalitäts-Matrix
Kategorie
Daten
Kritisch
Unersetzbar
HA-Config, Zigbee-Pairing, Automationen
✅
Unersetzbar
Immich-Fotos, Paperless-Dokumente
✅
Aufwändig
Servarr-Configs, Pi-hole, Compose-Files
Mittel
Re-downloadbar
Filme, Serien, YouTube
Nein
Drive-Übersicht
Dev
Modell
Gehäuse
Mount
Pool
SMART-Monitoring
sda
Samsung SSD 840 EVO 500GB
intern
—
Boot
Scrutiny ✅
sdb
Seagate ST5000LM000-2U8170 (Expansion SW)
USB 2
/mnt/disk1
MergerFS
Manuell ⚠️
sdc
Seagate ST5000LM000-2AN170 (Portable)
USB 3
/mnt/disk2
MergerFS
Manuell ⚠️
sdd
WD MyPassport ST5000LM000-2AN170
USB 3
/mnt/disk3
MergerFS
Manuell ⚠️
sde
WD WD50NPJZ (Intenso-Gehäuse)
USB 2
/mnt/parity
SnapRAID Parity (geplant)
Scrutiny ✅
Nach SATA-Migration (ASM1166): alle fünf Drives von Scrutiny vollständig überwacht.
Drive Health Monitoring
Scrutiny
Läuft direkt auf dem Proxmox-Host (nicht in einem LXC) — notwendig für direkten Block-Device-Zugriff. Compose unter /opt/scrutiny/.
Einschränkung: Alle USB-Gehäuse (sdb, sdc, sdd, sde) blockieren SMART-Passthrough vollständig — USB-Bridge-Chips verweigern den Zugriff auf Linux. Nur sda (Boot-SSD, intern) wird von Scrutiny überwacht. Alle anderen Drives nur via CrystalDiskInfo auf Windows.
# /opt/scrutiny/config/collector.yamlversion: 1devices: - device: /dev/sda type: sat
Für die Boot-SSD (sda, Samsung 840 EVO) zusätzlich:
Attribut
Bedeutung
Grenze
Reallocated Sectors
Wie bei HDDs
>0 = beobachten
Health %
Gesamtzustand laut Scrutiny
<90% = handeln
Manuelle SMART-Kontrolle sdc/sdd
Da Scrutiny diese Drives nicht erreicht: CrystalDiskInfo auf Windows, Disks direkt anschließen. Alle 4–6 Wochen oder nach Auffälligkeiten.
Besonders beobachten: sdd (Seagate Expansion SW, /mnt/disk3) — hatte beim ersten Check 16.332 CRC-Fehler. Baseline und Verlauf in [[Homelab – Privat]].
Host-Tuning
Einstellung
Wert
ZFS ARC Limit
2 GB (/etc/modprobe.d/zfs.conf)
ZFS Auto-TRIM
on
ZFS Scrub
Monatlich, 1. des Monats, 02:00
Swap
4 GB ZFS zvol, swappiness=10
ZFS ARC auf 2 GB reduziert um RAM für Container freizugeben. Die Boot-SSD ist schnell genug dass der kleinere Cache keinen spürbaren Unterschied macht.
Zentrale Smart-Home-Plattform auf dem Raspberry Pi 4. Läuft als Home Assistant OS. Zurück zum Homelab-Überblick.
Hardware
Eigenschaft
Wert
Gerät
Raspberry Pi 4 (4 GB RAM)
OS
Home Assistant OS
Boot
NVMe SSD (via USB 2 — bewusst kein USB 3 wegen Zigbee-Interferenz)
Zigbee
RaspBee II HAT, angebunden via USB 2 Kabel
BLE
ESP32-S3 Proxy via WLAN
Warum USB 2 für Zigbee
USB 3.0 erzeugt Störstrahlung im 2,4-GHz-Band — genau wo Zigbee funkt. RaspBee II muss über ein USB-2-Kabel angebunden sein. Das gilt auch für die NVMe-SSD. Kostete 2,79€ und löste stundenlange Stabilitätsprobleme.
dtoverlay=miniuart-bt verschiebt Bluetooth auf den Mini-UART und gibt den primären UART für den RaspBee II frei. Falls Zigbee-Probleme auftreten: dtoverlay=disable-bt als Eskalation.
Zigbee (ZHA)
Einstellung
Wert
Integration
ZHA (nicht deCONZ)
Device
/dev/ttyAMA0
Baudrate
38400
Hardware Flow Control
Aktiviert
ESP32-S3 BLE Proxy
Der Pi kann Zigbee und Bluetooth nicht gleichzeitig zuverlässig betreiben. Ein ESP32-S3 übernimmt BLE-Sensordaten (Miflora-Pflanzensensoren) und leitet sie per WLAN an HA weiter.
Eigenschaft
Wert
Framework
ESPHome (ESP-IDF)
Modus
bluetooth_proxy: active: true
iPad Dashboard
An der Wand montiertes iPad mini 5 als zentrale Steuerung. Drei Views: Steuerung, Pflanzen, Analyse.
Scripts
Script
Funktion
Bin da
Ankunft zuhause
Bin weg
Abwesenheit
Gute Nacht
Nacht-Modus
Gaming
Gaming-Beleuchtung
Fernsehen
TV-Beleuchtung
Automationen
Automation
Trigger
Gießerinnerung
Zeitbasiert + Miflora-Sensor
Lüftungserinnerung
Luftfeuchtigkeit/CO2, temperaturabhängige Verzögerung via OpenWeatherMap
Badezimmer-Licht
ZHA IKEA Bilresa
CalDAV-Integration (Nextcloud)
Nextcloud liefert per CalDAV einen Geburtstagskalender für das iPad Dashboard. Details zur Nextcloud-Instanz in Nextcloud.
Schlanke Nextcloud-Instanz als CalDAV/CardDAV-Server. Läuft extern auf Uberspace (Shared Hosting), nicht auf dem Homelab-Stack. Zurück zum Homelab-Überblick.
Warum extern und nicht selbst gehostet
CalDAV-Sync auf iOS-Geräten benötigt einen öffentlich erreichbaren Server — auch unterwegs, ohne VPN. Der Pi 4 und der OptiPlex sind primär für lokale Services ausgelegt. Uberspace bietet das ohne eigene Infrastruktur, ohne Zertifikats-Management und ohne Abhängigkeit vom Heimanschluss.
Solange Nextcloud ausschließlich für Kalender und Kontakte genutzt wird (kein File Sharing, kein Office), ist Shared Hosting die wartungsärmere Lösung.
Infrastruktur
Eigenschaft
Wert
Hosting
Uberspace (Shared Hosting)
PHP
8.3
Datenbank
MySQL
Caching
APCu (reicht für 1–2 User)
SSL
Cloudflare SSL-Modus Full
DNS
Domain bei Namecheap, Custom DNS auf Cloudflare. cloud.<deine-domain> → CNAME → Uberspace-Host (Proxied). SSL-Modus Full — nicht Flexible (unsicher) und nicht Full Strict (Zertifikat-Mismatch mit Uberspace).
Aktive Apps
Nur das absolut Nötigste:
calendar — Kalender-UI und CalDAV-Backend
contacts — Kontakte-UI und CardDAV-Backend
dav — CalDAV/CardDAV Core
bruteforcesettings — Login-Schutz
password_policy — Passwort-Richtlinien
Alles andere (Dashboard, Files Sharing, Activity, Photos, Federation) ist bewusst deaktiviert.
Geburtstagskalender
Nextcloud generiert automatisch „Contact birthdays” aus allen Kontakten mit Geburtstagsdatum. Dieser Kalender wird synchronisiert auf iOS-Geräte und Home Assistant (iPad Dashboard).
Nur Kontakte mit ausgefülltem Geburtstagsdatum erscheinen im Kalender.