Docker installieren#
System aktualisieren#
apt update && apt upgrade -y && apt install ca-certificates curl -yDocker-Paketquelle einrichten#
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.listDocker und Docker Compose installieren#
apt update && apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -yDockge installieren#
Dockge einrichten#
Dockge ist eine Weboberfläche, mit der du Docker-Compose-Stacks bequem im Browser verwaltest. Dieser Befehl legt die Verzeichnisse an und startet Dockge:
mkdir -p /opt/stacks /opt/dockge && cd /opt/dockge && curl -fsSL https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml -o compose.yaml && docker compose up -dDockge öffnen#
Öffne Dockge im Browser und lege direkt dein Admin-Konto an:
http://IP-deines-Servers:5001WireGuard einrichten#
Stack anlegen#
Klicke in Dockge auf + Compose und gib unter „Allgemein“ den Stack-Namen wireguard ein.
compose.yaml einfügen#
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard
restart: unless-stopped
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- ./config:/config
ports:
- 51820:51820/udp
- 127.0.0.1:5000:5000
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1
wireguard-ui:
image: ngoduykhanh/wireguard-ui:latest
container_name: wireguard-ui
restart: unless-stopped
depends_on:
- wireguard
cap_add:
- NET_ADMIN
network_mode: service:wireguard
environment:
- SESSION_SECRET=${SESSION_SECRET}
- WGUI_USERNAME=${WGUI_USERNAME}
- WGUI_PASSWORD=${WGUI_PASSWORD}
- WGUI_MANAGE_START=true
- WGUI_MANAGE_RESTART=true
volumes:
- ./db:/app/db
- ./config/wg_confs:/etc/wireguard
logging:
driver: json-file
options:
max-size: 50mDie Weboberfläche auf Port 5000 ist dabei nur auf dem Server selbst erreichbar und nicht aus dem Internet. Wie du trotzdem darauf zugreifst, steht weiter unten.
Umgebungsvariablen in der .env festlegen#
Trag unten rechts im Feld für die .env diese Werte ein:
WGUI_USERNAME=dein-benutzername
WGUI_PASSWORD=dein-sicheres-passwort
SESSION_SECRET=hier-ein-langer-zufallswertEinen sicheren Zufallswert erzeugst du so:
openssl rand -hex 32Stack starten#
Klicke auf Speichern und dann auf Deploy.
WireGuard UI öffnen#
Per SSH-Tunnel verbinden#
Weil die Weboberfläche nicht öffentlich erreichbar ist, baust du von deinem Rechner aus einen SSH-Tunnel auf:
ssh -L 5000:localhost:5000 root@IP-deines-ServersSolange diese Verbindung offen ist, erreichst du WireGuard UI in deinem Browser unter:
http://localhost:5000Server-Einstellungen anpassen#
Unter Global Settings trägst du bei Endpoint Address die öffentliche IP-Adresse oder Domain deines Servers ein.
Damit deine Clients über das VPN auch ins Internet und in dein Netz kommen, trägst du unter WireGuard Server bei Post Up und Post Down diese Regeln ein:
Post Up: iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
Post Down: iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADESpeichere die Einstellungen und klicke oben auf Apply Config.
Ersten Client anlegen#
Klicke auf New Client, gib einen Namen ein, zum Beispiel „Handy“, und speichere. Danach klickst du wieder auf Apply Config.
Über den QR-Code beim Client richtest du die WireGuard-App auf dem Handy in Sekunden ein. Für den Laptop lädst du die Konfigurationsdatei herunter und importierst sie in die WireGuard-App.

