Ereignishorizont
Playground

Playground

Beta Version – Nur zum testen!!

Hinweis: Es wurd noch keine Korrektur gelesen, da können also noch einige Satzbau und Rechtschreibfehler drin sein. 😉

Noch ein Hinweis: Das Tutorial ist lang, sehr lang! Aber wenn ihr jeden einzelnen Step akribisch abarbeitet, solltet ihr zum Ziel kommen. Habt Geduld und lasst euch Zeit. Es dauert mehrere Stunden, stellt euch schon mal drauf ein.

Vorab, ein paar Tipps zur Verwendung:

  • Das Tutorial ist für den Raspiblitz V1.8x geschrieben. Es funktioniert aber auch für den Umbrel ab Version 0.5x. Ihr müsst allerdings die Pfade und teilweise auch die Befehle anpassen. Im Anhang habe ich einen Referenzliste erstellt.
  • Überlicherweise wird vor einem Befehl ein $ Zeichen geschrieben. Damit das besser kopieren kann, habe ich hier meistens drauf verzichtet. Allerdings habe ich in der Befehlszeile teileweise Kommentare mit eingebracht. Die sind dann mit der Raute # gekennzeichnet. Alles was dahinter steht braucht nicht mitkopiert werden.
  • Die IP-Adresse eures VPS wird in diesem Dokument mit 64.227.120.232 dagestellt. Tauscht sie mit eurer eigenen aus.
  • Ich empfehle jedem sich an ein Mehrfenster System zu gewöhnen, da man doch viel zwischen den Fenstern wechselt muss um mal was zu kopieren. Am besten zwei Monitore verwenden und/oder das Fenser aufteilen. Bein Windows geht das gut mit der Windows Taste und dann die Pfeile verwenden.
  • Gute Praxis beim Arbeiten mit Virtual Private Server (VPS) ist die Verwendung von Authentifizierungen per SSH-Schlüssel mit Passphrasen. Einfache Logins mit einem Passwort können prinzipell mit Bruth Force geknackt werden. Die Handhabung der SSH-Schlüssel ist aber nicht immer ganz einfach, deswegen verwende ich für dieses Tutorial den Login per Passwort. Wenn ihr nicht geübt seid in der Verwendung mit SSH-Schlüssel, dann lasst es für dieses Tutorial auch lieber sein und verwendet stattdessen ein langes und wildes Passwörter mit vielen Sonderzeichen. Das Passwort dürftet ihr euch nicht merken können und ihr müsst es immer per copy & paste einfügen. Wer aber die Gut Praxis lernen möchte, dem empfehle ich zum Beispiel diese Anleitung.
  • Ich empfehle für diese Tutorial ein digitales Notizbuch, wo ihr eure Bemerkungen und vor allem Passwort ablegen könnt. Ihr braucht den Login, die IP und vor allem die Passwörter immer wieder. Vorzugseise verwendet ihr kein klassischen Dienstleister wie Google oder Apple für euer digitales Notizbuch, sondern einen anderen Anbieter, der komplett Open Source, eure Daten mit starker Kryptographie End-to-End-Verschlüsselung verschlüsselt und damit eure Privatsphäre schützt. Gute Erfahrungen habe ich mit standardnotes.com gemacht. Die kostenlose Version ist auch vollkommen ausreichend.

Hier beispielhaft eine digitale Notiz, wie sie mir sehr geholfen hat:

  • IP-Adresse eures VPS: 64.227.120.232 (Die IP bekommt ihr von eurem VPS Dienst)
  • ssh root@64.227.120.232 (Root Login)
  • root Passwort: s/(lks933#Ä>sSn@fs&7sAY33i (Root Passwort mit viele wilde Zeichen)
  • ssh synonym@64.227.120.232 (Standard User Login)
  • synonym Passwort: 3#Ä=$sKws/(lkP93@fsOp093i (Das meinst genutzt Passwort!)
  • New CA Key Passphrase (ca.key): $sSA9s/(lkK93@fs (Das braucht ihr im Docker)
  • Common Name: myvps (egal was hier steht)
  • Docker ID: 9469d1099554 (Die ID bekommt ihr später)

-> Daraus könnt ihr dann recht komfortabel mit copy & paste arbeiten

2. Einrichten eines VPS

Hier hatte ich noch nicht viel geschrieben, deswegen fasse ich es hier mal kurz und pack nur die notwendigen Bilder mit rein. Ihr braucht natürlich einen Virtual Private Server (VPS). Entweder habt ihr schon einen Anbieter oder ihr schaut euch mal Digital Ocean an. Ich bin da ganz gut mit zufrieden, aber andere gehen natürlich auch.

Wer meinen Referal Link verwendet, der bekommt folgendes Angebot: Everyone you refer gets $200 in credit over 60 days. Da könnt ihr 60 Tage lang ordenlich VPS’en bauen und wieder zerstören. 😁 Und sobald ihr mal $25 bezahlt habt, bekomme ich $25 als Belohnung. 🥰 Once they’ve spent $25 with us, you’ll get $25. Das ist der Deal, win-win für beide, aber ihr könnte auch einen anderen Anbieter verwenden. Wer das möchte, hier mein Referral Link

Bilder sagen mehr als tausend Worte. Ich habe die wichtigen Einstellungen in den Bilder zwar noch nicht markiert, aber man sollte trotzdem erkennen was zu tun ist.

3. Tutorial blanko, Beta Version

3.1 Auf dem VPS – Grundeinstellungen des Virtual Private Server (VPS)

Meldet Euch auf dem VPS mit eurem "root" Nutzer an

ssh root@64.227.120.232

Update und Upgrade durchführen

apt update && apt upgrade -y

-> Wenn ihr mal beim Update gefragt werden, ENTER drücken

UncomplicatedFirewall (UFW) installieren und einrichten

apt install ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 80 comment 'Standard Webserver'
ufw allow 443 comment 'SSL Webserver'
ufw allow 9735 comment 'Node1'
ufw enable   # -> y
ufw status   # -> Kontrollieren ob OpenSSH bzw. 22/tcp drin ist!

Fail2ban (Schützt vor Brute-Force-Angriffe)

apt install fail2ban -y 

Den neuen Benutzer synonym anlegen und root-Rechte vergeben

adduser synonym   # -> sehr gutes Passwort vergeben, 5x ENTER, y
usermod -aG sudo synonym

Hinweis: Ihr könnt den Benutzer natürlich anpassen. Er wird in diesem Tutorial aber sehr oft und auch in Pfaden verwendet. Das Anpassen ist dann aber viel Arbeit und führt ggf. zu Fehlerquellen.

Empfehlung: Jetzt ein Snapshot des VPS machen

systemctl poweroff

-> Snapshot erstellen in DigitalOceans unter: Projects/my-project/droplet/Snapshots -> Wenn der Snapshot erstellt wurde, den Turn on Button des VPS drücken -> Damit für habt ihr eine sehr gute Grundlage für einen späteren Neuanfang

Ab jetzt loggt euch nur noch mit eurem neuen Benutzer ein!

ssh synonym@64.227.120.232

3.2 Auf dem VPS – Docker installieren und einrichten

Docker installieren

sudo apt-get install docker.io tmux -y
sudo systemctl start docker.service
sudo systemctl status docker.service

-> Exit -> STRG+c

Einen Namen für Datenvolumencontainer "ovpn-data" vergeben

export OVPN_DATA="ovpn-data" 

Dauerhaft verfügbar machen

nano .bashrc

-> Ans Ende export OVPN_DATA="ovpn-data" anhängen -> STRG+x -> y -> Enter zum speichern und schließen des Editors

Initialisieren des Container Achtung: IP vorher anpassen!

sudo docker volume create --name $OVPN_DATA 
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://64.227.120.232
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki 

Der Container fordert zur Eingabe einer CA Key Passphrase auf, um den privaten Schlüssel zu schützen, der von der neu generierten Zertifizierungsstelle verwendet wird. Zustätzlich muss noch einen Common Name (z.B. "myvps") vergeben und anschließend zwei mal mit der CA Key Passphrase bestätigt werden.

Hinweis: Der Container enthält die Konfigurationsdateien und Zertifikate. Die Zertifikate haben einen Gültigkeit von 825 Tage.

Starten des OpenVPN-Serverprozess

sudo docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp -p 9735:9735 -p 8080:8080 --cap-add=NET_ADMIN kylemanna/openvpn 

Hinweis: Der Port 8080 ist für die LNbits REST API. Ihr könntet hier z.B. auch den Port 9736 für einen zweiten Node hinzufügen.

Generieren eines Client-Zertifikat ohne Passphrase für node1

sudo docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full node1 nopass

-> Einmal mit der CA Key Passphrase bestätigen

Hinweis: Für einen zweiten Node müsste diese und nachfolgend Zeile nur anpassen und wiederholen werden.

Clientkonfiguration mit eingebetteten Zertifikaten für node1abrufen

sudo docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient node1 > node1.ovpn  

Die Container ID anzeigen lassen

sudo docker ps   # -> zeigt den Status und die ID des Container

Den Container Autostart hinzufügen Achtung: Die Container ID anpassen!

sudo docker update --restart unless-stopped b7a78bb8b394

Ab jetzt wird der Container nach jedem Neustart auch mit gestartet. Es sei denn er wurde vorher gestoppt.

Einmal die Docker Shell aufrufen

sudo docker exec -it b7a78bb8b394 sh

Die Netzwerk Adapter des Docker anzeigen lassen

ifconfig

-> Unter eth0 sollte ihr die IP = 172.17.0.2 sehen, das ist die IP des Anschluss für eure Node

Docker Shell verlassen

exit

Docker Einstellungen einmal kontrollieren

sudo systemctl status docker.service   # -> q

Den Pfad zur node1.ovpn Datei anzeigen lassen

pwd   # -> Zeigt den aktuellen Pfad
ls   # -> Sollte jetzt die Datei node1.ovpn anzeigen

Denn beides braucht ihr gleich.

3.3 Auf dem Node – OpenVPN einrichten

VPNcert Ordner erstellen

cd   # -> Zum Stammverzeichnis springen
pwd   # -> Zeigt den aktuellen Pfad an
mkdir VPNcert   # -> Ein VPNcert Verzeichnis anlegen

Das Zertifikat von dem VPS herunterladen Achtung: IP und ggf. die Pfade anpassen

scp synonym@64.227.120.232:/home/synonym/node1.ovpn /home/admin/VPNcert/

-> Ihr müsst den neuen "Fingerprint" einmal bestätigen und dann euer User Passwort eingeben

Schreib- und Leserechte nur für den Benutzer zuweisen

sudo chmod 600 /home/admin/VPNcert/node1.ovpn

OpenVPN installieren und einrichten Achtung: Auch hier ggf. den Pfad oder Name anpassen

sudo apt-get install openvpn -y
sudo cp -p /home/admin/VPNcert/node1.ovpn /etc/openvpn/CERT.conf
sudo systemctl enable openvpn@CERT
sudo systemctl start openvpn@CERT
sudo systemctl status openvpn@CERT 

-> Achtet auf auf folgende Zeilen:

..
net_iface_up: set tun0 up
net_addr_ptp_v4_add: 192.168.255.6 peer 192.168.255.5 dev tun0
..

-> Die IP = 192.168.255.6 ist die VPN Client IP. Sie kann bei der Verwaltung von mehreren Nodes anders sein. -> Exit mit q

Hife wenn was nicht ganz läuft:

sudo journalctl -u openvpn@CERT -f --since "1 hour ago" 

-> STRG+c

3.4 Auf der VPS – Paketregeln für den Docker festlegen

Docker Shell aufrufen

sudo docker ps   # -> nochmal die ID anzeigen lassen
sudo docker exec -it b7a78bb8b394 sh   # -> Shell starten

Info: Mit dem leicht erweiterten Befehl $ sudo docker ps -a könnt ihr auch nicht gestartet Container und ihren Status sehen.

Im Docker die Paketregeln für die Firewall festlegen Achtung: Denk daran die IP (siehe voriges Kapitel) und die Ports zu prüfen

iptables -A PREROUTING -t nat -i eth0 -p tcp -m tcp --dport 9735 -j DNAT --to 192.168.255.6:9735
iptables -A PREROUTING -t nat -i eth0 -p tcp -m tcp --dport 8080 -j DNAT --to 192.168.255.6:8080
iptables -t nat -A POSTROUTING -d 192.168.255.0/24 -o tun0 -j MASQUERADE

Damit die Packetregeln auch nach dem nächsten Neustart geladen werden, bleiben wir in der Docker Shell und müssen noch die Skript Datei ovpn_env.sh editieren.

cd /etc/openvpn
vi ovpn_env.sh   # -> Editor öffnet

Es wurde jetzt der vi-Editor. Die Bedienung ist etwas ungewöhnlich, aber wenn ihr genau die Schritte befolgt, solltet ihr zum Ziel kommen. Ein Befehlsübersicht findet ihr sonst aber auch hier.

Zur Übung verlasst den Editor mal gleich:

  • ESC -> :q! -> ENTER -> Exit ohne speichern
  • Das :q! müsst ihr wirklich so eingeben

Jetzt öffnet den Editor wieder:

  • vi ovpn_env.sh
  • setzte den Cursor zur letzten Linie -> G (=> großes "G" -> Shift+g)
  • geht in den Editiermodus -> a (kleines "a")
  • eine Zeile umschlagen -> ENTER
  • jetzt die drei "iptabels" Zeile von oben hineinkopieren
  • ESC -> Editiermodus verlassen
  • :wq -> Änderungen speichern und schließen

Wenn ihr fertig seid, verlasst auch die Docker Shell wieder:

exit

3.5 Auf der Node – Die lnd.conf anpassen

Achtung: Die Datei lnd.conf ist das Herzstück eures Lightning Node. Wenn ihr da Fehler macht, könnt ihr euren Node lahm legen. Passt also auf was ihr tut und macht vorher ein Backup. Verlasst den Editor lieber mal mit STRG-x -> n -> ENTER, als das ihr etwas falsches abspeichert.

Backup der LND.conf erstellen

cd /mnt/hdd/lnd/
sudo cp lnd.conf lnd.conf.backup
ls -l   # -> Backup Datum prüfen

LND.conf editieren

sudo nano lnd.conf

-> Folgende Zeile überprüfen und ggf. anpassen:

[Application Options]
..
nat=false   # -> prüfen und auf "false" stellen
listen=0.0.0.0:9735   # -> prüfen
restlisten=0.0.0.0:8080   # -> prüfen
externalip=111.111.111.111:9735
tlsextraip=172.17.0.2
..
[tor]
..
tor.streamisolation=false
tor.skip-proxy-for-clearnet-targets=true

-> Passt auf das ihr keine Doppelbelegung mit wiedersprüchlichen Werten habt -> FunFact: Im Anhang zeige ich euch wie ihr hier den Alias Namen noch etwas "tunen" könntet. 😉 -> STRG+x -> y -> ENTER

Besoderheit: NUR beim Raspiblitz

Das lnd_check.sh Skript überprüft die lnd.conf und könnte eure Einstellungen überschreiben. Deswegen müsste ihr hier ein paar Zeile auskommentieren.

-> Ruft in dem Skript die Zeilen ab 184 auf:

sudo nano +184 /home/admin/config.scripts/lnd.check.sh

-> Kommentiert folgende Zeile mit # aus:

#  # enforce PublicIP if (if not running Tor)
#  if [ "${runBehindTor}" != "on" ]; then
#    setting ${lndConfFile} ${insertLine} "externalip" "${publicIP}:${lndPort}"
#  else
#    # when running Tor a public ip can make startup problems - so remove
#    sed -i '/^externalip=*/d' ${lndConfFile}
#  fi

-> Speichern und schließen mit STRG+x -> y -> ENTER

Hinweis: Etwas weiter oben steht auch # enforce LND port is set correctly. Falls ihr einen anderen Port als 9735 verwendet, diese Zeilen auch deaktivieren oder anpassen.

Den LND einmal neu starten

sudo systemctl stop lnd.service
sudo systemctl start lnd.service

-> Beide Befehle können etwas dauern, habt Geduld

Prüfen ob sich das Zertifikat und der Schlüssel geändert hat

ls -l 

-> Datum und Uhrzeit (GTM) der tls.cert und tls.key Dateien muss sich aktualisiert haben!

Verbindungstest

Testet mal man von euer Node den Google Server erreichen kann:

ip route get 8.8.8.8

-> Ihr sollte 8.8.8.8 via 192.168.255.5 dev tun0 src 192.168.255.6 zurück bekommen

Jetzt nochmal den VPS Docker anpingen:

ping 172.17.0.2

Abbruch mit STRG-c

Wenn alles gut aussieht, dann ist euer Node ab jetzt im Clearnet erreichbar! 🎉

3.6 Überprüfen der Verbindung

Jetzt zeige ich euch wie ihr durch verschiedene Möglichkeiten überprüfen könnt, ob euer Node auch wirklich im Clearnet erreichbar ist.

Beim Raspiblitz ist es ganz einfach, schaut im Status Screen

Unten hinter der Node ID sollte jetzt die IP-Adresse des VPS anstatt der ".onion" angezeigt werden. Keine Sorge, die Onion Routings funktionieren weiterhin. Wenn die VPS mal ausfällt ist euer Node weiterhin über Tor erreichbar. Die Option wird hier einfach nur nicht angezeigt.

LND Informationen anzeigen lassen

lncli getinfo

-> Unter uris: seht ihr jetzt beide Verbindungsöglichkeiten eures Node -> Einmal die Tor Onion und jetzt neue die Clearnet IP Adresse

Überprüfung bei externen Dienste

Durch das Gossip Protocol des Lightning Netzwerk werden eure neuen Verbindungsdaten geteilt. Die Verbreitung der neue Verbindung kann aber ein paar Stunden beanspruchen, je nachdem wie gut euer Node vernetzt ist. Habt also Geduld! Nutzt folgende Dienste und sucht nach eurem Node Alias Namen oder der Node ID.

https://1ml.com/ https://amboss.space/ https://lightningnetwork.plus/ https://lnrouter.app/

Dort solltet ihr als Server Standort z.B. Frankfurt am Main und/oder die IP Adresse eures Virtual Privat Server.

Info: Eine weitere Möglichkeit zum Testen der Verbindung ist die Nutzung des “Telegram Ping Bot”. Dazu habe ich im Anhang etwas angehängt.

3.7. Auf dem Node – LND Zertfikat und Macaroon für LNbits bereitstellen

Das LND Zertifikat zum VPS übertragen

Achtung: Prüft den Pfade, die IP und den Username

scp /mnt/hdd/lnd/tls.cert synonym@64.227.120.232:/home/synonym

-> Den Transfer mit dem Passwort der VPS bestätigen

Als nächste den Admin Macaroon des LND auslesen

Achtung: Das ist euer Admin API Key für das LND Wallet, bitte sehr vertraulich behandeln!

xxd -ps -u -C ~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon

Ihr solltet jetzt eine langen Code sehen, den ihr nachher in die Setup Datei ".env" auf eurerem VPS im LNbits Ordner kopiert. Achtung:, der Macaroon ist der Schlüssel zu eurem LND und damit zu eurem Funds. Passt gut drauf auf!

Tipp1: Kopiert euch den HexString in ein temporäres Notepad Fenster und nehmt vorsichtig die Zeilenumbrüche raus. Wenn ihr das nicht tut, kann das Macaroon von LNbits evtl. falsch interpretiert werden und ihr bekommt keine Verbindung zum LND.

Tipp2: Wenn alles nichts hilft, kopiert den kompletten Macaroon zum VPS und verlinkt ihn in der .env

scp ~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon synonym@64.227.120.232:/home/synonym

3.7 Auf dem VPS – LNbits installieren und einrichten

Prüfen ob die SSL Verbindung zum Node steht:

curl https://172.17.0.2:8080 -v --cacert /home/synonym/tls.cert 

Wenn alles geklappt hat sollte ihr in der Ausgabe folgende Zeilen finden:

 ..
 subjectAltName: host "172.17.0.2" matched cert's IP address!
 ..
 SSL certificate verify ok.
 ..
 Connection #0 to host 172.17.0.2 left intact
 ..

LNbits clonen und Voraussetzungen installieren

cd   # -> Zum Home Verzeichnis wechseln
git clone https://github.com/lnbits/lnbits-legend.git
cd lnbits-legend
sudo apt update   # -> Benutzerpasswort eingeben
sudo apt install software-properties-common  
sudo add-apt-repository ppa:deadsnakes/ppa   # -> ENTER
sudo apt-get -y install python3-distutils 
curl -sSL https://install.python-poetry.org | python3 -

Wichtig: Bei der Installation wird euch der "Poetry Pfad" (z.B. /home/synonym/.local/bin) angezeigt. Und darauf folgend ein ganz Befehl. Das ist der Pfad für die "Poetry Umgebungsvariablen" und den müsst ihr zum bekanntgeben auch eimal in das Terminal Fenster kopieren.

export PATH="/home/synonym/.local/bin:$PATH"

Und jetzt dauerhaft verfügbar machen

Dazu einmal die .bashrc öffnen

nano /home/synonym/.bashrc 

Und ganz am Ende folgende Zeile einfügen

export PATH="/home/synonym/.local/bin:$PATH"

-> STRG+x -> y -> ENTER

Poetry in einer virtuelle Umgebung installieren und starten

poetry env use python3.10 
poetry install --only main   # -> Das kann jetzt etwas dauert 
poetry run python build.py
mkdir ~/lnbits-legend/data  # Das wird der Ordner für die LNbits Datenbank

Hinweis: Ich habe mal einen VPS mit weniger als 0,5 GB Ram ausprobiert. Da wurde die Installation mittendrin abgebrochen worden. Ich empfehle also mindestens 1 GB Ram.

Die LNbits Setup Datei .env erzeugen und bearbeiten

cd ~/lnbits-legend   # -> Das LNbits Verzeichnis aufrufen
ls -la  # -> Zeigt euch alle Dateien an
cp .env.example .env   # -> Die .env aus dem Example erstellen
nano .env   # -> Datei zum editieren öffnen

-> Vorzunehmende Einstellungen in der .env Datei:

..
# Change theme
LNBITS_SITE_TITLE="LNbits🐣"   # Optional: Icon siehe Anhang "Alias"
..
# Choose from LN..
LNBITS_BACKEND_WALLET_CLASS=LndRestWallet
..
# LndRestWallet
LND_REST_ENDPOINT=https://172.17.0.2:8080/
LND_REST_CERT=/home/synonym/tls.cert
LND_REST_MACAROON=0201036C6E6...
..

-> Hier müsst ihr wirklich sehr vorsichtig sein, kontrolliert besser alles zwei mal! -> STRG+x -> y -> ENTER

Hinweis: Alternativ zum Macaroon HexString könnt ihr auch eine Verknüpfung zum admin.macaroon setzten, wenn ihr ihn den, wie im vorherigen Kapitel beschrieben, von der Node zum VPS kopiert habt.

LND_REST_MACAROON=/home/synonym/admin.macaroon

Tipp: Die Ausrufezeichchen "" hinter den Einträgen LND_REST_CERT= und LND_REST_MACAROON= sind zwar in der .env.example drin, aber die haben bei mir immer Ärger gemacht. Lasst sie also besser weg.

Ein Testlauf durchführen

cd /home/synonym/lnbits-legend
poetry run lnbits   # -> Exit -> STRG-c

Wenn euch Backend LndRestWallet connected und eure Wallet Balance angezeigt wird, glückwunsch, habt ihr gewonnen! 🔥 Falls Ihr Retrying connection to backend in 5 seconds... seht, stimm irgendetwas mit der Verbindung zu eurem LND Wallet nicht. Prüft die .env Konfigurationsdatei und speziell die LND_REST_MACAROON, LND_REST_CERT und den LND_REST_ENDPOINT.

Tipp: Wenn ihr meint das alles stimmt und es trotzdem nicht geht und ihr den "Macaroon HexString" verwendet, dann probiert mal wie oben beschrieben das "admin.macaroon" direkt, in dem ihr in der .env nur ein Link auf die Datei setzt. Ich hatte beim Umbrel mal so ein Phänomen. Der "Macaroon HexString" wollte partout nicht funktionieren. Erst als ich den Macaroon direkt verwendet hatte, ging es dann plötzlich.

Optional: Den LNbis Webserver prüfen

Wollt ihr Eure LNbits Webserver schon einmal sehen, müsst ihr jetzt erstmal den Port 9000 temporär freigeben.

sudo ufw allow 9000

Jetzt könnt ihr LNbits eure Standard-Route 0.0.0.0 auf Port 9000 zuweisen:

poetry run lnbits --port 9000 --host 0.0.0.0

Tipp: Der Befehl funktioniert nur aus dem LNbits Verzeichnis lnbits-legend

Und jetzt öffnet einem Webbrowser und gebt die IP eurer VPS mit dem Port 9000 ein:

64.227.120.232:9000

-> Et volia, euer LNbits! 👀

Die Anfrage IP:Port wurde auf die Standard-Route 0.0.0.0 des VPS verwiesen. Dort lag die Webseite der LNbits Instanz. Euer Browser hat euch sicherlich gewarnt, dass die Seite nicht sicher sei. Das ist aber normal, da die Seite kein gültiges SSL/TLS-Zertifikat hat. Der Punkt kommt später beim Webserver, nachdem wir eine Domain eingerichtet haben und die dann auf durch einen Domain-Namen-System (DNS) Eintrag auf die IP-Adresse unserer VPS zeigt. Dann können wir für die Verbindung ein Zertifikat für HTTPS (Hyper Text Transfer Protocol Secure) beantragen.

-> Beendet LNbits wieder mit STRG+c

Schließt den temporären Port 9000 wieder und prüft die Einstellung der UFW einmal

sudo ufw deny 9000
sudo ufw status

3.8 Auf der VPS – LNbits Autostart einrichten

Vorab müsst ihr den "Poetry Pfad" prüfen

which poetry

-> Wenn ihr den gleichen User verwendet habt: /home/synonym/.local/bin/poetry -> Kontrolliert nachfolgend in der lnbits.service Datei, dass der Pfad passt

Jetzt die lnbits.service Datei erstellen und öffnen

sudo nano /etc/systemd/system/lnbits.service

Die lnbits.service befüllen mit:

# Systemd unit for lnbits
# /etc/systemd/system/lnbits.service 

[Unit]
Description=LNbits

[Service]
# replace with the absolute path of your lnbits installation
WorkingDirectory=/home/synonym/lnbits-legend
ExecStart=/home/synonym/.local/bin/poetry run lnbits --port 5000
User=synonym
Restart=always
TimeoutSec=120
RestartSec=30
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

-> Kontrolliert den Poetry Pfad (ExecStart), User und WorkingDirectory -> Dann STRG+x -> y -> ENTER

Service starten und prüfen

sudo systemctl enable lnbits.service
sudo systemctl start lnbits.service
sudo systemctl status lnbits.service  # -> q

-> Ihr solltet ein active (running) und ein Backend LndRestWallet connected als Rückmeldung bekommen

3.9 Eine Domain für euren LNbits Server

Glückwunsch, dass ihr es bis hier hin geschafft habt, das ist schon mal eine nicht zu verachtende Leistung. Einen eigenen Virtual Privat Server einzurichten, euer Node per VPN Tunnel ins Clearnet zu bringt und und dann noch einen eigenen LNbits Server per VPN Tunnel mit euren Lightning Node als Funding Source zu verbinden. Respekt! 🤜🤛 Aber wir werden ja nicht müde, jetzt kommt gleich die nächste neue Welt, die Welt des Webhostings, der Domains, Zertifikate und die der Webserver.

Wer schon eine eigene Webdomain hat, der kann sich z.B. eine Subdomain anlegen und unter DNS / Nameservers einen DNS Eintrag Typ A auf die IP-Adresse seines VPS erstellen. Damit werden alle Anfragen an die Subdomain direkt auf den LNbits Server weitergeleitet.

Wer noch keine eigenen Domain hat, der kann eine kostenlosen Domain von z.B. DuckDNS.org bekommen. Das einrichten ist nicht schwer:

  • Geht dazu auf die Seite duckdns.org
  • Registriert euch mit einer der vielen Möglichkeiten
  • Wählt eine subdomain.duckdsn.org
  • Stellt die IP-Adresse eurer VPS für die Weiterleitung ein

3.10 Caddy Webserver enrichten (auf dem VPS)

Caddy ist ein Open-Source-Webserver mit automatischer HTTPS Zertifizierung und beamt das Web Interface deiner LNbits Instanz ins Clearnet. Es kümmert sich wirklich sehr effizient um alles, auch um die Zertifikate und Aktualisierung. Man muss nur den DNS Eintrag der (Sub)Domain auf die IP-Adresse der VPS richtet, den Rest übernimmt Caddy.

Vorab: DNS Eintrag prüfen

Prüft vorher lieber mal ob der DNS Eintrag auch funktioniert und die Webdomain direkt zur IP-Adresse eures VPS weiterleitet wird. Mit DNS Lookup oder whatsmydns.net.

Caddy installieren

cd ~
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Den Caddyfile anlegen

sudo caddy stop
sudo nano /etc/caddy/Caddyfile

Hinweis: Die Datei ist mit default Werte gefüllt, die könnt ihr komplett löschen

Das File füllen mit angepasster Domainadresse

lnbits.ereignishorizont.xyz {
  handle /api/v1/payments/sse* {
    reverse_proxy 0.0.0.0:5000 {
      header_up X-Forwarded-Host lnbits.ereignishorizont.xyz
      transport http {
         keepalive off
         compression off
      }
    }
  }
  reverse_proxy 0.0.0.0:5000 {
    header_up X-Forwarded-Host lnbits.ereignishorizont.xyz
  }
}

-> STRG+x -> y -> ENTER

Caddy Autostart Service hinzufügen

Damit der Caddy Service nach dem nächsten Neustart der VPS auch wieder startet

Datei caddy.service anlegen:

sudo nano /etc/systemd/system/caddy.service

Die befülle mit:

# caddy.service

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateDevices=yes
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

-> Danach: STRG+x -> y -> ENTER

Service freigeben, starten und prüfen

sudo systemctl enable caddy.service
sudo systemctl start caddy.service
sudo systemctl status caddy.service  # -> q

Weiter Infos zum Caddy.Service: https://github.com/caddyserver/dist/blob/master/init/caddy.service

F e r t i g !!! 😄

Jetzt sollte euer LNbits Server unter eurer Webdomain erreichbar sein und funktionieren. 🚀

Jetzt müsste euer LNbits Webserver laufen und selbst die Aktualisierung des Zertifikats geschieht voll automatisch. Wer sich schon mal mit den Alternativen herumgeschlagen hat, der weiß was er an Caddy hat. 😊 Falls es noch nicht geklappt hat, eine ausführliche Hilfe zur Fehlersuche findet ihr im Anhang.

Anhang: Tipps zur Fehlersuche

  • [ ] Prüft das Zertifikat eure Domain: https://www.ssllabs.com/ssltest/

  • [ ] Falls am Zertifikat etwas faul ist, überprüft nochmal euer Caddyfile und ob die Weiterleitung eures DNS Eintrag funktioniert: whatsmydns.net

  • [ ] Wenn ihr beim Start von LNbits im Terminalfenster die Meldung Retrying connection to backend in 5 seconds... bekommt, dann stimmt vermutlich etwas in der .env Datei nicht. Prüft den Macaroon, das Cert und den Endpoint.

  • [ ] Wenn ihr die Meldung HTTP ERROR 502 bekommt, dann wird vermutlich eure LNbits Instanz nicht gestartet. Das könnt ihr prüfen in dem Ihr den Status des lnbits.service abfragt: $ sudo systemctl status lnbits.service. Es kann aber auch ewtas mit eurer LNbits .env Konfigurationsdatei nicht stimmen. Prüft dort LND_REST_MACAROON, LND_REST_CERT und LND_REST_ENDPOINT.

  • [ ] Der Aufruf mit der Subdomain www. funktioniert so nicht. Dafür müsste man noch etwas extra Arbeit reinstecken. Gebt eure Webadresse also immer ohne das www davor ein.

  • [ ] Die Meldung ERR_CONNECTION_REFUSED kommt wenn euer Caddy Server ausgefallen ist. Überprüft ob der Service gestartet ist: $ sudo systemctl status caddy.service

  • [ ] Wenn ihr die LNbits Seite seht, aber die Fehlermeldung All connection attempts failed 500 bekommt, dann scheint euer Docker für den Tunnel zur Node ausgefallen zu sein. -> Prüft ob die Docker Application active (running) ist: $ sudo systemctl status docker -> Pürft ob euer Docker Container auch aktiv ist: $ sudo docker ps -a -> Falls ihr STATUS / Exited seht, dann scheint der Container ausgefallen zu sein. Startet ihn wieder neu: $ sudo docker start < Docker ID > -> Falls nicht schon geschehen, fügt den Autostart Service hinzugefügt: $ sudo docker update --restart unless-stopped < Docker ID >

  • [ ] Seht ihr auf der LNbits Seite die Meldung 500, dann scheint die Verbindung zu eurem Node unterbrochen. Entweder ist die Internet Verbindung unterbrochen oder etwas stimmt auf der Node nicht.

  • [ ] Solltet ihr beim Aufrufen der Seite die Meldung ERR_FAILED bekommen, dann ist vermutlich euer VPS Droplet down.