繁体   English   中英

设置 docker-compose.yml 以运行 celery worker 和 celery beat 以 redis 作为代理的 django 项目

[英]Setting up docker-compose.yml to run celery worker and celery beat for a django project with redis as broker

我已经使用 django cookiecutter 设置了 django 项目。 项目脚手架非常好。 我还选择将 docker 与它一起使用。 现在我正在努力让 celery v4.0.x 在整个设置中工作。

这是我docker-compose.yml

version: '2'

volumes:
  postgres_data_dev: {}
  postgres_backup_dev: {}

services:
  postgres:
    build: ./compose/postgres
    volumes:
      - postgres_data_dev:/var/lib/postgresql/data
      - postgres_backup_dev:/backups
    environment:
      - POSTGRES_USER=application


  django:
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    depends_on:
      - postgres
    environment:
      - POSTGRES_USER=application
      - USE_DOCKER=yes
    volumes:
      - .:/app
      - /tmp/
    links:
      - postgres
      - redis
    expose:
      - "8000"
    env_file:
      - ./dev.env
    restart:
      - "on-failure"


  nginx:
    build: 
      context: .
      dockerfile: ./compose/nginx/development/Dockerfile
    depends_on:
      - django
    ports:
      - "0.0.0.0:80:80"
    links:
      - django
    volumes_from:
      - django


  redis:
    image: redis:latest
    hostname: redis


  celeryworker:
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    env_file: ./dev.env
    depends_on:
      - postgres
      - redis
    command: celery -A application.taskapp worker -l INFO
    restart: "on-failure"


  celerybeat:
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    env_file: ./dev.env
    depends_on:
      - postgres
      - redis
    command: celery -A application.taskapp beat -l INFO

老实说,我觉得 celerybeat/celeryworker 服务的配置似乎存在一些小问题。 如果有人能指出来就好了。

更新:

当我执行命令来运行容器时,我收到一条错误消息,说找不到应用程序

更新

这是新的撰写文件,它解决了我撰写中的一些错误。 在让这一切正常工作的过程中,我还遇到了有人提到服务排序也很重要的线程。 所以在新版本中,django被放在了第一位。

version: '2'

volumes:
  postgres_data_dev: {}
  postgres_backup_dev: {}

services:

  django: &django
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    depends_on:
      - postgres
    volumes:
      - .:/app
      - /tmp/
    links:
      - postgres
      - redis
    environment:
      - POSTGRES_USER=application
      - USE_DOCKER=yes
    expose:
      - "8000"
    env_file:
      - ./dev.env


  postgres:
    build: ./compose/postgres
    volumes:
      - postgres_data_dev:/var/lib/postgresql/data
      - postgres_backup_dev:/backups
    environment:
      - POSTGRES_USER=application
    ports:
      - "5432:5432"


  redis:
    image: redis:latest
    hostname: redis
    ports:
      - "0.0.0.0:6379:6379"
    env_file:
      - ./dev.env


  nginx:
    build:
      context: .
      dockerfile: ./compose/nginx/development/Dockerfile
    depends_on:
      - django
    ports:
      - "0.0.0.0:80:80"
    links:
      - django
    volumes_from:
      - django


  celeryworker:
    <<: *django
    depends_on:
      - redis
      - postgres
    command: "celery -A application.taskapp worker --loglevel INFO --uid taskmaster"

我正在使用相同的技术堆栈。 这对我来说很好用。 docker-compose.yml

redis:
    image: redis
    container_name: redis
    command: ["redis-server", "--port", "${REDIS_PORT}", "--appendonly", "yes","--maxmemory", "1gb", "--maxmemory-policy", "allkeys-lru"]
    ports:
        - "${REDIS_PORT}:${REDIS_PORT}"
    volumes:
        - .:/redis.conf
    networks:
        - pipeline-net

celery-worker:
    build:
    context: ./app
    container_name: celery-worker
    entrypoint: celery
    command: -A celery_app.celery worker --loglevel=info
    volumes:
    - .:/var/www/app/worker
    links:
    - redis
    depends_on:
    - redis
    networks:
    - pipeline-net

celery-beat:
    build:
    context: ./app
    container_name: celery-beat
    entrypoint: celery
    command: -A celery_app.celery beat --loglevel=info
    volumes:
    - .:/var/www/app/beat
    links:
    - celery-worker
    - redis
    depends_on:
    - celery-worker
    - redis
    networks:
    - pipeline-net

flower:
    image: mher/flower
    container_name: flower
    environment:
    - CELERY_BROKER_URL=redis://redis:6379
    - FLOWER_PORT=8888
    ports:
    - 8888:8888
    links:
    - redis
    - celery-worker
    - celery-beat
    depends_on:
    - redis
    - celery-worker
    - celery-beat
    networks:
    - pipeline-net

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM