services: mysql: image: mysql:8.0 container_name: rezepte-mysql-dev restart: unless-stopped environment: - MYSQL_DATABASE=rezepte - MYSQL_USER=rezepte - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} ports: - "0.0.0.0:3307:3306" volumes: - mysql_dev_data:/var/lib/mysql # Initialize with data - ./Rezepte.sql:/docker-entrypoint-initdb.d/01-Rezepte.sql - ./ingredients.sql:/docker-entrypoint-initdb.d/02-ingredients.sql - ./Zubereitung.sql:/docker-entrypoint-initdb.d/03-Zubereitung.sql - ./rezepte_bilder.sql:/docker-entrypoint-initdb.d/04-rezepte_bilder.sql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] interval: 30s timeout: 10s retries: 5 networks: - rezepte-network backend: build: context: ./backend dockerfile: Dockerfile container_name: rezepte-backend-dev restart: unless-stopped environment: - NODE_ENV=development - DATABASE_URL=mysql://rezepte:${MYSQL_PASSWORD}@mysql:3306/rezepte - CORS_ORIGIN=${CORS_ORIGIN:-*} - PORT=3001 ports: - "0.0.0.0:3001:3001" volumes: - uploads_dev_data:/app/uploads # Mount existing uploads from host for development - ./upload:/app/uploads:ro # Development: Mount source code for hot reload - ./backend/src:/app/src:ro - ./backend/prisma:/app/prisma:ro depends_on: mysql: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/api/health"] interval: 30s timeout: 10s retries: 3 networks: - rezepte-network frontend: build: context: ./frontend dockerfile: Dockerfile container_name: rezepte-frontend-dev restart: unless-stopped ports: - "0.0.0.0:3000:80" depends_on: - backend healthcheck: test: ["CMD", "curl", "-f", "http://localhost/"] interval: 30s timeout: 10s retries: 3 networks: - rezepte-network phpmyadmin: image: phpmyadmin/phpmyadmin:latest container_name: rezepte-phpmyadmin-dev restart: unless-stopped environment: - PMA_HOST=mysql - PMA_PORT=3306 - PMA_USER=root - PMA_PASSWORD=${MYSQL_ROOT_PASSWORD} - UPLOAD_LIMIT=2G - MEMORY_LIMIT=2G ports: - "0.0.0.0:8080:80" depends_on: mysql: condition: service_healthy networks: - rezepte-network volumes: mysql_dev_data: driver: local uploads_dev_data: driver: local networks: rezepte-network: driver: bridge