인프런 커뮤니티 질문&답변

chicmania님의 프로필 이미지
chicmania

작성한 질문수

실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍

[Optional] 다커(Docker)를 사용한 Django 환경 만들기

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

작성

·

433

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
질문자

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

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

 

chicmania님의 프로필 이미지
chicmania

작성한 질문수

질문하기