# Raspberry Pi 4: Docker, Portainer & WG-Easy
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.
---
http://<raspi-ip>:51821
---
### ✅ 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 synology.me, 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