version: '3.8' services: mysql: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: ai_assistant MYSQL_USER: admin MYSQL_PASSWORD: admin123 ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./docker/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql command: --default-authentication-plugin=mysql_native_password restart: unless-stopped healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 20s retries: 10 redis: image: redis:7-alpine ports: - "6379:6379" restart: unless-stopped backend: build: ./backend ports: - "8000:8000" depends_on: mysql: condition: service_healthy redis: condition: service_started volumes: - ./backend:/app - uploads_volume:/app/uploads - temp_volume:/app/temp environment: - DATABASE_URL=mysql://admin:admin123@mysql:3306/ai_assistant - REDIS_URL=redis://redis:6379 restart: unless-stopped celery_worker: build: ./backend command: celery -A app.celery_app worker --loglevel=info -Q task_queue depends_on: - mysql - redis volumes: - ./backend:/app - uploads_volume:/app/uploads - temp_volume:/app/temp restart: unless-stopped celery_beat: build: ./backend command: celery -A app.celery_app beat --loglevel=info depends_on: - mysql - redis volumes: - ./backend:/app restart: unless-stopped flower: build: ./backend command: celery -A app.celery_app flower --port=5555 ports: - "5555:5555" depends_on: - celery_worker restart: unless-stopped volumes: mysql_data: uploads_volume: temp_volume: