<metaname="description"content="Schritt-für-Schritt-Anleitung für die Bereitstellung von wireguard_webadmin mit Docker Compose, Caddy und automatischem HTTPS.">
<metaproperty="og:description"content="Schritt-für-Schritt-Anleitung für die Bereitstellung von wireguard_webadmin mit Docker Compose, Caddy und automatischem HTTPS.">
<metaname="twitter:description"content="Schritt-für-Schritt-Anleitung für die Bereitstellung von wireguard_webadmin mit Docker Compose, Caddy und automatischem HTTPS.">
<pclass="section-sub"style="margin-top:1rem">Von null zu einem funktionierenden WireGuard-VPN-Admin-Panel in weniger als fünf Minuten.</p>
</div>
</section>
<divclass="page-content">
<divclass="container">
<h2id="voraussetzungen">Voraussetzungen</h2>
<ul>
<li>Ein Linux-Server, der von dem Ort aus erreichbar ist, von dem Sie ihn verwalten</li>
<li><ahref="https://docs.docker.com/engine/install/">Docker</a> und <ahref="https://docs.docker.com/compose/install/">Docker Compose</a> installiert</li>
<li>Ein Domainname, der auf die IP Ihres Servers zeigt</li>
<li>Die Ports <strong>80</strong> und <strong>443</strong> offen für Caddy sowie der WireGuard-UDP-Port offen (standardmäßig <strong>51820</strong>)</li>
</ul>
<divclass="callout">
<p><strong>Caddy benötigt einen gültigen DNS-Namen</strong>, intern oder öffentlich, der auf Ihren Server zeigt, damit SSL-Zertifikate automatisch bezogen und erneuert werden können.</p>
<p>Alle verfügbaren Variablen finden Sie weiter unten in der <ahref="#env-reference">.env-Referenz</a>.</p>
</div>
<divclass="tab-panel"id="dep-step-4">
<pre><code>docker compose up -d</code></pre>
<p>Rufen Sie das Panel unter <code>https://vpn.example.com</code> auf. Caddy bezieht und erneuert SSL-Zertifikate automatisch.</p>
</div>
</div>
</div>
<hr>
<h2id="env-reference">.env-Referenz</h2>
<tableclass="env-table">
<thead>
<tr>
<th>Variable</th>
<th>Erforderlich</th>
<th>Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td>SERVER_ADDRESS</td>
<td>Ja</td>
<td>DNS-Name oder IP Ihres Servers. Muss genau dem entsprechen, was Sie im Browser eingeben, sonst kommt es zu CSRF-Fehlern.</td>
</tr>
<tr>
<td>DEBUG_MODE</td>
<td>Nein</td>
<td>Setzen Sie den Wert auf <code>True</code>, um den Django-Debug-Modus zu aktivieren. Niemals in Produktion verwenden. Standard: <code>False</code>.</td>
</tr>
<tr>
<td>TIMEZONE</td>
<td>Nein</td>
<td>Zeitzone der Anwendung. Verwenden Sie einen Wert aus der <ahref="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"target="_blank"rel="noopener">tz-Datenbank</a>. Standard: <code>America/Sao_Paulo</code>.</td>
</tr>
<tr>
<td>EXTRA_ALLOWED_HOSTS</td>
<td>Nein</td>
<td>Zusätzliche Hostnamen, die Django akzeptieren soll, kommagetrennt. <code>SERVER_ADDRESS</code> ist immer enthalten. Beispiel: <code>app1.example.com,app2.example.com:8443</code>.</td>
</tr>
<tr>
<td>WIREGUARD_STATUS_CACHE_ENABLED</td>
<td>Nein</td>
<td>Zwischenspeichert den WireGuard-Status, um Aufrufe von <code>wg</code> zu reduzieren. Standard: <code>True</code>.</td>
</tr>
<tr>
<td>WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL</td>
<td>Nein</td>
<td>Wie oft der Cache aktualisiert wird, in Sekunden. Erlaubte Werte: <code>30</code>, <code>60</code>, <code>150</code>, <code>300</code>. Standard: <code>60</code>.</td>
<td>Wie viele zwischengespeicherte Snapshots beim Laden der Seite vorgeladen werden sollen (0-9). Höhere Werte befüllen Traffic-Diagramme sofort. Niedriger setzen, wenn die Peer-Liste langsam wirkt. Standard: <code>9</code>.</td>
</tr>
<tr>
<td>DISABLE_AUTO_APPLY</td>
<td>Nein</td>
<td>Deaktiviert die automatische Anwendung von WireGuard- und DNS-Konfigurationsänderungen. Standardmäßig werden Peer- und DNS-Änderungen sofort übernommen. Setzen Sie den Wert auf <code>true</code>, um Änderungen manuell anzuwenden. Standard: <code>false</code>.</td>
</tr>
<tr>
<td>WIREGUARD_MTU</td>
<td>Nein</td>
<td>Benutzerdefinierter MTU-Wert für WireGuard-Schnittstellen (Server und Clients). Nur ändern, wenn Sie wissen, was Sie tun. Muss eine ganze Zahl zwischen <code>1280</code> und <code>9000</code> sein. Nach einer Änderung alle Client-Konfigurationsdateien neu exportieren und verteilen — ein abweichender MTU zwischen Server und Clients kann zu Verbindungsproblemen führen. Standard: <code>1420</code>.</td>
</tr>
<tr>
<td>VPN_CLIENTS_CAN_ACCESS_DJANGO</td>
<td>Nein</td>
<td>Erlaubt VPN-Clients den direkten Zugriff auf die Weboberfläche über die interne Schnittstelle unter <code>http://ip_oder_hostname:8000</code>. Wenn aktiviert, muss die interne Adresse einschließlich Port <code>:8000</code> zu <code>EXTRA_ALLOWED_HOSTS</code> hinzugefügt werden, sonst blockiert Django die Anfrage. Standard: <code>False</code>.</td>
</tr>
</tbody>
</table>
<hr>
<h2id="upgrade">Upgrade</h2>
<divclass="callout green">
<p><strong>Die Daten werden in Docker-Volumes gespeichert.</strong> Ein Upgrade wirkt sich nicht auf Ihre Peers, Firewall-Regeln, DNS-Einträge oder andere Konfigurationen aus.</p>
<li>Prüfen Sie, ob alle Container laufen: <code>docker compose ps</code></li>
<li>Suchen Sie nach Fehlern: <code>docker compose logs wireguard_webadmin</code></li>
<li>Vergewissern Sie sich, dass <code>SERVER_ADDRESS</code> in <code>.env</code> exakt dem entspricht, was Sie im Browser eingeben</li>
</ul>
<h3id="csrf-fehler-beim-login">CSRF-Fehler beim Login</h3>
<p><code>SERVER_ADDRESS</code> ist falsch konfiguriert. Er muss genau dem Hostnamen entsprechen, inklusive Port bei nicht standardmäßigen Ports, unter dem das Panel aufgerufen wird. Aktualisieren Sie <code>.env</code> und starten Sie mit <code>docker compose up -d</code> neu.</p>
<h3id="wireguard-peers-können-keine-verbindung-herstellen">WireGuard-Peers können keine Verbindung herstellen</h3>
<ul>
<li>Vergewissern Sie sich, dass der WireGuard-UDP-Port auf der Host-Firewall offen ist. Standardmäßig ist das <strong>51820</strong>, aber bei mehreren Instanzen benötigt jede ihren eigenen Port.</li>
<li>Stellen Sie sicher, dass der in <code>docker-compose.yml</code> deklarierte UDP-Portbereich mit der Konfiguration jeder WireGuard-Instanz im Panel übereinstimmt. Bei einer Abweichung veröffentlicht der Container nicht den richtigen Port auf dem Host.</li>
<li>Prüfen Sie, ob IP-Forwarding auf dem Host aktiviert ist: <code>sysctl net.ipv4.ip_forward</code></li>
</ul>
<hr>
<h2id="laufende-dienste">Laufende Dienste</h2>
<tableclass="env-table">
<thead>
<tr><th>Dienst</th><th>Rolle</th></tr>
</thead>
<tbody>
<tr><td>wireguard-webadmin</td><td>Django-Anwendung — Weboberfläche und API</td></tr>
<tr><td>caddy</td><td>Reverse Proxy und automatisches TLS</td></tr>
<tr><td>auth-gateway</td><td>Zero-Trust-Autorisierungsschicht — erzwingt Identitätsprüfungen, bevor an den Upstream weitergeleitet wird</td></tr>