35d5c64e5b
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.
63 lines
2.0 KiB
INI
63 lines
2.0 KiB
INI
# Podman-Quadlet-Einheit – der sauberste Weg, TradeMind dauerhaft laufen zu lassen.
|
||
#
|
||
# Installation (rootless, empfohlen):
|
||
# mkdir -p ~/.config/containers/systemd
|
||
# cp deploy/trademind.container ~/.config/containers/systemd/
|
||
# mkdir -p ~/.config/trademind && cp config/config.yaml config/trademind.env ~/.config/trademind/
|
||
# systemctl --user daemon-reload
|
||
# systemctl --user start trademind
|
||
# systemctl --user status trademind
|
||
# journalctl --user -u trademind -f
|
||
#
|
||
# Damit der Dienst auch ohne aktive Anmeldung läuft:
|
||
# loginctl enable-linger $USER
|
||
#
|
||
# Für den systemweiten Betrieb stattdessen nach /etc/containers/systemd/ kopieren
|
||
# und "systemctl" ohne --user verwenden.
|
||
|
||
[Unit]
|
||
Description=TradeMind – selbstlernender Krypto-Trading-Bot
|
||
Documentation=https://github.com/tlt-turbo/trademind
|
||
After=network-online.target
|
||
Wants=network-online.target
|
||
|
||
[Container]
|
||
Image=localhost/trademind:latest
|
||
ContainerName=trademind
|
||
AutoUpdate=local
|
||
|
||
# Konfiguration schreibgeschützt, Daten persistent
|
||
Volume=%h/.config/trademind:/config:ro,Z
|
||
Volume=trademind-data.volume:/data:Z
|
||
|
||
EnvironmentFile=%h/.config/trademind/trademind.env
|
||
Environment=TRADEMIND_CONFIG=/config/config.yaml
|
||
|
||
Exec=run --config /config/config.yaml
|
||
|
||
# Dashboard und Metriken auf allen Interfaces, also von außen erreichbar.
|
||
# 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
|
||
NoNewPrivileges=true
|
||
DropCapability=ALL
|
||
UserNS=keep-id
|
||
|
||
HealthCmd=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)"
|
||
HealthInterval=30s
|
||
HealthTimeout=5s
|
||
HealthRetries=3
|
||
HealthStartPeriod=45s
|
||
|
||
[Service]
|
||
Restart=always
|
||
RestartSec=15
|
||
# SIGTERM zuerst – die Engine beendet den laufenden Durchlauf und speichert das Modell.
|
||
TimeoutStopSec=90
|
||
|
||
[Install]
|
||
WantedBy=default.target
|