services: research: image: gitea.korbel.network/nico/researchchat:latest build: . container_name: research-chat restart: unless-stopped ports: # Links = Host-Port (von außen erreichbar), rechts = Container-Port. # Beispiel: auf dem Server über 8444 erreichbar → "8444:3000" - "3000:3000" env_file: .env environment: # Port im Container immer 3000 (auch wenn PORT in .env anders ist) PORT: "3000" volumes: # Persistente Daten (SQLite, generierte Secrets in .env) und Dashboards. # :Z nötig für SELinux-Systeme (Bazzite/Fedora Atomic), damit der Container # die Host-Dateien lesen kann. Docker ignoriert das Flag. - ./data:/app/data:Z - ./dashboards:/app/dashboards:Z - ./.env:/app/.env:Z healthcheck: test: ["CMD", "node", "-e", "fetch('http://localhost:3000/').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"] interval: 30s timeout: 10s retries: 5 start_period: 20s