services: db: image: docker.iranserver.com/mysql:8 container_name: ai-db restart: always environment: MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - ai_mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$${MYSQL_ROOT_PASSWORD}"] interval: 10s timeout: 5s retries: 5 networks: - ai-network redis: image: docker.iranserver.com/redis container_name: ai-redis restart: always networks: - ai-network qdrant: image: docker.iranserver.com/qdrant/qdrant:latest container_name: ai-qdrant restart: always volumes: - qdrant_data:/qdrant/storage networks: - ai-network web: build: context: . dockerfile: Dockerfile container_name: ai-web restart: always command: gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 4 --threads 2 volumes: - ./logs:/app/logs - ./static:/app/static - ./media:/app/media ports: - "8020:8000" env_file: - .env environment: DB_HOST: db CELERY_BROKER_URL: redis://redis:6379/0 CELERY_RESULT_BACKEND: redis://redis:6379/0 QDRANT_HOST: qdrant QDRANT_PORT: 6333 DEBUG: "False" depends_on: db: condition: service_healthy redis: condition: service_started networks: - ai-network celery: build: context: . container_name: ai-celery restart: always command: celery -A config worker -l info --concurrency=4 healthcheck: test: ["CMD-SHELL", "celery -A config inspect ping --timeout 10 || exit 1"] interval: 30s timeout: 15s retries: 5 start_period: 30s volumes: - ./logs:/app/logs - ./media:/app/media env_file: - .env environment: DB_HOST: db CELERY_BROKER_URL: redis://redis:6379/0 CELERY_RESULT_BACKEND: redis://redis:6379/0 SKIP_MIGRATE: "1" DEBUG: "False" depends_on: db: condition: service_healthy redis: condition: service_started networks: - ai-network volumes: ai_mysql_data: qdrant_data: networks: ai-network: driver: bridge #