services: # MySQL Database mysql: image: mysql:8.0 container_name: rezepte-mysql environment: MYSQL_ROOT_PASSWORD: SFluorit MYSQL_DATABASE: rezepte MYSQL_USER: rxf MYSQL_PASSWORD: Fluorit ports: - "3307:3306" volumes: - mysql_data:/var/lib/mysql - ./sql-init:/docker-entrypoint-initdb.d networks: - rezepte-network restart: unless-stopped healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 20s retries: 10 # Backend API backend: build: context: ./backend dockerfile: Dockerfile container_name: rezepte-backend environment: NODE_ENV: production PORT: 3001 DATABASE_URL: mysql://rxf:Fluorit@mysql:3306/rezepte UPLOAD_PATH: /app/uploads MAX_FILE_SIZE: 5242880 CORS_ORIGIN: http://localhost:3000,http://esprimo:3000 ports: - "3001:3001" volumes: - uploads_data:/app/uploads - ./uploads:/app/legacy-uploads:ro # Mount existing uploads as read-only networks: - rezepte-network depends_on: mysql: condition: service_healthy restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/api/health"] interval: 30s timeout: 10s retries: 3 # Frontend Application frontend: build: context: ./frontend dockerfile: Dockerfile args: VITE_API_URL: http://localhost:3001/api container_name: rezepte-frontend ports: - "3000:80" networks: - rezepte-network depends_on: - backend restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80"] interval: 30s timeout: 10s retries: 3 # Legacy PHP Application (optional) php-app: build: . container_name: rezepte-php-legacy ports: - "8082:80" volumes: - .:/var/www/html depends_on: - mysql networks: - rezepte-network environment: DB_HOST: mysql DB_NAME: rezepte DB_USER: rxf DB_PASS: Fluorit profiles: - legacy # phpMyAdmin phpmyadmin: image: phpmyadmin:latest container_name: rezepte-phpmyadmin ports: - "8083:80" environment: PMA_HOST: mysql PMA_USER: rxf PMA_PASSWORD: Fluorit MYSQL_ROOT_PASSWORD: SFluorit depends_on: - mysql networks: - rezepte-network profiles: - admin # Networks networks: rezepte-network: driver: bridge # Volumes for persistent data volumes: mysql_data: driver: local uploads_data: driver: local