services: mysql: image: mysql:8.0 container_name: qquiz_mysql environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: qquiz_db MYSQL_USER: qquiz MYSQL_PASSWORD: qquiz_password volumes: - mysql_data:/var/lib/mysql ports: - "3306:3306" command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "qquiz", "-pqquiz_password"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./backend dockerfile: Dockerfile container_name: qquiz_backend environment: - DATABASE_URL=mysql+aiomysql://qquiz:qquiz_password@mysql:3306/qquiz_db env_file: - .env volumes: - ./backend:/app - upload_files:/app/uploads ports: - "8000:8000" depends_on: mysql: condition: service_healthy command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload frontend: build: context: ./frontend dockerfile: Dockerfile container_name: qquiz_frontend volumes: - ./frontend:/app - /app/node_modules ports: - "3000:3000" environment: - VITE_API_URL=http://localhost:8000 depends_on: - backend command: npm start volumes: mysql_data: upload_files: