You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.7 KiB

TD-Pult im Container bereitstellen

Nginx liefert die einzelne HTML-Datei aus und schützt sie mit Basic Auth. TLS und Domain macht dein Nginx Proxy Manager.

Alle Befehle im Ordner deploy/ ausführen. Der Ordner deploy/site/ enthält die auszuliefernde Seite — dort muss index.html liegen, das ist die umbenannte TD-Pult.html.


1 · Passwortdatei anlegen

Die Datei htpasswd enthält Benutzername und Passwort-Hash. Sie liegt bewusst nicht im Repo und wird einmalig erzeugt:

docker run --rm httpd:alpine htpasswd -Bbn td 'DEIN-PASSWORT' > htpasswd
chmod 600 htpasswd

td ist der Benutzername, -B erzwingt bcrypt. Passwort in einfachen Anführungszeichen, damit Sonderzeichen von der Shell nicht angefasst werden. Wenn es nicht im Shell-Verlauf landen soll:

docker run --rm -it httpd:alpine htpasswd -Bn td > htpasswd   # fragt interaktiv

Weiteren Benutzer ergänzen:

docker run --rm httpd:alpine htpasswd -Bbn regie 'ANDERES-PASSWORT' >> htpasswd

Passwort später ändern: Datei neu erzeugen, dann docker compose restart.


2 · Seite bereitstellen

mkdir -p site
cp ../TD-Pult.html site/index.html      # oder die hochgeladene Datei dorthin kopieren

Anschließend die Rechte setzen — nginx läuft im Container als eigener Benutzer und kann Dateien mit Modus 600 nicht lesen. Das äußert sich als 403 Forbidden nach erfolgreichem Login:

chmod 755 site
chmod 644 site/index.html

Gemountet wird der Ordner site/, nicht die einzelne Datei. Einzeldatei-Mounts brechen, sobald ein Editor oder eine Synchronisierung die Datei ersetzt statt sie zu beschreiben — und wenn die Datei beim Start fehlt, legt Docker an ihrer Stelle stillschweigend ein Verzeichnis an. Genau das erzeugt die Meldung „not a directory: Are you trying to mount a directory onto a file“.

Wenn das schon passiert ist, den leeren Ordner entfernen und neu starten:

docker rm -f td-pult
rmdir ../TD-Pult.html          # der versehentlich angelegte Ordner
mkdir -p site && cp /pfad/zu/TD-Pult.html site/index.html
docker compose up -d

Alternativ macht sh install.sh diese Schritte inklusive Aufräumen und Prüfung.

Ausgeliefert wird die leere Vorlage. Euer Programm kommt anschließend im Browser über Dateien → Programm laden hinein (JSON-Datei aus Programm sichern).


3 · Container starten

docker compose up -d
docker compose logs -f          # bei Bedarf
curl -I http://localhost:8087/  # muss 401 liefern – dann greift der Schutz

Der Container hört auf Port 8087.


4 · Nginx Proxy Manager einrichten

Neuer Proxy Host:

Feld Wert
Domain Names z. B. td.example.com
Scheme http
Forward Hostname / IP IP des Docker-Hosts (bei Portfreigabe) oder td-pult (bei gemeinsamem Netz)
Forward Port 8087 bzw. 80
Cache Assets aus – sonst siehst du Änderungen verzögert
Block Common Exploits an
Websockets Support aus

Reiter SSL: Let's-Encrypt-Zertifikat anfordern, Force SSL, HTTP/2 und HSTS aktivieren. Basic Auth überträgt das Passwort sonst im Klartext.

Läuft der Proxy Manager selbst als Container, erreicht er 127.0.0.1 des Hosts nicht. Dann entweder die Host-IP eintragen oder beide Container ins selbe Docker-Netz hängen (siehe Kommentare in docker-compose.yml) und auf td-pult:80 zeigen.

Optional zusätzlich: in NPM unter Access Lists eine Liste mit Passwortschutz anlegen und dem Proxy Host zuweisen. Der Schutz im Container bleibt trotzdem aktiv — dann fragt es zweimal, deshalb entweder das eine oder das andere.


5 · Aktualisieren

Neue Version des Tools einspielen:

cp /pfad/zur/neuen/TD-Pult.html site/index.html
chmod 644 site/index.html

Mehr ist nicht nötig — der Ordner ist gemountet, nginx liest die Datei bei jeder Anfrage neu. Ein docker compose restart braucht es nur, wenn du nginx.conf oder htpasswd geändert hast.

Da Cache-Control: no-store gesetzt ist, lädt der Browser beim nächsten Aufruf die neue Fassung. Wenn du eine ältere Version testen willst, einfach die Datei tauschen — das Image bleibt unverändert.


6 · Was du wissen solltest

Deine Daten liegen im Browser, nicht auf dem Server. Anweisungen, Haken und das bearbeitete Programm stehen im localStorage der jeweiligen Domain. Daraus folgt:

  • Jedes Gerät hat seinen eigenen Stand. Übertragung über Dateien → Programm sichern bzw. Anweisungen sichern und auf dem anderen Gerät laden.
  • Der Stand hängt an der Domain. Rufst du das Tool später unter einer anderen Adresse auf, ist es leer — vorher sichern.
  • Wer im Browser die Website-Daten löscht, löscht auch deine Anweisungen. Vor der Schicht einmal sichern.

Ausfall am Platz. Die Seite läuft nach dem Laden vollständig im Browser. Bricht das Netz weg, arbeitet der bereits geöffnete Tab normal weiter — nur ein Neuladen geht dann nicht mehr. Halte die Datei zusätzlich lokal vor, dann kannst du sie im Notfall per Doppelklick öffnen.

Basic Auth ist nur so sicher wie die Leitung. Ausschließlich über HTTPS betreiben und Force SSL im Proxy setzen.


Dateien

Datei Zweck
docker-compose.yml Container-Definition, Ports, Mounts
site/index.html Die ausgelieferte Seite — hierhin TD-Pult.html kopieren
install.sh Richtet ein bzw. repariert einen fehlgeschlagenen Start
nginx.conf Auslieferung, Basic Auth, Header, Healthcheck
htpasswd Benutzer und Passwort-Hash — selbst erzeugen, nicht teilen
Dockerfile Optional: eigenständiges Image für eine Registry
../.gitignore Hält htpasswd und site/index.html aus der Versionierung

Powered by TurnKey Linux.