# Fivemanage Lite — fuer den Betrieb, ueber Portainer aus diesem Repo. # # Abgeleitet aus den beiden Compose-Dateien im Projekt (fivemanage/lite) und # dem README. Deren docker-compose.yml ist fuer die ENTWICKLUNG: sie startet # Datenbank, ClickHouse, MinIO und Jaeger, aber nicht die Anwendung, und mit # Standardpasswoertern. Die docker-compose.test.yml zeigt dafuer, wie der # App-Container verdrahtet wird — und dass MySQL genuegt. # # Bewusst NICHT dabei: # # ClickHouse und Jaeger. Beides ist strukturiertes Logging und Tracing. Fuer # das Ablegen von Bildern braucht es sie nicht, und ClickHouse ist eine # schwere Abhaengigkeit. Nachruesten geht spaeter. # # Ein Weg nach aussen. Diese Datei allein ist von aussen NICHT erreichbar — # das ist Absicht, denn wie der Reverse Proxy die Dienste findet, # unterscheidet sich je Aufbau. Waehle eine Ergaenzung: # # docker-compose.hostports.yml Proxy erreicht die Dienste ueber den Host # (http://host.docker.internal:9000) # docker-compose.proxynet.yml Proxy haengt im selben Docker-Netz # (http://minio:9000) — der sauberere Weg # # In Portainer beide Pfade angeben, durch Komma getrennt: # docker-compose.yml,docker-compose.hostports.yml services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: fivemanage_lite POSTGRES_USER: lite POSTGRES_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen} volumes: - pgdata:/var/lib/postgresql/data networks: [internal] healthcheck: # Ohne das startet die App gegen eine Datenbank, die noch nicht # antwortet, und beendet sich — beim ersten Hochfahren jedes Mal. test: ["CMD-SHELL", "pg_isready -U lite -d fivemanage_lite"] interval: 10s timeout: 5s retries: 12 minio: image: minio/minio:latest restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: lite MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?bitte setzen} MINIO_SERVER_URL: ${PUBLIC_URL:?bitte setzen} volumes: - minio:/data networks: [internal] healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 10s timeout: 5s retries: 12 # Legt den Bucket an und stellt ihn auf oeffentlich lesbar. Laeuft einmal und # beendet sich. Ohne diesen Schritt schlaegt der erste Upload fehl, und die # Meldung nennt den Grund nicht. minio-init: image: minio/mc:latest depends_on: minio: condition: service_healthy environment: MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?bitte setzen} entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 lite $$MINIO_ROOT_PASSWORD && mc mb --ignore-existing local/media && mc anonymous set download local/media && echo 'Bucket media ist bereit' " networks: [internal] restart: "no" lite: # ghcr.io, NICHT Docker Hub: dort steht die Reihe bei 0.1.0-beta.16 # still, auf ghcr.io laeuft sie weiter. Die Test-Compose des Projekts # zeigt `fivemanage/lite:latest` — das ist Docker Hub und damit alt. image: ghcr.io/fivemanage/lite:0.1.0-beta.23 restart: unless-stopped depends_on: db: condition: service_healthy minio: condition: service_healthy environment: PORT: "8080" ENV: production # PostgreSQL, und zwar zwingend: beta.23 geht direkt in den # pgdriver — DB_DRIVER wird nicht ausgewertet. Eine MySQL-DSN endet in # "pgdriver: invalid scheme: lite", weil der Treiber sie als URI liest. # # Die docker-compose.test.yml des Projekts zeigt MySQL, benutzt dafuer # aber fivemanage/lite:latest von Docker Hub — und die Reihe steht dort # bei beta.16 still. Das README hat recht, die Testdatei ist alt. DSN: postgres://lite:${DB_PASSWORD:?bitte setzen}@db:5432/fivemanage_lite?sslmode=disable ADMIN_PASSWORD: ${ADMIN_PASSWORD:?bitte setzen} API_TOKEN_HMAC_SECRET: ${API_TOKEN_HMAC_SECRET:?bitte setzen} S3_PROVIDER: minio AWS_ENDPOINT: http://minio:9000 AWS_ACCESS_KEY_ID: lite AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:?bitte setzen} AWS_BUCKET: media AWS_REGION: auto networks: [internal] networks: internal: driver: bridge volumes: pgdata: minio: