x-app-image: &app-image image: ${FLOWER_IMAGE:-flower-app:latest} build: context: . dockerfile: Dockerfile.prod x-app-runtime: &app-runtime env_file: - ${APP_ENV_FILE:-.env} environment: DJANGO_SETTINGS_MODULE: flower.settings PYTHONPATH: /app CACHE_HOST: redis CACHE_PORT: 6379 CELERY_RESULT_HOST: redis CELERY_RESULT_PORT: 6379 CELERY_BROKER_HOST: rabbitmq CELERY_BROKER_PORT: 5672 restart: unless-stopped services: redis: image: redis:7-alpine container_name: flower_redis command: - redis-server - --appendonly - yes volumes: - redis_data:/data restart: unless-stopped rabbitmq: image: rabbitmq:3-management-alpine container_name: flower_rabbitmq environment: RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-guest} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-guest} volumes: - rabbitmq_data:/var/lib/rabbitmq restart: unless-stopped web: <<: [*app-image, *app-runtime] container_name: flower_web command: - python - -m - uvicorn - flower.asgi:application - --host - 0.0.0.0 - --port - "8000" - --workers - "${UVICORN_WORKERS:-1}" ports: - "${WEB_PORT:-8100}:8000" depends_on: - redis - rabbitmq celery_worker: <<: [*app-image, *app-runtime] container_name: celery_worker command: - python - -m - celery - -A - flower - worker - -l - info - --concurrency=${CELERY_CONCURRENCY:-2} - --pool=solo volumes: - ${BACKUP_DIR:-./data-bak}:/app/data-bak depends_on: - redis - rabbitmq volumes: redis_data: rabbitmq_data: