services: # --- Datenbank: PostgreSQL --- db: image: postgres:16-alpine container_name: archive-db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - ./data/postgres:/var/lib/postgresql/data ports: - "${PORT_DB}:5432" networks: - archive-net healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 # --- Object Storage: MinIO (S3 kompatibel) --- minio: image: minio/minio:latest container_name: archive-minio restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} volumes: - ./data/minio:/data ports: - "${PORT_MINIO_API}:9000" # API Port - "${PORT_MINIO_CONSOLE}:9001" # Web-Oberfläche networks: - archive-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 # --- Helper: Erstellt automatisch den Bucket --- create-buckets: image: minio/mc depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " /usr/bin/mc alias set myminio http://minio:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}; /usr/bin/mc mb myminio/${MINIO_DEFAULT_BUCKETS} --ignore-existing; /usr/bin/mc anonymous set private myminio/${MINIO_DEFAULT_BUCKETS}; exit 0; " networks: - archive-net # --- Backend: Spring Boot --- backend: build: context: ./backend dockerfile: Dockerfile container_name: archive-backend command: sleep infinity restart: unless-stopped volumes: - ./backend:/workspaces/backend:cached - ./import-data:/import # Mappt den lokalen Ordner "import-data" auf "/import" im Container depends_on: db: condition: service_healthy minio: condition: service_healthy environment: SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB} SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER} SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD} # MinIO Konfiguration für Spring Boot (S3) S3_ENDPOINT: http://minio:9000 S3_ACCESS_KEY: ${MINIO_ROOT_USER} S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD} S3_BUCKET_NAME: ${MINIO_DEFAULT_BUCKETS} S3_REGION: us-east-1 # MinIO Standard ports: - "${PORT_BACKEND}:8080" networks: - archive-net # --- Frontend: SvelteKit --- # Auch hier brauchen wir erst das Dockerfile im frontend Ordner. # frontend: # build: ./frontend # container_name: archive-frontend # restart: unless-stopped # depends_on: # - backend # environment: # # SvelteKit SSR braucht die interne Docker-URL zum Backend # API_BASE_URL: http://backend:8080 # # Der Browser braucht die öffentliche URL (falls Client-Side Fetching genutzt wird) # PUBLIC_API_BASE_URL: http://localhost:${PORT_BACKEND} # ports: # - "${PORT_FRONTEND}:3000" # networks: # - archive-net networks: archive-net: driver: bridge