# 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: