Diese Anleitung beschreibt die vollständige Einrichtung eines Raspberry Pi 4 mit Docker, Portainer und WG-Easy zur einfachen Verwaltung von WireGuard-VPN-Verbindungen.


0. Raspberry Pi OS auf SD-Karte flashen

Voraussetzungen

  • Raspberry Pi 4 (empfohlen: 4 GB oder 8 GB RAM)
  • microSD-Karte (mind. 16 GB, Class 10)
  • Raspberry Pi Imager: https://www.raspberrypi.com/software

Anleitung

  1. Raspberry Pi Imager starten
  2. Betriebssystem wählen: Raspberry Pi OS Lite (64-bit)
  3. Speicherkarte auswählen
  4. ⚙️ Erweiterte Optionen aktivieren:
    • Hostname z. B. raspi-vpn.local
    • SSH aktivieren und Benutzer/Passwort festlegen
    • WLAN konfigurieren (falls nötig)
  5. Auf "Schreiben" klicken

Nach dem Flashen: SD-Karte einsetzen, Raspberry Pi starten.


1. Raspberry Pi vorbereiten

Nach dem Login via SSH:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git docker.io docker-compose
sudo systemctl enable docker
sudo usermod -aG docker $USER

Dann den Pi neustarten:

sudo reboot

2. Portainer installieren

docker volume create portainer_data

docker run -d \
  --name portainer \
  --restart=always \
  -p 8000:8000 \
  -p 9000:9000 \
  -p 9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Portainer Web-UI erreichbar unter: https://<raspi-ip>:9443


3. WG-Easy installieren

Verzeichnis anlegen:

mkdir -p /docker/wg-easy && cd /docker/wg-easy

Beispiel docker-compose.yml:

version: '3.8'

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:latest
    container_name: wg-easy
    environment:
      - WG_HOST=<DEINE.DOMAIN.ODER.IP>             # z. B. vpn.example.com
      - PASSWORD_HASH=<BCRYPT_HASH>                # erzeugt mit htpasswd (s. u.)
      - WG_DEFAULT_DNS=<DNS_SERVER>                # optional z. B. 192.168.1.1
      - WG_EASY_WEBHOOK_URL=<NTFY_WEBHOOK_URL>     # optional: ntfy-Benachrichtigung
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    volumes:
      - /docker/wg-easy:/etc/wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    restart: unless-stopped

Passwort-Hash erzeugen

sudo apt install apache2-utils
htpasswd -nbBC 10 admin DEINPASSWORT

Nur den Teil ab $2a$... in PASSWORD_HASH einsetzen.


✅ So legst du den WG-Easy-Stack direkt in Portainer an

  1. Öffne deinen Browser und rufe Portainer auf:
    https://<deine-raspi-ip>:9443
    (z. B. https://raspberrypi.local:9443)

  2. Melde dich an.

  3. In der linken Navigation:
    "Stacks" → "Add stack"

  4. Gib einen Namen ein, z. B. wg-easy.

  5. Wähle "Web editor" als Eingabemethode.

  6. Kopiere den Inhalt deiner docker-compose.yml in das Textfeld.

  7. (Optional) .env-Datei verwenden:
    Wenn du Umgebungsvariablen wie WG_HOST, PASSWORD_HASH etc. nicht direkt in der Compose-Datei speichern willst, kannst du alternativ eine .env-Datei hochladen.

  8. Ganz unten: "Deploy the stack" klicken

✅ Jetzt ist dein Stack in Portainer sichtbar und voll bearbeitbar – du kannst ihn dort starten, stoppen oder verändern.

Webinterface erreichbar unter:
http://<raspi-ip>:51821


Nein. Für einfache Setups kannst du alle Werte direkt in der docker-compose.yml eintragen.
Eine .env-Datei ist aber sinnvoll, wenn du:

  • dieselbe Compose-Datei mehrfach verwenden willst
  • sensible Daten auslagern möchtest
  • die Konfiguration übersichtlicher halten willst

Webinterface erreichbar unter:
http://<raspi-ip>:51821


4. Clients hinzufügen

  • Login mit Admin-Passwort
  • Peer hinzufügen
  • QR-Code scannen
  • Verbindung aktivieren

5. Tipps

  • Ports freigeben: UDP 51820 im Router weiterleiten
  • DynDNS: z. B. mit DuckDNS oder Cloudflare
  • Backup: Konfig unter /docker/wg-easy sichern
  • ntfy: https://ntfy.sh für Push-Benachrichtigungen

Quellen

  • https://github.com/wg-easy/wg-easy
  • https://hub.docker.com/r/portainer/portainer-ce
  • https://www.raspberrypi.com/software

Previous Post