<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.megbes.de/index.php?action=history&amp;feed=atom&amp;title=Megbes-internal</id>
	<title>Megbes-internal - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.megbes.de/index.php?action=history&amp;feed=atom&amp;title=Megbes-internal"/>
	<link rel="alternate" type="text/html" href="https://wiki.megbes.de/index.php?title=Megbes-internal&amp;action=history"/>
	<updated>2026-08-04T23:19:21Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MegBes Wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.megbes.de/index.php?title=Megbes-internal&amp;diff=22&amp;oldid=prev</id>
		<title>Clawtronics: Ausführliche DAU-sichere Arbeitsanleitung angelegt</title>
		<link rel="alternate" type="text/html" href="https://wiki.megbes.de/index.php?title=Megbes-internal&amp;diff=22&amp;oldid=prev"/>
		<updated>2026-08-04T20:48:41Z</updated>

		<summary type="html">&lt;p&gt;Ausführliche DAU-sichere Arbeitsanleitung angelegt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= megbes-internal installieren und starten =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* [[Ubuntu aktualisieren|Ubuntu ist vollständig aktualisiert]]&lt;br /&gt;
* [[Feste IP-Adresse unter Ubuntu|feste lokale IP-Adresse ist eingerichtet und getestet]]&lt;br /&gt;
* [[Docker installieren|Docker ist installiert und mit `hello-world` geprüft]]&lt;br /&gt;
* Projekt ist in `megbes-config` eingetragen&lt;br /&gt;
* External-Adresse, Internal-Port, Subnetz, UDP-Port und Stations-Timer sind festgelegt&lt;br /&gt;
* projektbezogene Zertifikate sind erzeugt&lt;br /&gt;
* freizugebender MegBes-Release ist festgelegt&lt;br /&gt;
&lt;br /&gt;
== 1. Projektwerte sammeln ==&lt;br /&gt;
&lt;br /&gt;
Vor dem ersten Befehl diese Tabelle in der Projektseite ausfüllen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Wert&lt;br /&gt;
! Projektwert&lt;br /&gt;
|-&lt;br /&gt;
| technisches Projektkürzel ||&lt;br /&gt;
| Linux-Benutzername ||&lt;br /&gt;
| Container-Name ||&lt;br /&gt;
| Host-TCP-Port ||&lt;br /&gt;
| Container-TCP-Port || 8080&lt;br /&gt;
|-&lt;br /&gt;
| UDP-Port ||&lt;br /&gt;
| lokales Subnetz ohne letzte Hostnummer ||&lt;br /&gt;
| Pfad der Umgebungsdatei ||&lt;br /&gt;
| Pfad des Zertifikatsordners ||&lt;br /&gt;
| Docker-Image || `tinetronics/megbes-internal`&lt;br /&gt;
|-&lt;br /&gt;
| Release ||&lt;br /&gt;
| projektspezifischer Stations-Timer ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Ordner anlegen ==&lt;br /&gt;
&lt;br /&gt;
Beispiel – Platzhalter ersetzen:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/certs&lt;br /&gt;
 chmod 700 /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/certs&lt;br /&gt;
&lt;br /&gt;
Kontrolle:&lt;br /&gt;
&lt;br /&gt;
 ls -ld /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/certs&lt;br /&gt;
&lt;br /&gt;
== 3. Umgebungsdatei anlegen ==&lt;br /&gt;
&lt;br /&gt;
Datei öffnen:&lt;br /&gt;
&lt;br /&gt;
 nano /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/&amp;lt;Projekt&amp;gt;.env&lt;br /&gt;
&lt;br /&gt;
Bereinigte Vorlage:&lt;br /&gt;
&lt;br /&gt;
 LOCALNETWORK_SUB_NETWORK=&amp;lt;lokales-Subnetz&amp;gt;&lt;br /&gt;
 LOCALNETWORK_UDP_PORT=&amp;lt;UDP-Port&amp;gt;&lt;br /&gt;
 MEGBES_SSL=true&lt;br /&gt;
 MNGMT_HEADER=&amp;lt;Name-des-Management-Headers&amp;gt;&lt;br /&gt;
 MNGMT_KEY=&amp;lt;im-Passwortmanager&amp;gt;&lt;br /&gt;
 MAIL_SMTP_PORT=&amp;lt;SMTP-Port&amp;gt;&lt;br /&gt;
 MAIL_SMTP_HOST=&amp;lt;SMTP-Server&amp;gt;&lt;br /&gt;
 MAIL_SENDER_ADDRESS=&amp;lt;Absenderadresse&amp;gt;&lt;br /&gt;
 MAIL_SENDER_PASSWORD=&amp;lt;im-Passwortmanager&amp;gt;&lt;br /&gt;
 MAIL_RECIPIENTADDRESSES=&amp;lt;Empfaengeradresse&amp;gt;&lt;br /&gt;
 SERVER_SSL_KEYSTORE=/opt/app/keys/keystore.jks&lt;br /&gt;
 SERVER_SSL_KEYSTOREPASSWORD=&amp;lt;im-Passwortmanager&amp;gt;&lt;br /&gt;
 SERVER_SSL_KEYSTORETYPE=JKS&lt;br /&gt;
 SERVER_SSL_TRUSTSTORE=/opt/app/keys/truststore.jks&lt;br /&gt;
 SERVER_SSL_TRUSTSTOREPASSWORD=&amp;lt;im-Passwortmanager&amp;gt;&lt;br /&gt;
 SERVER_SSL_CLIENTAUTH=need&lt;br /&gt;
 MEGBES_INTERNAL_STATION_CONTROLLED=&amp;lt;true-oder-false&amp;gt;&lt;br /&gt;
 STATION_TIMER_SECONDS=&amp;lt;Projektwert&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Datei schützen:&lt;br /&gt;
&lt;br /&gt;
 chmod 600 /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/&amp;lt;Projekt&amp;gt;.env&lt;br /&gt;
 ls -l /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/&amp;lt;Projekt&amp;gt;.env&lt;br /&gt;
&lt;br /&gt;
Erwartete Rechte sind `-rw-------`.&lt;br /&gt;
&lt;br /&gt;
== 4. Zertifikate übertragen ==&lt;br /&gt;
&lt;br /&gt;
Key- und Truststore in den Zertifikatsordner kopieren, beispielsweise mit WinSCP. Danach auf dem Server prüfen:&lt;br /&gt;
&lt;br /&gt;
 ls -l /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/certs&lt;br /&gt;
&lt;br /&gt;
Die in der Umgebungsdatei genannten Dateinamen müssen exakt mit den übertragenen Dateien übereinstimmen. Groß-/Kleinschreibung ist unter Linux relevant.&lt;br /&gt;
&lt;br /&gt;
Dateien vor unberechtigtem Zugriff schützen:&lt;br /&gt;
&lt;br /&gt;
 chmod 600 /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/certs/*&lt;br /&gt;
&lt;br /&gt;
== 5. Bei Docker Hub anmelden, falls erforderlich ==&lt;br /&gt;
&lt;br /&gt;
 docker login --username &amp;lt;Docker-Benutzername&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== 6. Gewünschtes Image laden ==&lt;br /&gt;
&lt;br /&gt;
 docker pull tinetronics/megbes-internal:&amp;lt;RELEASE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für den aktuellen Release-Namen:&lt;br /&gt;
&lt;br /&gt;
 docker pull tinetronics/megbes-internal:AUGUST-2026-2-RELEASE&lt;br /&gt;
&lt;br /&gt;
Vor dem produktiven Einsatz muss geprüft sein, ob dieses Projekt tatsächlich diesen Release erhalten soll.&lt;br /&gt;
&lt;br /&gt;
Kontrolle:&lt;br /&gt;
&lt;br /&gt;
 docker image ls tinetronics/megbes-internal&lt;br /&gt;
&lt;br /&gt;
== 7. Container starten ==&lt;br /&gt;
&lt;br /&gt;
Allgemeine Vorlage – jeden Platzhalter ersetzen:&lt;br /&gt;
&lt;br /&gt;
 docker run -d \&lt;br /&gt;
   --restart unless-stopped \&lt;br /&gt;
   -p &amp;lt;HOST-TCP-PORT&amp;gt;:8080 \&lt;br /&gt;
   -p &amp;lt;UDP-PORT&amp;gt;:&amp;lt;UDP-PORT&amp;gt;/udp \&lt;br /&gt;
   --env-file /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/&amp;lt;Projekt&amp;gt;.env \&lt;br /&gt;
   --name megbes-internal-&amp;lt;Projekt&amp;gt; \&lt;br /&gt;
   -v /home/&amp;lt;Benutzer&amp;gt;/megbes/&amp;lt;Projekt&amp;gt;/certs:/opt/app/keys \&lt;br /&gt;
   tinetronics/megbes-internal:&amp;lt;RELEASE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor Enter die fertige Befehlszeile mit den Projektwerten vergleichen. Keine Vorlage eines anderen Kunden ungeprüft übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Bedeutung der Parameter ==&lt;br /&gt;
&lt;br /&gt;
; `docker run -d`&lt;br /&gt;
: Erstellt und startet den Container im Hintergrund.&lt;br /&gt;
&lt;br /&gt;
; `--restart unless-stopped`&lt;br /&gt;
: Startet den Container nach Docker- oder Serverneustarts automatisch, außer er wurde zuvor bewusst manuell gestoppt.&lt;br /&gt;
&lt;br /&gt;
; `-p &amp;lt;HOST-TCP-PORT&amp;gt;:8080`&lt;br /&gt;
: Leitet den projektspezifischen TCP-Port des Servers auf Port 8080 im Container.&lt;br /&gt;
&lt;br /&gt;
; `-p &amp;lt;UDP-PORT&amp;gt;:&amp;lt;UDP-PORT&amp;gt;/udp`&lt;br /&gt;
: Stellt den UDP-Port für Status- und Init-Meldungen bereit. Host-, Container- und Umgebungswert müssen zusammenpassen.&lt;br /&gt;
&lt;br /&gt;
; `--env-file ...`&lt;br /&gt;
: Übergibt die geschützte Projektkonfiguration.&lt;br /&gt;
&lt;br /&gt;
; `--name ...`&lt;br /&gt;
: Vergibt einen eindeutigen Container-Namen.&lt;br /&gt;
&lt;br /&gt;
; `-v ...:/opt/app/keys`&lt;br /&gt;
: Bindet den Zertifikatsordner des Servers in den Container ein.&lt;br /&gt;
&lt;br /&gt;
; `tinetronics/megbes-internal:&amp;lt;RELEASE&amp;gt;`&lt;br /&gt;
: Legt Image und Release fest.&lt;br /&gt;
&lt;br /&gt;
== 8. Start kontrollieren ==&lt;br /&gt;
&lt;br /&gt;
 docker ps&lt;br /&gt;
&lt;br /&gt;
Der neue Container muss mit dem Zustand `Up` erscheinen.&lt;br /&gt;
&lt;br /&gt;
Logs prüfen:&lt;br /&gt;
&lt;br /&gt;
 docker logs --tail 100 megbes-internal-&amp;lt;Projekt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei fortlaufender Anzeige:&lt;br /&gt;
&lt;br /&gt;
 docker logs --follow megbes-internal-&amp;lt;Projekt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit `Strg+C` wird nur die Loganzeige beendet, nicht der Container.&lt;br /&gt;
&lt;br /&gt;
== 9. Konfiguration kontrollieren ==&lt;br /&gt;
&lt;br /&gt;
Neustartregel:&lt;br /&gt;
&lt;br /&gt;
 docker inspect -f &amp;#039;{{.HostConfig.RestartPolicy.Name}}&amp;#039; megbes-internal-&amp;lt;Projekt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erwartet:&lt;br /&gt;
&lt;br /&gt;
 unless-stopped&lt;br /&gt;
&lt;br /&gt;
Portzuordnungen:&lt;br /&gt;
&lt;br /&gt;
 docker port megbes-internal-&amp;lt;Projekt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eingebundene Ordner:&lt;br /&gt;
&lt;br /&gt;
 docker inspect -f &amp;#039;{{json .Mounts}}&amp;#039; megbes-internal-&amp;lt;Projekt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inspect-Ausgaben können interne Pfade und Konfigurationsdetails enthalten; nicht ungeprüft ins Wiki kopieren.&lt;br /&gt;
&lt;br /&gt;
== 10. Funktionstest ==&lt;br /&gt;
&lt;br /&gt;
# Erreichbarkeit vom vorgesehenen External-System testen.&lt;br /&gt;
# Status-Monitor prüfen.&lt;br /&gt;
# abgestimmten ungefährlichen Stationsbefehl senden.&lt;br /&gt;
# prüfen, dass ausschließlich die richtige Station reagiert.&lt;br /&gt;
# Init-/Statusmeldung testen.&lt;br /&gt;
# bei stationsgesteuerten Projekten Zustände und Timer prüfen.&lt;br /&gt;
&lt;br /&gt;
== 11. Neustarttest ==&lt;br /&gt;
&lt;br /&gt;
 sudo reboot&lt;br /&gt;
&lt;br /&gt;
Nach erneuter Anmeldung:&lt;br /&gt;
&lt;br /&gt;
 systemctl status docker --no-pager&lt;br /&gt;
 docker ps&lt;br /&gt;
 docker logs --tail 100 megbes-internal-&amp;lt;Projekt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Container und Kommunikation müssen automatisch wieder funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Typische Fehler ==&lt;br /&gt;
&lt;br /&gt;
; Container erscheint nicht in `docker ps`&lt;br /&gt;
: Mit `docker ps -a` auch beendete Container anzeigen und anschließend Logs lesen.&lt;br /&gt;
&lt;br /&gt;
; `port is already allocated`&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
; Zertifikatsfehler&lt;br /&gt;
: Dateinamen, Mount-Pfad, Kennwörter und Zuordnung zum Projekt prüfen.&lt;br /&gt;
&lt;br /&gt;
; Image kann nicht geladen werden&lt;br /&gt;
: Release-Schreibweise und Docker-Hub-Anmeldung prüfen.&lt;br /&gt;
&lt;br /&gt;
; Neustartschleife&lt;br /&gt;
: `docker ps -a` und `docker logs` prüfen. Nicht wiederholt neue Container mit anderen Namen erzeugen.&lt;br /&gt;
&lt;br /&gt;
== Projektdokumentation ==&lt;br /&gt;
&lt;br /&gt;
Container-Name, Ports, Subnetz, Release, Dateipfade, Stations-Timer, Installationsdatum und Testergebnis auf der Projektseite eintragen. Geheimwerte ausschließlich im Passwortmanager speichern.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:MegBes]]&lt;br /&gt;
[[Kategorie:megbes-internal]]&lt;br /&gt;
[[Kategorie:Installation]]&lt;/div&gt;</summary>
		<author><name>Clawtronics</name></author>
	</entry>
</feed>