Megbes-internal
megbes-internal installieren und starten
BearbeitenDiese 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
BearbeitenVor 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
BearbeitenBeispiel – 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
BearbeitenSiehe ergänzend Umgebungsdatei env.list.
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
BearbeitenKey- 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
Bearbeitendocker 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
Bearbeitendocker 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
BearbeitenAllgemeine 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
Bearbeitendocker 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
BearbeitenNeustartregel:
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
Bearbeitensudo 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
BearbeitenContainer-Name, Ports, Subnetz, Release, Dateipfade, Stations-Timer, Installationsdatum und Testergebnis auf der Projektseite eintragen. Geheimwerte ausschließlich im Passwortmanager speichern.