feat: auto-start Spring Boot backend via docker-compose
Replace the devcontainer (sleep infinity + VS Code image) with a proper dev setup: - Dockerfile: eclipse-temurin:21-jdk-alpine running ./mvnw spring-boot:run - Source mounted at /app, Maven deps cached in named volume maven_cache - Healthcheck on /actuator/health so frontend waits until backend is ready - frontend depends_on backend: service_healthy (was service_started) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
# Wir nutzen Java 21 (LTS), da Spring Boot 3 das empfiehlt
|
FROM eclipse-temurin:21-jdk-alpine
|
||||||
FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye
|
|
||||||
|
|
||||||
# Optional: Zusätzliche OS-Pakete installieren
|
WORKDIR /app
|
||||||
# RUN apt-get update && apt-get install -y <package-name>
|
|
||||||
|
|
||||||
# Port für Spring Boot
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
|
# Source code and mvnw are mounted via docker-compose volume at runtime.
|
||||||
|
# Maven dependencies are cached in a named volume (~/.m2).
|
||||||
|
CMD ["./mvnw", "spring-boot:run"]
|
||||||
|
|||||||
@@ -64,11 +64,11 @@ services:
|
|||||||
context: ./backend
|
context: ./backend
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
container_name: archive-backend
|
container_name: archive-backend
|
||||||
command: sleep infinity
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- .:/workspaces/familienarchiv:cached
|
- ./backend:/app
|
||||||
- ./import:/import # Mappt den lokalen Ordner "import-data" auf "/import" im Container
|
- ./import:/import
|
||||||
|
- maven_cache:/root/.m2
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
@@ -78,16 +78,21 @@ services:
|
|||||||
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB}
|
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB}
|
||||||
SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER}
|
SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER}
|
||||||
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD}
|
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
# MinIO Konfiguration für Spring Boot (S3)
|
|
||||||
S3_ENDPOINT: http://minio:9000
|
S3_ENDPOINT: http://minio:9000
|
||||||
S3_ACCESS_KEY: ${MINIO_ROOT_USER}
|
S3_ACCESS_KEY: ${MINIO_ROOT_USER}
|
||||||
S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD}
|
S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD}
|
||||||
S3_BUCKET_NAME: ${MINIO_DEFAULT_BUCKETS}
|
S3_BUCKET_NAME: ${MINIO_DEFAULT_BUCKETS}
|
||||||
S3_REGION: us-east-1 # MinIO Standard
|
S3_REGION: us-east-1
|
||||||
ports:
|
ports:
|
||||||
- "${PORT_BACKEND}:8080"
|
- "${PORT_BACKEND}:8080"
|
||||||
networks:
|
networks:
|
||||||
- archive-net
|
- archive-net
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "wget -qO- http://localhost:8080/actuator/health | grep -q UP || exit 1"]
|
||||||
|
interval: 15s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
start_period: 60s
|
||||||
|
|
||||||
# --- Frontend: SvelteKit (Dev Server) ---
|
# --- Frontend: SvelteKit (Dev Server) ---
|
||||||
frontend:
|
frontend:
|
||||||
@@ -102,7 +107,7 @@ services:
|
|||||||
minio:
|
minio:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
backend:
|
backend:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
volumes:
|
volumes:
|
||||||
- ./frontend:/app
|
- ./frontend:/app
|
||||||
# Keep container's node_modules separate from host to avoid OS binary conflicts
|
# Keep container's node_modules separate from host to avoid OS binary conflicts
|
||||||
@@ -123,3 +128,4 @@ networks:
|
|||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
frontend_node_modules:
|
frontend_node_modules:
|
||||||
|
maven_cache:
|
||||||
|
|||||||
Reference in New Issue
Block a user