Was du brauchst
Vor dem Start: Ubuntu Server ISO herunterladen und einen bootfähigen USB-Stick erstellen. Für den Wyse 5070 reicht USB 2.0, aber USB 3.0 ist deutlich schneller beim Installieren.
# Ubuntu Server 24.04 LTS ISO herunterladen: # https://ubuntu.com/download/server # # Auf USB-Stick schreiben mit: # Rufus (Windows) — https://rufus.ie # balenaEtcher (Mac/Win/Linux) — https://etcher.balena.io # # Modus: ISO Image (nicht DD!) # Partition: GPT (für UEFI-Boot)
Proxmox ist mächtig, aber für einen einzelnen Thin Client mit 8 GB RAM unnötiger Overhead. Ubuntu Server + Docker direkt ist ressourcenschonender, einfacher zu debuggen und für ein Homelab vollkommen ausreichend. Proxmox lohnt sich erst wenn man mehrere VMs parallel betreiben will.
Wyse 5070 BIOS-Einstellungen
Der Dell Wyse 5070 hat ab Werk Einstellungen die Ubuntu-Installation verhindern. Zwei Dinge müssen vor der Installation angepasst werden — sonst bootet der USB-Stick entweder gar nicht oder Ubuntu lässt sich nicht installieren.
F12 für Boot-Menü, dort BIOS Setup wählen.Ohne diese Einstellung bootet der Ubuntu-USB-Stick nicht.
Falls USB nicht erscheint: Legacy Boot aktivieren unter General → Advanced Boot Options → Enable Legacy Option ROMs.
Ubuntu Server 24.04 LTS Setup
Der Ubuntu Server Installer ist textbasiert aber intuitiv. Die wichtigsten Entscheidungen während der Installation:
Nach dem Reboot und USB-Stick entfernen: IP-Adresse am Bildschirm ablesen,
dann von Windows PowerShell aus verbinden:
ssh benutzername@10.0.1.71
Ab jetzt braucht man keinen Monitor mehr am Server.
Netplan konfigurieren
Server brauchen feste IPs — sonst stimmen DNS-Einträge, Docker-Port-Bindings und FortiGate-Reservierungen irgendwann nicht mehr. Ubuntu 24 nutzt Netplan für die Netzwerkkonfiguration.
network: version: 2 ethernets: enp1s0: # Interface-Name — bei dir evtl. anders! addresses: - 10.0.1.71/24 # Gewünschte statische IP routes: - to: default via: 10.0.1.99 # Gateway (FortiGate LAN-IP) nameservers: addresses: [10.0.1.99, 9.9.9.9]
# Syntax prüfen sudo netplan try # Dauerhaft übernehmen sudo netplan apply # Prüfen ip a ping 9.9.9.9
Der Interface-Name ist nicht immer enp1s0 — mit ip a
den tatsächlichen Namen herausfinden. Beim Wyse 5070 ist es meist enp1s0,
beim OptiPlex kann es enp2s0 oder ähnlich sein.
Falscher Interface-Name → nach netplan apply kein Netzwerk mehr.
Docker Engine installieren
# System updaten sudo apt update && sudo apt upgrade -y # Docker via offiziellem Script installieren curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Eigenen User zur docker-Gruppe hinzufügen # (danach ausloggen + neu einloggen nötig!) sudo usermod -aG docker $USER # Testen (nach Re-Login) docker run hello-world
Das offizielle Script installiert Docker Compose v2 als Plugin mit.
Der Befehl lautet docker compose (mit Leerzeichen),
nicht das veraltete docker-compose (mit Bindestrich).
Viele ältere Anleitungen im Internet nutzen noch die alte Syntax.
# Externes Docker-Netzwerk für Nginx-Reverse-Proxy # Muss auf jedem Server einmalig angelegt werden docker network create proxy # Prüfen docker network ls
Portainer CE — Web-UI für Docker
Portainer gibt Docker eine Web-Oberfläche — Container starten, Logs lesen, Stacks deployen, alles ohne CLI. Für den Homelab-Alltag sehr praktisch.
services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always ports: - "9000:9000" volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data volumes: portainer_data: external: true
# Volume vorab anlegen docker volume create portainer_data mkdir -p /opt/portainer cd /opt/portainer # docker-compose.yml anlegen (siehe oben) docker compose up -d # Portainer erreichbar unter: # http://10.0.1.71:9000 (im LAN direkt) # http://<FORTIGATE-WAN>:9000 (via FortiGate VIP aus Mesh-Netz)
Beim ersten Aufruf muss innerhalb von 5 Minuten ein Admin-Passwort gesetzt werden. Danach Get Started → Local wählen um den lokalen Docker-Daemon zu verwalten.
systemd-resolved deaktivieren
Ubuntu 24 nutzt systemd-resolved als lokalen DNS-Stub-Resolver —
der belegt Port 53. Pi-hole will aber auch Port 53. Ergebnis: Pi-hole startet nicht
oder schlägt im Container mit "address already in use" fehl.
Die Lösung ist systemd-resolved zu deaktivieren und durch eine
statische resolv.conf zu ersetzen.
# Prüfen ob Port 53 belegt ist sudo ss -tulpn | grep :53 # systemd-resolved stoppen und deaktivieren sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved # Symlink entfernen und statische resolv.conf erstellen sudo rm /etc/resolv.conf sudo bash -c 'echo "nameserver 1.1.1.1" > /etc/resolv.conf' # DNS testen ping google.com
Sobald Pi-hole läuft, kann resolv.conf auf nameserver 127.0.0.1
umgestellt werden — oder besser noch: DNS über die FortiGate/DHCP an alle Geräte
verteilen und den Server selbst auf Pi-hole zeigen lassen.
USB-Festplatte dauerhaft mounten
# Festplatte und UUID anzeigen lsblk -f # Mountpoint anlegen sudo mkdir -p /mnt/data # /etc/fstab bearbeiten sudo nano /etc/fstab
# NTFS externe HDD — UUID ohne Anführungszeichen! UUID=DEINE-UUID-HIER /mnt/data ntfs-3g uid=1000,gid=1000,dmask=022,fmask=133,big_writes,windows_names,nofail 0 0
Die UUID in /etc/fstab muss ohne Anführungszeichen stehen:
UUID=ABC123 — nicht UUID="ABC123".
Mit Anführungszeichen schlägt ntfs-3g still fehl und die Festplatte
wird nicht gemountet. Kein Fehler beim Booten, einfach kein Mount.
sudo mount -a ls /mnt/data
Container die auf /mnt/data zeigen müssen nach dem Mount gestartet werden.
Startet ein Container beim Boot bevor die externe Platte gemountet ist,
mappt er auf ein leeres Verzeichnis und "sieht" die Daten nicht.
Fix: docker compose down && docker compose up -d nach bestätigtem Mount.
Was schiefgehen kann
systemd-resolved belegt Port 53. Lösung: stoppen, deaktivieren,
statische resolv.conf anlegen. Siehe Abschnitt 07.
ip a vorher prüfen.
Beim Wyse 5070 meist enp1s0. Falls kein Zugriff mehr: Monitor und Tastatur
anschließen, Interface-Name korrigieren, sudo netplan apply erneut.
windows_names ist nötig damit
Windows-Dateinamen korrekt angezeigt werden. Komplette Option in fstab:
uid=1000,gid=1000,dmask=022,fmask=133,big_writes,windows_names,nofail
sudo usermod -aG docker $USER muss man sich ausloggen und neu einloggen
damit die Gruppenänderung wirksam wird. Ein einfaches su - $USER
in der gleichen Session reicht nicht immer.
docker system prune -a -f.
Achtung: löscht alle ungenutzten Images, Container und Netzwerke.
Das proxy-Netzwerk danach neu anlegen: docker network create proxy.