services: # ---------------------------------------------------------- # Redis broker & backend (NO SNAPSHOTS, NO AOF) # ---------------------------------------------------------- redis: image: redis:7 container_name: bookscraper_redis command: [ "redis-server", "--save", "", "--appendonly", "no", "--stop-writes-on-bgsave-error", "no", ] ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 2s timeout: 2s retries: 20 restart: "no" # ---------------------------------------------------------- # Controller Worker # ---------------------------------------------------------- worker_controller: build: context: . dockerfile: docker/Dockerfile.scraper container_name: worker_controller command: celery -A celery_app worker -Q controller -n controller@%h -l INFO depends_on: redis: condition: service_healthy env_file: - .env environment: - PYTHONUNBUFFERED=1 volumes: - .:/app - /Users/peter/mnt/asustor/Sync/bookscraper/books:/Users/peter/mnt/asustor/Sync/bookscraper/books - /Users/peter/mnt/asustor/Sync/bookscraper/db:/Users/peter/mnt/asustor/Sync/bookscraper/db restart: "no" # ---------------------------------------------------------- # Web GUI # ---------------------------------------------------------- web: build: context: . dockerfile: docker/Dockerfile.web container_name: bookscraper_web volumes: - .:/app - /Users/peter/mnt/asustor/Sync/bookscraper/books:/Users/peter/mnt/asustor/Sync/bookscraper/books - /Users/peter/mnt/asustor/Sync/bookscraper/db:/Users/peter/mnt/asustor/Sync/bookscraper/db depends_on: redis: condition: service_healthy ports: - "5011:5000" environment: - REDIS_BROKER=redis://redis:6379/0 - REDIS_BACKEND=redis://redis:6379/1 env_file: - .env restart: "no" # ---------------------------------------------------------- # Download Worker # ---------------------------------------------------------- worker_download: build: context: . dockerfile: docker/Dockerfile.scraper container_name: worker_download volumes: - .:/app - /Users/peter/mnt/asustor/Sync/bookscraper/books:/Users/peter/mnt/asustor/Sync/bookscraper/books - /Users/peter/mnt/asustor/Sync/bookscraper/db:/Users/peter/mnt/asustor/Sync/bookscraper/db depends_on: redis: condition: service_healthy env_file: - .env command: celery -A celery_app worker -Q download -n download@%h -l INFO restart: "no" # ---------------------------------------------------------- # Parse Worker # ---------------------------------------------------------- worker_parse: build: context: . dockerfile: docker/Dockerfile.scraper container_name: worker_parse volumes: - .:/app - /Users/peter/mnt/asustor/Sync/bookscraper/books:/Users/peter/mnt/asustor/Sync/bookscraper/books - /Users/peter/mnt/asustor/Sync/bookscraper/db:/Users/peter/mnt/asustor/Sync/bookscraper/db depends_on: redis: condition: service_healthy env_file: - .env command: celery -A celery_app worker -Q parse -n parse@%h -l INFO restart: "no" # ---------------------------------------------------------- # Save Worker # ---------------------------------------------------------- worker_save: build: context: . dockerfile: docker/Dockerfile.scraper container_name: worker_save volumes: - .:/app - /Users/peter/mnt/asustor/Sync/bookscraper/books:/Users/peter/mnt/asustor/Sync/bookscraper/books - /Users/peter/mnt/asustor/Sync/bookscraper/db:/Users/peter/mnt/asustor/Sync/bookscraper/db depends_on: redis: condition: service_healthy env_file: - .env command: celery -A celery_app worker -Q save -n save@%h -l INFO restart: "no" # ---------------------------------------------------------- # Scraping Worker # ---------------------------------------------------------- worker_scraping: build: context: . dockerfile: docker/Dockerfile.scraper container_name: worker_scraping volumes: - .:/app - /Users/peter/mnt/asustor/Sync/bookscraper/books:/Users/peter/mnt/asustor/Sync/bookscraper/books - /Users/peter/mnt/asustor/Sync/bookscraper/db:/Users/peter/mnt/asustor/Sync/bookscraper/db depends_on: redis: condition: service_healthy env_file: - .env command: celery -A celery_app worker -Q scraping -n scraping@%h -l INFO restart: "no" # ---------------------------------------------------------- # M4B Worker (Finalization) # ---------------------------------------------------------- worker_m4b: build: context: . dockerfile: docker/Dockerfile.m4b container_name: worker_m4b command: celery -A celery_app worker -Q m4b -n m4b@%h -l INFO depends_on: redis: condition: service_healthy env_file: - .env volumes: - .:/app - /Users/peter/mnt/asustor/Sync/bookscraper/books:/Users/peter/mnt/asustor/Sync/bookscraper/books - /Users/peter/mnt/asustor/Sync/bookscraper/db:/Users/peter/mnt/asustor/Sync/bookscraper/db restart: "no"