Zum Inhalt springen

Megbes-internal

Aus MegBes Wiki
Version vom 4. August 2026, 20:48 Uhr von Clawtronics (Diskussion | Beiträge) (Ausführliche DAU-sichere Arbeitsanleitung angelegt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

megbes-internal installieren und starten

[Bearbeiten]

Diese Anleitung beschreibt die projektspezifische Einrichtung von `megbes-internal` auf dem Server beim Kunden. Sie setzt eine installierte aktuelle Ubuntu-LTS-Version, eine feste IP-Adresse und eine funktionierende Docker-Installation voraus.

Voraussetzungen

[Bearbeiten]

1. Projektwerte sammeln

[Bearbeiten]

Vor dem ersten Befehl diese Tabelle in der Projektseite ausfüllen:

Wert Projektwert
technisches Projektkürzel Linux-Benutzername Container-Name Host-TCP-Port Container-TCP-Port 8080
UDP-Port lokales Subnetz ohne letzte Hostnummer Pfad der Umgebungsdatei Pfad des Zertifikatsordners Docker-Image `tinetronics/megbes-internal`
Release projektspezifischer Stations-Timer

2. Ordner anlegen

[Bearbeiten]

Beispiel – Platzhalter ersetzen:

mkdir -p /home/<Benutzer>/megbes/<Projekt>/certs
chmod 700 /home/<Benutzer>/megbes/<Projekt>/certs

Kontrolle:

ls -ld /home/<Benutzer>/megbes/<Projekt>/certs

3. Umgebungsdatei anlegen

[Bearbeiten]

Datei öffnen:

nano /home/<Benutzer>/megbes/<Projekt>/<Projekt>.env

Bereinigte Vorlage:

LOCALNETWORK_SUB_NETWORK=<lokales-Subnetz>
LOCALNETWORK_UDP_PORT=<UDP-Port>
MEGBES_SSL=true
MNGMT_HEADER=<Name-des-Management-Headers>
MNGMT_KEY=<im-Passwortmanager>
MAIL_SMTP_PORT=<SMTP-Port>
MAIL_SMTP_HOST=<SMTP-Server>
MAIL_SENDER_ADDRESS=<Absenderadresse>
MAIL_SENDER_PASSWORD=<im-Passwortmanager>
MAIL_RECIPIENTADDRESSES=<Empfaengeradresse>
SERVER_SSL_KEYSTORE=/opt/app/keys/keystore.jks
SERVER_SSL_KEYSTOREPASSWORD=<im-Passwortmanager>
SERVER_SSL_KEYSTORETYPE=JKS
SERVER_SSL_TRUSTSTORE=/opt/app/keys/truststore.jks
SERVER_SSL_TRUSTSTOREPASSWORD=<im-Passwortmanager>
SERVER_SSL_CLIENTAUTH=need
MEGBES_INTERNAL_STATION_CONTROLLED=<true-oder-false>
STATION_TIMER_SECONDS=<Projektwert>

Die Schreibweise der Variablennamen nicht verändern. Platzhalter vollständig ersetzen. Keine Kommentare hinter Werte schreiben, sofern nicht sicher bekannt ist, dass die Laufzeit sie unterstützt.

Datei schützen:

chmod 600 /home/<Benutzer>/megbes/<Projekt>/<Projekt>.env
ls -l /home/<Benutzer>/megbes/<Projekt>/<Projekt>.env

Erwartete Rechte sind `-rw-------`.

4. Zertifikate übertragen

[Bearbeiten]

Key- und Truststore in den Zertifikatsordner kopieren, beispielsweise mit WinSCP. Danach auf dem Server prüfen:

ls -l /home/<Benutzer>/megbes/<Projekt>/certs

Die in der Umgebungsdatei genannten Dateinamen müssen exakt mit den übertragenen Dateien übereinstimmen. Groß-/Kleinschreibung ist unter Linux relevant.

Dateien vor unberechtigtem Zugriff schützen:

chmod 600 /home/<Benutzer>/megbes/<Projekt>/certs/*

5. Bei Docker Hub anmelden, falls erforderlich

[Bearbeiten]
docker login --username <Docker-Benutzername>

Das Passwort wird anschließend verdeckt abgefragt. Es darf nicht direkt in die Befehlszeile geschrieben werden. Falls das Image ohne Anmeldung geladen werden kann, ist dieser Schritt nicht erforderlich.

6. Gewünschtes Image laden

[Bearbeiten]
docker pull tinetronics/megbes-internal:<RELEASE>

Beispiel für den aktuellen Release-Namen:

docker pull tinetronics/megbes-internal:AUGUST-2026-2-RELEASE

Vor dem produktiven Einsatz muss geprüft sein, ob dieses Projekt tatsächlich diesen Release erhalten soll.

Kontrolle:

docker image ls tinetronics/megbes-internal

7. Container starten

[Bearbeiten]

Allgemeine Vorlage – jeden Platzhalter ersetzen:

docker run -d \
  --restart unless-stopped \
  -p <HOST-TCP-PORT>:8080 \
  -p <UDP-PORT>:<UDP-PORT>/udp \
  --env-file /home/<Benutzer>/megbes/<Projekt>/<Projekt>.env \
  --name megbes-internal-<Projekt> \
  -v /home/<Benutzer>/megbes/<Projekt>/certs:/opt/app/keys \
  tinetronics/megbes-internal:<RELEASE>

Vor Enter die fertige Befehlszeile mit den Projektwerten vergleichen. Keine Vorlage eines anderen Kunden ungeprüft übernehmen.

Bedeutung der Parameter

[Bearbeiten]
`docker run -d`
Erstellt und startet den Container im Hintergrund.
`--restart unless-stopped`
Startet den Container nach Docker- oder Serverneustarts automatisch, außer er wurde zuvor bewusst manuell gestoppt.
`-p <HOST-TCP-PORT>
8080`
Leitet den projektspezifischen TCP-Port des Servers auf Port 8080 im Container.
`-p <UDP-PORT>
<UDP-PORT>/udp`
Stellt den UDP-Port für Status- und Init-Meldungen bereit. Host-, Container- und Umgebungswert müssen zusammenpassen.
`--env-file ...`
Übergibt die geschützte Projektkonfiguration.
`--name ...`
Vergibt einen eindeutigen Container-Namen.
`-v ...
/opt/app/keys`
Bindet den Zertifikatsordner des Servers in den Container ein.
`tinetronics/megbes-internal
<RELEASE>`
Legt Image und Release fest.

8. Start kontrollieren

[Bearbeiten]
docker ps

Der neue Container muss mit dem Zustand `Up` erscheinen.

Logs prüfen:

docker logs --tail 100 megbes-internal-<Projekt>

Bei fortlaufender Anzeige:

docker logs --follow megbes-internal-<Projekt>

Mit `Strg+C` wird nur die Loganzeige beendet, nicht der Container.

9. Konfiguration kontrollieren

[Bearbeiten]

Neustartregel:

docker inspect -f 'Vorlage:.HostConfig.RestartPolicy.Name' megbes-internal-<Projekt>

Erwartet:

unless-stopped

Portzuordnungen:

docker port megbes-internal-<Projekt>

Eingebundene Ordner:

docker inspect -f 'Vorlage:Json .Mounts' megbes-internal-<Projekt>

Inspect-Ausgaben können interne Pfade und Konfigurationsdetails enthalten; nicht ungeprüft ins Wiki kopieren.

10. Funktionstest

[Bearbeiten]
  1. Erreichbarkeit vom vorgesehenen External-System testen.
  2. Status-Monitor prüfen.
  3. abgestimmten ungefährlichen Stationsbefehl senden.
  4. prüfen, dass ausschließlich die richtige Station reagiert.
  5. Init-/Statusmeldung testen.
  6. bei stationsgesteuerten Projekten Zustände und Timer prüfen.

11. Neustarttest

[Bearbeiten]
sudo reboot

Nach erneuter Anmeldung:

systemctl status docker --no-pager
docker ps
docker logs --tail 100 megbes-internal-<Projekt>

Container und Kommunikation müssen automatisch wieder funktionieren.

Typische Fehler

[Bearbeiten]
Container erscheint nicht in `docker ps`
Mit `docker ps -a` auch beendete Container anzeigen und anschließend Logs lesen.
`port is already allocated`
Der gewählte Host-Port ist bereits belegt. Mit `docker ps` und `sudo ss -lntup` prüfen; keinen zufälligen anderen Port wählen, ohne External-Konfiguration und Router anzupassen.
Zertifikatsfehler
Dateinamen, Mount-Pfad, Kennwörter und Zuordnung zum Projekt prüfen.
Image kann nicht geladen werden
Release-Schreibweise und Docker-Hub-Anmeldung prüfen.
Neustartschleife
`docker ps -a` und `docker logs` prüfen. Nicht wiederholt neue Container mit anderen Namen erzeugen.

Projektdokumentation

[Bearbeiten]

Container-Name, Ports, Subnetz, Release, Dateipfade, Stations-Timer, Installationsdatum und Testergebnis auf der Projektseite eintragen. Geheimwerte ausschließlich im Passwortmanager speichern.