Files
Trademind/podman-compose.yml
T
Tobias Zimmermann 35d5c64e5b 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.
2026-08-22 11:14:40 +02:00

56 lines
1.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Start: podman-compose up -d Logs: podman-compose logs -f
# Stop: podman-compose down Build: podman-compose build
#
# Die Datei funktioniert auch mit docker-compose; ":Z" ist eine SELinux-Kennzeichnung
# und wird auf Systemen ohne SELinux ignoriert.
services:
trademind:
build:
context: .
dockerfile: Containerfile
image: localhost/trademind:latest
container_name: trademind
restart: unless-stopped
# Geheimnisse und Schalter Vorlage: config/trademind.env.example
env_file:
- ./config/trademind.env
command: ["run", "--config", "/config/config.yaml"]
ports:
# 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:
- ./config:/config:ro,Z # Konfiguration schreibgeschützt hineinreichen
- trademind-data:/data:Z # SQLite-Datenbank und trainiertes Modell
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8080/health', timeout=4).status==200 else 1)"]
interval: 30s
timeout: 5s
retries: 3
start_period: 45s
# Absicherung: keine zusätzlichen Rechte, Dateisystem nur dort schreibbar, wo nötig.
security_opt:
- no-new-privileges:true
read_only: false
tmpfs:
- /tmp:size=64m
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
volumes:
trademind-data: