Dashboard und Metriken standardmäßig von außen erreichbar
Port 8080 wird in podman-compose.yml und in der Quadlet-Einheit auf allen Interfaces veröffentlicht statt nur auf dem Loopback. Die Endpunkte sind ausschließlich lesend – über HTTP lässt sich weder handeln noch etwas konfigurieren –, aber sie sind nicht authentifiziert: Kontostand, offene Positionen und die Trade-Historie sieht jeder, der den Port erreicht. Das README nennt deshalb jetzt Reverse Proxy und Firewall als Absicherung, den einzeiligen Weg zurück zu rein lokalem Zugriff sowie server.enabled: false zum vollständigen Abschalten. Geprüft im laufenden Container über die Nicht-Loopback-Adresse des Hosts: /health, / , /status und /metrics antworten.
This commit is contained in:
@@ -35,7 +35,7 @@ podman-compose up -d
|
|||||||
das OCI-Format kennt die Anweisung nicht. Compose und Quadlet bringen ihren eigenen
|
das OCI-Format kennt die Anweisung nicht. Compose und Quadlet bringen ihren eigenen
|
||||||
Healthcheck mit, dort spielt das Format keine Rolle.
|
Healthcheck mit, dort spielt das Format keine Rolle.
|
||||||
|
|
||||||
Dashboard: <http://127.0.0.1:8080/> · Logs: `podman-compose logs -f`
|
Dashboard: `http://<host>:8080/` · Logs: `podman-compose logs -f`
|
||||||
|
|
||||||
Ohne Zugangsdaten läuft der Bot im Paper-Modus auf echten Live-Kursen und beginnt sofort zu
|
Ohne Zugangsdaten läuft der Bot im Paper-Modus auf echten Live-Kursen und beginnt sofort zu
|
||||||
lernen. Für den Start werden nur öffentliche Marktdaten gelesen — kein API-Schlüssel nötig.
|
lernen. Für den Start werden nur öffentliche Marktdaten gelesen — kein API-Schlüssel nötig.
|
||||||
@@ -61,14 +61,28 @@ podman-compose logs -f # verfolgen
|
|||||||
podman-compose down # stoppen
|
podman-compose down # stoppen
|
||||||
```
|
```
|
||||||
|
|
||||||
Der Port ist bewusst auf `127.0.0.1:8080` gebunden; das Dashboard ist damit nicht aus dem
|
Port 8080 wird auf allen Interfaces veröffentlicht — das Dashboard ist damit standardmäßig
|
||||||
Netz erreichbar. Für Zugriff von außen einen Reverse Proxy mit Authentifizierung davorsetzen.
|
von anderen Rechnern erreichbar.
|
||||||
|
|
||||||
> **Windows und macOS.** Dort läuft Podman in einer VM (`podman machine`). Auf Loopback
|
> **Sicherheit.** Alle Endpunkte sind lesend (`GET`, keine Steuerbefehle), aber **nicht
|
||||||
> veröffentlichte Ports bleiben in der VM und erreichen den Host nicht. Zum Testen entweder
|
> authentifiziert**. Wer den Port erreicht, sieht Kontostand, offene Positionen und die
|
||||||
> `podman machine ssh curl -s localhost:8080/health` verwenden oder in
|
> gesamte Trade-Historie. In offenen Netzen deshalb entweder einen Reverse Proxy mit
|
||||||
> `podman-compose.yml` auf `"8080:8080"` umstellen. Auf Linux — dem Ziel für den
|
> Authentifizierung davorsetzen, den Zugriff per Firewall auf bekannte Quell-IPs begrenzen
|
||||||
> Dauerbetrieb — funktioniert die Loopback-Bindung unmittelbar.
|
> oder auf rein lokalen Zugriff zurückstellen:
|
||||||
|
>
|
||||||
|
> | Datei | lokal statt offen |
|
||||||
|
> |------------------------------|----------------------------------|
|
||||||
|
> | `podman-compose.yml` | `- "127.0.0.1:8080:8080"` |
|
||||||
|
> | `deploy/trademind.container` | `PublishPort=127.0.0.1:8080:8080`|
|
||||||
|
>
|
||||||
|
> Ganz abschalten lässt sich der Server über `server.enabled: false` in der Konfiguration
|
||||||
|
> oder `trademind run --no-server`; der Container-Healthcheck braucht ihn allerdings.
|
||||||
|
|
||||||
|
> **Windows und macOS.** Dort läuft Podman in einer VM (`podman machine`), die
|
||||||
|
> veröffentlichte Ports nicht in jeder Konstellation an den Host weiterreicht. Ist das
|
||||||
|
> Dashboard nicht erreichbar, mit `podman machine ssh curl -s localhost:8080/health`
|
||||||
|
> gegenprüfen — antwortet das, liegt es an der VM-Weiterleitung, nicht am Bot. Auf Linux —
|
||||||
|
> dem Ziel für den Dauerbetrieb — greift die Veröffentlichung unmittelbar.
|
||||||
|
|
||||||
### Variante 2 — einzelner Container
|
### Variante 2 — einzelner Container
|
||||||
|
|
||||||
@@ -79,7 +93,7 @@ podman run -d --name trademind \
|
|||||||
--env-file config/trademind.env \
|
--env-file config/trademind.env \
|
||||||
-v ./config:/config:ro,Z \
|
-v ./config:/config:ro,Z \
|
||||||
-v trademind-data:/data:Z \
|
-v trademind-data:/data:Z \
|
||||||
-p 127.0.0.1:8080:8080 \
|
-p 8080:8080 \
|
||||||
--security-opt no-new-privileges \
|
--security-opt no-new-privileges \
|
||||||
trademind:latest
|
trademind:latest
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -35,8 +35,11 @@ Environment=TRADEMIND_CONFIG=/config/config.yaml
|
|||||||
|
|
||||||
Exec=run --config /config/config.yaml
|
Exec=run --config /config/config.yaml
|
||||||
|
|
||||||
# Dashboard/Metriken nur auf dem Loopback-Interface
|
# Dashboard und Metriken auf allen Interfaces, also von außen erreichbar.
|
||||||
PublishPort=127.0.0.1:8080:8080
|
# Die Endpunkte sind lesend, aber unauthentifiziert – sie zeigen Kontostand, Positionen
|
||||||
|
# und Trade-Historie. In offenen Netzen einen Reverse Proxy mit Authentifizierung
|
||||||
|
# davorsetzen oder hier auf 127.0.0.1:8080:8080 zurückstellen.
|
||||||
|
PublishPort=8080:8080
|
||||||
|
|
||||||
# Härtung
|
# Härtung
|
||||||
NoNewPrivileges=true
|
NoNewPrivileges=true
|
||||||
|
|||||||
+6
-1
@@ -20,7 +20,12 @@ services:
|
|||||||
command: ["run", "--config", "/config/config.yaml"]
|
command: ["run", "--config", "/config/config.yaml"]
|
||||||
|
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:8080:8080" # Dashboard nur lokal erreichbar
|
# Dashboard und Metriken sind von außen erreichbar (alle Interfaces).
|
||||||
|
# Die Endpunkte sind lesend, aber unauthentifiziert – sie zeigen Kontostand,
|
||||||
|
# Positionen und Trade-Historie. Nur in vertrauenswürdigen Netzen so betreiben,
|
||||||
|
# sonst einen Reverse Proxy mit Authentifizierung davorsetzen.
|
||||||
|
# Wieder auf rein lokalen Zugriff begrenzen: "127.0.0.1:8080:8080"
|
||||||
|
- "8080:8080"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./config:/config:ro,Z # Konfiguration schreibgeschützt hineinreichen
|
- ./config:/config:ro,Z # Konfiguration schreibgeschützt hineinreichen
|
||||||
|
|||||||
Reference in New Issue
Block a user