Pangolin
Pangolin ist eine OpenSource-Alternative zu Cloudflare, die man selbst hosten kann. Voraussetzung ist ein (virtueller) Server und eine frei erreichbare Domain. Für den Server reicht eine minimale Ausstattung von 1 CPU, 1 GB RAM und 8 GB Massenspeicher. Die kleinsten VPS der gängigsten Hoster sind also völlig ausreichend. Man benötigt aber eine echte Domain und keine Subdomain oder DYNDNS-Adresse.
Installation
Voraussetzung ist ein Linux-Server, der ordnungsgemäß installiert und aktualisiert wurde. Hierauf kann man nun das Installer-Script herunterladen und ausführbar machen:
wget -O installer "https://github.com/fosrl/pangolin/releases/latest/download/installer_linux_amd64"
sudo ./installer
Base Domain Name: Domain-Name des Servers
Dashboard Domain Name: Name, unter dem der Dienst installiert werden soll; das kann auch die vorgenannte Root-Domain sein.
Let's Encrypt Email: Email-Adresse für die Zertifikatsverwaltung
Dann muss man ein Admin-Email-Postfach angeben. Damit loggt man sich später auch ein. Für das Admin-Passwort gelten folgende Vorgaben:
- mindestens 8 Zeichen
- mindestens ein Großbuchstabe
- Mindestens ein Kleinbuchstabe
- Mindestens eine Ziffer
- und mindestens ein Sonderzeichen (mit dem Dollarzeichen hatte ich hier Probleme, also weglassen)
Im Anschluss daran kann man, wenn man will, Email-Credentials eingeben, damit der Server Emails versenden kann. Muss man aber nicht. Wenn alles stimmt, dann installiert der Installer Docker auf dem Server (falls noch nicht vorhanden) und startet die benötigten Container. Danach kann man sich unter https://pangolin.[domain] einloggen, falls man keinen anderen Dashboard Namen vorgegeben hat.
Setup
Organisation erstellen
Eine Organisation ist quasi ein Pool von Sites. Die erste Organisation muss bei erster Konfiguration erstellt werden. Weitere können später eingerichtet werden. Organisationen haben Sites.
Sites erstellen
Sites werden benötigt, um eine Verbindung mit einer Ressource herzustellen. Ein System in dem Netzwerk, in dem man Dienste über Pangolin veröffentlichen möchte, muss quasi als Einfallstor dienen. Zwischen dem Sitesystem und dem Pangolin-Server wird dann ein Tunnel aufgebaut.
Wenn man den Button "+ Add Site" anklickt, dann erscheint ein Dialog, bei dem zunächst die Methode "newt" vorausgewählt ist. In diesem Dialog werden die Codes für die Einrichtung des Newt-Dienstes auf dem Zielsystem einmalig eingeblendet. Später kommt man da nicht mehr dran! Diese Codezeile muss man sich also gut sichern. Darauf wird man mit hinreichender Deutlichkeit hingewiesen. Man kann den Dialog nur bestätigen, wenn man das Häkchen gesetzt hat, mit dem man Stein und Bein schwört, dass man den Code kopiert hat.
Tunnel verbinden
Newt
Wenn man den Tunnel mit Newt erstellen möchte, dann lädt man zunächst Newt auf das Einfallstor
wget -O newt "https://github.com/fosrl/newt/releases/latest/download/newt_linux_amd64"
Nach dem Download führt man Newt dann mit dem Code, den man sich vorher beim Erstellen der Site (hoffentlich) kopiert hat, aus z.B.:
newt --id 4sb044711v8jl5j41tu --secret 47110zt0zwc5j752f8m5615i7ddmv5raur3i8qlgpxcwgbuixe02 --endpoint https://pangolin.meinedomain.de
Wireguard
Wenn man statt Newt Wireguard verwenden möchte, dann erhält man bei Einrichtung der Site den Inhalt einer Config-Datei für Wireguard angezeigt. Man installiert also zunächst Wireguard auf dem System, erstellt eine Config-Datei mit z.B. dem Namen "wg0.conf" in /etc/wireguard/ und startet den Tunnel mit
sudo wg-quick up wg0
Ressourcen einrichten
Jetzt endlich kann man die lokalen Systeme per Pangolin der bösen, kalten Welt aussetzen. Man klickt unter dem Reiter Ressources auf den Button "+Add Resource". Der nachfolgende Dialog ist eigentlich selbsterklärend. Man denkt sich einen Namen für die Ressource aus, eine Subdomain, unter der sie erreichbar sein soll (z.B. jellyfin.meinedomain.de) und wählt aus, welcher Site diese Ressource angehören soll. Dann wird man auf die Seite "Ressources/Connectivity" gelenkt, wo man eingeben kann, ob die Seite per https erreichbar sein soll (ja bitte). Unter Target Configuration kann man nun die Parameter angeben, unter denen die Ressource intern erreichbar ist. Hier kann man ruhig eine Ressource freigeben, die nicht verschlüsselt ist. Die Verschlüsselung übernimmt der Reverse-Proxy Traefik freundlicherweise für uns.
Wenn ich also z.B. als Resource "nextcloud.meinedomain.de" eingegeben habe und bei Target Configuration eingebe:
- enable SSH
- Method: http
- IP/Hostname: lokale IP-Adresse meines Nextcloudservers
- Port 80
Dann ist später die Nextcloud unter "https://nextloud.meinedomain.de" erreichbar
Update
Das Erstinstallationsscript erstellt eine Datei "docker-compose.yml" in der die Version von Pangolin hart vorgegeben ist. Diese Datei bearbeitet man (mit Rootrechten) und ändert die Versionsnummer, also z.B.
pangolin:1.0.0.-beta.7
in latest also
pangolin:latest
ab. Wenn man den Container nun stoppt, aktualisiert und neustartet, dann hat man die aktuelle Version. Dazu setzt man in dem Verzeichnis, in dem sich die Datei docker-compose.yml befindet folgende Kommandos ab:
sudo docker-compose down
sudo docker-compose pull
sudo docker-compose up -d