docker_vm
Eine Node im Container (Debian Trixie, systemd, nginx, MariaDB 11.8, php-fpm 8.4). Plan und Abnahmekriterien: PLAN.md, Durchlauf mit Beweis: HANDBUCH.md. Stand: P6 (Doktor, Drills, Pool-Check).
docker compose -f docker_vm/compose.yml up -d --build # vom Repo-Root: Image bauen, starten (Port 18080)
docker exec tlsgate-vm systemctl is-system-running # -> running
docker exec tlsgate-vm /opt/provision/instance.sh ozm01 # Instanz anlegen/angleichen (idempotent); `ozm01 mock` setzt TLSGATE_MOCK=1
curl -H 'Host: ozm01.localhost' localhost:18080/login.php # oder im Browser: http://ozm01.localhost:18080/
docker exec tlsgate-vm cat /root/.provision/ozm01.env # DB- und Admin-Passwort (nur root; Admin: admin@ozm01.localhost)
docker exec tlsgate-vm /opt/provision/instance-cli.sh ozm01 user code admin@ozm01.localhost # 6-stelliger TOTP-Code (30 s gültig); neuer QR: Konsole „2FA“ oder `user reset-mfa` — HANDBUCH §4
docker_vm/tests/p5.sh # Abnahme P5: Doktor + Betriebs-Drills + Pool-Check (root.key 0644, DB aus, falsches DB-Passwort, state/-Besitz, Pool-Datei; 31 Pruefungen)
docker_vm/tests/p4.sh # Abnahme P4: ozm02, Isolation, Guard, Logs, Reseller-Sperre, ssh (54 Pruefungen, ca. 35 s)
docker_vm/tests/p3.sh # Abnahme P3: Fake-Registrar, Datenformen, ohne mbstring, Mock an/aus (43 Pruefungen, ca. 25 s)
docker_vm/tests/run.sh # Abnahme P2: ozm01 komplett (52 Pruefungen, ca. 15 s; Container muss laufen)
docker exec tlsgate-vm /opt/provision/instance-cli.sh ozm01 user list # user_cli.php als Instanz-User (DML-Benutzer)
docker exec -it tlsgate-vm bash # Shell auf der "Node"
docker compose -f docker_vm/compose.yml down # stoppen; Volumes (mysql, home, provision) bleiben, mit -v weg
# Nach down/up den Container neu angleichen: instance.sh ozm01 (Benutzer, Pool, Vhost; Daten und Secrets bleiben)
provision/instance.sh <name> legt je Instanz an: Benutzer, /home/<name>/{app,bin,state,logs}, MariaDB-Schema mit <name>_ddl (nur migrate) und <name>_app (nur DML), php-fpm-Pool, nginx-Vhost <name>.localhost, Gruppe und Admin. Vorlagen in provision/templates/. Voraussetzung: Docker Desktop oder Docker mit cgroup-v2-Host, cgroup: host und rw-cgroup (siehe compose.yml).
Fake-Registrar (fake-soap/)
Nur im Container, https://soap.fake.test (127.0.0.1:443, nicht veröffentlicht, Fake-CA im System-Trust, Login fakeuser / fakepass).
Die Order-Nummer wählt die Datenform (FAKE-1, FAKE-OBJ, FAKE-LIST, FAKE-NEST, FAKE-STRUCT, FAKE-NIL, FAKE-NOCHAIN, FAKE-ERR, FAKE-FAULT, Liste siehe fake-soap/server.php).
Seit v3.2.0 gibt es den Modus fake nicht mehr (er setzte TLSGATE_SOAP_HOSTS im Pool und sperrte jede andere WSDL). Der Fake ist ein gewoehnliches Ziel; den Zugang legt man an wie jeden anderen, im Web (credentials.php) oder mit
printf 'fakeuser\nfakepass\n' | docker exec -i tlsgate-vm /opt/provision/instance-cli.sh ozm01 cred add ozm01 fake https://soap.fake.test/wsdl.
Aufrufe stehen in /var/log/fake-soap/calls.log. Die WSDL bildet nur sslInfo und sslListExtended nach, keine Schreibaufrufe.
SSH (nur Schlüssel)
Port 2222, nur Instanz-Benutzer mit hinterlegtem Schlüssel; kein root, kein Passwort, keine Tunnel. Schlüssel setzt root:
docker exec tlsgate-vm install -d -m 700 /root/.provision/ssh && docker cp mein.pub tlsgate-vm:/root/.provision/ssh/ozm01.pub && docker exec tlsgate-vm /opt/provision/instance.sh ozm01
ssh -p 2222 -i docker_vm/.demo-key ozm01@127.0.0.1 # Testschluessel (entsteht beim ersten p4.sh-Lauf)
dashboard.sh # farbige Liste vom Fake-Registrar; details FAKE-OBJ, stats, help
Web-UI: http://ozm01.localhost:18080/ (Login admin@ozm01.localhost, Passwort in /root/.provision/ozm01.env; *.localhost loest der Browser selbst auf).