Änderungsstand: 2023-07-29
Der Ordner appdata wurde bei mir mittels Sharerootfs eingebunden. Deshalb kann ich diesen direkt als /appdata/ verwenden. Wer den Ordner appdata auf die ext. Platte legt, muss dann dort den kompletten Pfad zur Festplatte eingeben!
Der Dienst DuckDns sorgt dafür, dass der Server aus dem Internet immer mit dem Domainnamen erreichbar ist. Auch nach einer Trennung des Internets und einer Neuvergabe der Internet-IP-Adresse durch den Router. Aller 5 Minuten wird die IP-Adresse abgecheckt. Es kann also passieren, dass im schlimmsten Fall Euer Server nach einem IP-Reset, 5 Minuten nicht erreichbar ist. Damit kann man leben.
Zuerst wird ein DuckDNS Account benötigt, den man hier registrieren kann. Nach der Registrierung hat man die Möglichkeit, bis zu 5 Domains anzulegen. Mind. eine angelegte Domain und das Token werden später benötigt.
Jetzt 2 Möglichkeiten, DuckDNS einzurichten. Einmal mit einem Docker und einmal über einen Cronjob.
Hierbei nur eine Variante verwenden!
Variante Docker:
Wenn noch nicht geschehen, den Hauptordner für die Compose-Dateien erstellen:
sudo mkdir /home/dockervolumes
Nun folgende Befehle im Terminal eingeben ( Ordner wird erstellt und die *.yml wird dort geöffnet).
sudo mkdir /home/dockervolumes/duckdns
cd /home/dockervolumes/duckdns && sudo nano docker-compose.yml
Folgendes dort einfügen (vorher Eure Werte überprüfen). Der Ordner appdata muss vorher angelegt sein. Der Unterordner portainer wird automatisch angelegt, wenn darauf Schreibrechte bestehen:
version: "2"
services:
duckdns:
image: lscr.io/linuxserver/duckdns:latest
container_name: duckdns
environment:
- PUID=1001
- PGID=1000
- TZ=Europe/Berlin
- SUBDOMAINS=troubadix
- TOKEN=das_erstellte_duckdns_token
- LOG_FILE=true
volumes:
- /appdata/duckdns:/config
restart: unless-stopped
Speichern mit Strg-x, y, Enter
Quelle: https://hub.docker.com/r/linuxserver/duckdns
Anschließend die „yml“ starten mit
cd /home/dockervolumes/duckdns && sudo docker-compose up -d
Das Dockerimage wird heruntergeladen und der Docker mit der eingetragenen Konfiguration gestartet.
Wie testet man, ob alles soweit funktioniert?
Auf der Internetseite https://www.wieistmeineip.de/ kann man schauen, welche IP-Adresse gerade aus dem Internet zugewiesen ist. Diese IP-Adresse MUSS identisch mit der IP-Adresse in den DuckDns-Domains sein. Gibt es da Unterschiede, einfach paar Minuten warten und dann das Browserfenster im DuckDns aktualisieren oder auf „update ip“ klicken. Dann sollte eine Übereinstimmung erfolgen.
Fertig.
Zur Erklärung.
- Zeile 7: Die UID
- Zeile 8: Die Gid
- Zeile 10: Die angelegte Domain
- Zeile 11: Das Token ist auf der Login-DuckDNS-Webpage ersichtlich
- Zeile 14: Das Konfigurationsverzeichnis vom erstellten DuckDNS-Docker
Es erfolgt nach ca. 1 Minute ein Abgleich der IP-Adresse, welche im Benutzermenu von DUCKDNS auch angezeigt wird, wenn man das Browserfenster aktualisiert.
Variante Cronjob:
Login im Terminal als root (Raspi-User setzen hier ein sudo su nach dem Login)
apt install curl -y
cd && mkdir duckdns
cd && cd duckdns && nano duck.sh
Folgendes eintragen. troubadix mit der eigenen Domain und die X mit dem Token ersetzen.
echo url="https://www.duckdns.org/update?domains=troubadix&token=xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx&ip=" | curl -k -o ~/duckdns/duck.log -K -
Strg-x, y, Enter
chmod 700 duck.sh
crontab -e
Gegebenenfalls die 1 drücken, für nano als Editor
Folgendes am Ende der Datei eintragen (# am Ende nicht vergessen):
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1 #
STRG-x, y, Enter
Zum Testen des Scriptes folgendes eingeben:
./duck.sh
Erscheint nach dem folgendem Befehl ein OK, hat es funktioniert. KO bedeutet Fehler!
cat duck.log
Es erfolgt auch umgehend ein Abgleich der IP-Adresse, welche im Benutzermenu von DUCKDNS auch angezeigt wird, wenn man das DuckDNSBrowserfenster aktualisiert oder auf „update ip“ klickt.
Nachzulesen ist das auf der DuckDNS-Website. Dort in der oberen Leiste auf „install“ und „linux cron“ wählen. Unten die Domain eintragen (Dropdownmenu) und die volle Beschreibung wird angezeigt. Dort wäre dann auch der Befehl für die Script-Datei, zum Kopieren, vorhanden.