services: db: image: mariadb:11.4 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - db_data:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 10 start_period: 30s redis: image: redis:7-alpine restart: unless-stopped command: redis-server --save 60 1 --loglevel warning volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 web: build: context: . dockerfile: Dockerfile.web restart: unless-stopped ports: - "8080:8000" environment: DATABASE_URL: mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db:3306/${DB_NAME} REDIS_URL: redis://redis:6379/0 SECRET_KEY: ${SECRET_KEY:-change-me-in-production} BASE_URL: ${BASE_URL:-https://evosync.ru} EVOTOR_APP_ID: ${EVOTOR_APP_ID:-} EVOTOR_WEBHOOK_SECRET: ${EVOTOR_WEBHOOK_SECRET:-} JIVOSITE_WIDGET_ID: ${JIVOSITE_WIDGET_ID:-} VK_DEFAULT_PHOTO_PATH: /app/default_product.png volumes: - ./5393364294319597854.png:/app/default_product.png:ro depends_on: db: condition: service_healthy redis: condition: service_healthy command: > sh -c "alembic upgrade head && uvicorn web.main:app --host 0.0.0.0 --port 8000" worker: build: context: . dockerfile: Dockerfile.web restart: unless-stopped environment: DATABASE_URL: mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db:3306/${DB_NAME} REDIS_URL: redis://redis:6379/0 SECRET_KEY: ${SECRET_KEY:-change-me-in-production} EVOTOR_APP_ID: ${EVOTOR_APP_ID:-} EVOTOR_WEBHOOK_SECRET: ${EVOTOR_WEBHOOK_SECRET:-} VK_DEFAULT_PHOTO_PATH: /app/default_product.png volumes: - ./5393364294319597854.png:/app/default_product.png:ro depends_on: redis: condition: service_healthy db: condition: service_healthy command: celery -A web.tasks.celery_app worker --loglevel=info --concurrency=2 --queues=default,sync,health,notifications beat: build: context: . dockerfile: Dockerfile.web restart: unless-stopped environment: DATABASE_URL: mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db:3306/${DB_NAME} REDIS_URL: redis://redis:6379/0 SECRET_KEY: ${SECRET_KEY:-change-me-in-production} depends_on: redis: condition: service_healthy db: condition: service_healthy command: celery -A web.tasks.celery_app beat --loglevel=info --scheduler celery.beat:PersistentScheduler --schedule /tmp/celerybeat-schedule flower: build: context: . dockerfile: Dockerfile.web restart: unless-stopped ports: - "5555:5555" environment: REDIS_URL: redis://redis:6379/0 FLOWER_BASIC_AUTH: ${FLOWER_USER:-admin}:${FLOWER_PASSWORD:-changeme} depends_on: - redis command: celery -A web.tasks.celery_app flower --port=5555 --basic_auth=${FLOWER_USER:-admin}:${FLOWER_PASSWORD:-changeme} volumes: db_data: redis_data: