Installation des Proxy-Server mit Docker

Wichtig zu beachten sind die beiden Punkte Portweiterleitung und DynDNS in der Anleitung. Um den Proxy mit Docker laufen zu lassen, muss erst einmal Docker installiert werden. Dazu müssen einige Pakete installiert werden.

Installation Docker

Es müssen zwei Pakete installiert werden:

  • docker
  • docker-compose Es kann sein, dass noch andere Pakete nachinstalliert werden müssen. Hier die Befehle für die Installation auf einem Debian/Ubuntu-System:
    sudo apt install docker
    sudo apt install docker-compose

    Achtung: Diese Befehle können auf anderen Distributionen anders lauten!

Installation vom Proxy

Die Installation besteht folgenden Schritten:

  1. Download & entpacken
  2. Ausfüllen von ein oder zwei Konfigurationsdateie
  3. Starten der Installation

Download

Der Einfachste weg ist folgender: Auf dem Server mit einer Konsole Anmelden und einfach in der Root des Homeverzeichnisses den Download machen. Es wird durch das entpacken ein Ordner angelegt in dem sich alles befindet. Wenn man direkt auf dem Server ist, dann kann mit dem folgenden Befehl alles benötigte heruntergeladen werden:

wget -O docker.tar.gz "https://springcontrol.ydns.eu/dateien/docker.tar.gz"

Hier der Download zum Docker-Proxy, wenn man den Download über den Browser machen möchte: Download In dem Download befinden sich diverse Scripte, die benötigt werden.

Das Entpacken

Mit

tar -xzvf docker.tar.gz

wird die Datei entpackt. Nun mit

cd docker

in den Ordner gehen.

Die Dateien

Das ist nur für die Leute, die interessiert, was da alles entpackt wurde. Für die Installation ist es unerheblich, da bei der Installation auf die wichtigen Dateien noch eingegangen wird.

Die Ordner backend, certbot, nginx, proxy_api, proxy_dacia beinhalten Daten für die Docker-Container.

Der Ordner shared_data enthält die Datenbank.

Die beiden Dateien .env und dns_updater.conf sind Konfigurationsdateien. Auf diese wird unten weiter eingegangen.

Die Befehle:

  • check-compose-version.sh Testet, ob die Version größer als 2 ist
  • check-cpu.sh Testet, ob die CPU 64-Bit ist
  • check-docker-group.sh Testet, ob die Gruppe docker angelegt ist und ob der aktuell angemeldete User in der Gruppe ist. Wenn nicht, dann wird das korrigiert
  • dnstest.sh Testet die Auflösung der Domain. Es wird unten weiter darauf eingegangen
  • dns_updater.sh Wenn die dns_updater.conf ausgefüllt wurde, dann prüft das Programm, ob die Zuordnung zwischen Domain und IP-Adresse noch stimmt. Es wird unten näher darauf eingegangen
  • download-proxy.sh Lädt die aktuelle Version vom Proxy runter. Eignet sich nicht für Updates. Wird bei der Installation aufgerufen, wenn es ausgeführt werden soll
  • update-proxy.sh Macht ein Update der Proxy-Dateien. Beendet den Proxy, lädt die aktuellen Dateien runter und ersetzt die vorhandenen. Startet danach den Proxy wieder
  • get_compose_cmd.sh Es gibt zwei verschiedene Versionen: docker-compose und docker compose. Das Programm ermittelt den richtigen Befehl

Die Installation:

  • install.sh Das Installationsscript. Es installiert die komplette Umgebung und installiert auch die Systemdienste, wenn gewünscht. Wenn alles vorbereitet wurde, dann muss nur dieses Script aufgerufen werden
  • init-letsencrypt.sh Installiert das Zertifikat für die Domain, die in der .env Datei steht. Wird bei der Installation abgefragt
  • init-systemd.sh Installiert den Proxy als Systemdienst, so dass er beim Booten automatisch gestartet wird. Wird bei der Installation abgefragt
  • init-cron_certbot.sh Installiert einen automatischen Check, ob das Zertifikat erneuert werden muss. Wenn ja, dann wird das Zertifikat erneuert. Dazu muss Port 80 offen sein und auf den Proxy umgeleitet werden (siehe Portweiterleitung). Wird bei der Installation abgefragt, ob es installiert werden soll
  • init-cron_dns.sh Installiert einen automatischen Check, ob Domainname und IP-Adresse noch übereinstimmen. Wenn nicht, wird eine Synchronisation gestartet. Wird bei der Installation abgefragt, ob es installiert werden soll

Sonstige Scripte:

  • hilfe.sh Diverse nützliche Befehle
  • docker-compose.yml Die Konfigurationsdatei der Docker Container
  • renew-certs.sh Das ist der Check, ob ein Zertifikat ausläuft. Es wird durch das init-certbot.sh Script installiert

Vorbereitungen

Hinweis:

  • Sollte eine Datei nicht ausführbar sein, so kann das mit chmod 775 datei geändert werden.
  • Dateien, die ausgeführt werden sollen und sich in dem gleichen Ordner befinden, in dem man sich selbst befindet, denen muss ein ./ vorangestellt werden.

Um zu testen, ob die entsprechende Gruppe angelegt wurde und die Zuordnung stimmt, kann das Script

./check-docker-group.sh

ausgeführt werden. Es legt die Gruppe **docker] an, falls das noch nicht schon automatisch geschehen ist, und fügt den aktuellen User in die Gruppe ein, falls das auch noch nicht geschehen ist. Auch das wird vom Installationsscript abgefangen, sollte es vergessen werden.

Die beiden Konfigurationsdateien

Es müssen einige Umgebungsvariablen gesetzt werden. Dazu mit

nano .env

die Datei entsprechend anpassen.

JWT_SECRET=IhrSehrSichererGeheimerSchluessel
DOMAINS=meineDomain.dyn
EMAIL=meine@mailadressse.hier
HTTPSPORT=443

Die entsprechenden Daten eingeben und mit den Tasten Strg + X speichern. Es wird gefragt, ob Du wirklich speichern möchtest. Dies bestätigen, und fertig. Wenn man auf Nummer sicher gehen will, dann kann man sich die Datei mit cat .env noch einmal anzeigen lassen.

Die zweite Datei, die wichtig ist, betrifft die Namensauflösung. Ich habe eine Konfigurationsdatei erstellt mit Beispielen für duckdns, ydns und ipv64. Wenn Ihr euch bei einem dieser Anbieter eine Domain geholt habt, dann einfach die entsprechenden Daten da eintragen. Solltet ihr einen anderen Anbieter haben und Probleme mit dem Eintragen haben, einfach melden. Diese Datei ist ein Angebot, das kann bei der Installation auch übergangen werden, wenn ihr das lieber selbst machen möchtet.

Mit

nano dns_updater.conf

wird die Datei aufgerufen:

# Format:
# DOMAIN:UPDATE_URL:UPDATE_TYPE:USERNAME:PASSWORD
#
# UPDATE_TYPE:
#   ipv64  -> verwendet curl -G mit der URL
#   ydns   -> verwendet curl -u user:pass mit der Basis-URL

# Deine ipv64 Domain
# domain                curl -s -G "URL"
# meinedomain.xx64.de   curl -s -G "https://https://ipv64.net/nic/update?key=irgendeinkey"

# Deine YDNS Domain 
# Domain                   curl -s -u "Mailadresse:Passwort" "URL"
# meinedomain.ydns.eu      curl -s -u "mail@xx.yy:Passwort" "https://ydns.io/api/v1/update/?host=meinedomain.ydns.eu&ipv6=auto"

# duckdns Domain 
#domain              curl -s -G "URL"
# meinedomain.duckdns.org -s -G "https://www.duckdns.org/update?domains=meinedomain&token=irgendeintoken"

Es muss also nur meinedomain durch den richtigen Domain-Namen ersetzt werden, und bei duckdns und ipv64 der "irgendeinkey" oder "irgendeintoken" durch den angezeigten Key oder Token ersetzt werden. Und bei ydns müssen Passwort und Loginname eingegeben werden. Natürlich darf vorne kein # sein. Das Zeichen bedeutet Kommentar. Alles was dahinter steht, wird somit nicht berücksichtigt. Die entsprechenden Daten eingeben und mit den Tasten Strg + X speichern. Wenn die Domain dort eingetragen wurde, dann kann die Aktualisierung starten mit

./dns_updater.sh

Dieses Script prüft die aktuelle IP-Adresse mit der IP-Adresse, die mit der Domain verknüpft ist, und erneuert die Zuordnung, falls es nötig sein sollte. Da wirklich nur dann erneuert wird, wenn es auch nötig ist, spielt die Einschränkung bei ipv64 keine Rolle. Dort dürfen maximal 64 Anfragen je Tag gemacht werden. Im Gegensatz dazu testet das Script

./dnstest.sh Domainname

nur, ob zumindest eine Zuordnung, also die von IPv4 oder IPv6, stimmt. Wenn der Domainname weggelassen wird, dann wird der Domainname genommen, der in der .env-Datei steht. Das Ergebnis wird angezeigt. Dieses Script wird auch bei der Installation aufgerufen, um zu testen, ob die Namensauflösung ok ist.

Die Installation

Nun beginnt die Installation. Dazu wird ein Script aufgerufen, welches die Zertifikate installiert und dann alles konfiguriert und einrichtet.

./install.sh

Die Installation macht alles, was benötigt wird, und fragt jeden Schritt ab. Mehr als Zustimmen oder Ablehnen muss nicht gemacht werden. Normalerweise sollte überall y gedrückt werden. Die Standardeinstellung ist N. Da bin ich am Überlegen, ob ich das noch ändern werde.

Folgendes passiert nun:

  1. CPU-Check
  2. Test der .env Datei
  3. Ermittlung des richtigen compose-Befehls
  4. Test der Compose-Version. Kleiner als 2 geht nicht
  5. Test der Docker Gruppe. Erzeugt eine Gruppe und fügt den User ein, wenn es sein muss. Danach muss man sich jedoch vom System abmelden und wieder anmelden. Erst danach kann die Installation fortgesetzt werden
  6. DNS-Test der Domain. Sollte es Probleme geben, wird die Installation abgebrochen]
  7. Frage, ob die aktuellste Proxy-Version runtergeladen werden soll. Sollte mit ja y beantwortet werden. Nur wenn etwas nicht funktioniert hat und die Installation wiederholt werden muss, ist ein N, also einfach Return, sinnvoll
  8. Frage, ob das Zertifikat für die Domain erstellt werden soll. Sollte mit ja y beantwortet werden. Nur wenn etwas nicht funktioniert hat und die Installation wiederholt werden muss, ist ein N, also einfach Return, sinnvoll, sofern vorher die Installation des Zertifikates funktioniert hat]
  9. Frage, ob ein Systemservice erstellt werden soll. Dann startet alles automatisch beim Booten des Systems, was auch Sinn macht. Sollte mit ja y beantwortet werden, wenn das gewünscht ist. Wenn nicht, einfach Enter drücken oder n. Wahrscheinlich wird man aufgefordert, das Superuser-Passwort einzugeben. Es werden root-Rechte für diese Aktion benötigt
  10. Frage, ob das Zertifikat automatisch erneuert werden soll. Wenn ja, was Sinn macht, einfach y drücken. Wenn nicht gewünscht, Enter oder n drücken
  11. Frage, ob automatisch nachgeschaut werden soll, ob eine DNS-Aktualisierung gemacht werden muss. Wenn ja, was sinnvoll ist, einfach y drücken. Dann wird alle 15min nachgesehen, ob die IP sich geändert hat. Wenn euch der Abstand zu groß ist, so könnt Ihr auch mit crontab -e den Abstand nach der Installation verändern

Das ist alles.

Es gibt eine Hilfe, in der einige Befehle stehen, falls es mal Probleme geben sollte. Dazu einfach

./hilfe.sh

eingeben.

Es gibt auch noch

./update-proxy.sh

Dieses Script kann immer angewendet werden, wenn ein Update gemacht werden soll. Es beendet den Proxy, tauscht die Dateien aus und startet ihn wieder. Ihr müsst keinen Download machen. Das macht alles das Script.

Solltet ihr versehentlich das Script für den ersten Download genommen haben, dann einfach, sobald alles durchgelaufen ist, einmal die ./hilfe.sh starten und dann den Befehl mit docker compose down --volumes oder docker-compose down --volumes ausführen. Welcher von beiden das ist, das sagt die ./hilfe.sh Funktion.