Megbes-internal
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]- Ubuntu ist vollständig aktualisiert
- feste lokale IP-Adresse ist eingerichtet und getestet
- Docker ist installiert und mit `hello-world` geprüft
- Projekt ist in `megbes-config` eingetragen
- External-Adresse, Internal-Port, Subnetz, UDP-Port und Stations-Timer sind festgelegt
- projektbezogene Zertifikate sind erzeugt
- freizugebender MegBes-Release ist festgelegt
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]- Erreichbarkeit vom vorgesehenen External-System testen.
- Status-Monitor prüfen.
- abgestimmten ungefährlichen Stationsbefehl senden.
- prüfen, dass ausschließlich die richtige Station reagiert.
- Init-/Statusmeldung testen.
- 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.