- backend/workspaces/backend/ → backend/ - backend/workspaces/frontend/ → frontend/ - backend/.devcontainer/ + .vscode/ → repo root (where VS Code expects them) - loose scripts/SQL files → scripts/ - replace nested git repo with single repo at project root - update docker-compose.yml build context and devcontainer.json path - add root .gitignore Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
113 lines
3.3 KiB
YAML
113 lines
3.3 KiB
YAML
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
|