• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

celery-worker, beat, flower, docker-compose 질문

24.02.26 21:25 작성 조회수 149

1

안녕하세요 강사님 프로젝트 진행중입니다! ㅎㅎ

현재 장고없이 celery, beat, flower 를 로컬에서는 정상적으로 동작하는데 Docker 컨테이너로 해서 할 때 worker와 redis간의 포트문제가 발생하고 flower는 설치가 안되는 현상이있는데 장고없이 저 세가지를 컨테이너로 생성해서 정상적으로 동작할수 있는 docker-compose, dockerfile 작성 하는 팁이 따로 있을까요?

추가적으로 celery가 윈도우에서 멀티프로세싱이 안된다고 하는데 그것이 영향이 있어서 그런건가요?

답변 1

답변을 작성해보세요.

0

안녕하세요 chicmania님,

장고가 없이는 아마도 이 페이지를 보시면 될 듯 합니다.
https://docs.celeryq.dev/en/stable/userguide/configuration.html

일단 celeryconfig.py파일을 만드시고 브로커 주소를 세팅하시면 됩니다.

broker_url = 'redis://localhost:6379/0'

그리고 Celery 메인 드라이버 파일에 그 파일을 import해서 사용하시면 됩니다.

from celery import Celery

# Import the Celery configuration
import celeryconfig

# Create a Celery application instance
app = Celery('myapp')

# Load the configuration from the configuration module
app.config_from_object(celeryconfig)

마지막으로 윈도우에서도 여러개의 다커는 동시 동작 가능합니다.

chicmania님의 프로필

chicmania

질문자

2024.02.27

답변해주셔서 감사합니다! 일단 해보겠습니다! ㅎㅎ

docker 컨테이너를 바로 생성하지 않고 따로 실행하는 걸로 했을때 아래와 같은 실행화면까지 나오고 잠시후에 에러메세지가 뜨는데 여기서 더이상 방법을 못찾아서 헤매고 있습니다 ㅎㅎ 윈도우라서 그런건 아니겠죠?

[I 240227 01:42:46 command:177] Registered tasks:

['celery.accumulate',

'celery.backend_cleanup',

'celery.chain',

'celery.chord',

'celery.chord_unlock',

'celery.chunks',

'celery.group',

'celery.map',

'celery.starmap']

[E 240227 01:42:54 events:191] Failed to capture events: 'Error 11001 connecting to redis:6379. getaddrinfo failed.', trying again in 2 seconds.

[E 240227 01:42:54 base_events:1771] Future exception was never retrieved

 

따로 실행하는 이유는 처음에 docker-compose up --build -d 해서 생성할때 flower에서

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "flower": executable file not found in $PATH: unknown

에러가 발생해서 찾아보니 따로 실행하면 된다고 그래서 현재 따로 실행중에있습니다.

 

version: '3'

services:
  app:
    build: ./python_app
    volumes:
      - ./python_app:/usr/src/app
    ports:
      - "8000:8000" # 필요한 경우, 앱이 외부에 노출할 포트를 지정

  redis:
    image: "redis:alpine"

  celery_worker:
    build: ./python_app
    command: celery -A tasks worker --loglevel=info
    volumes:
      - ./python_app:/usr/src/app
    depends_on:
      - redis

  celery_beat:
    build: ./python_app
    command: celery -A tasks beat --loglevel=info
    volumes:
      - ./python_app:/usr/src/app
    depends_on:
      - redis

  flower:
    image: mher/flower
    command: flower --broker=redis://redis:6379/0 --port=5555
    ports:
      - "5555:5555"
    depends_on:
      - redis