1

我是第一次使用 ECS。我已经对我的Django 2.2应用程序进行了 docker 化,并使用 ECS 和 uwsgi 在生产环境中运行 Django 应用程序。

在开发环境中,我不得不运行三个命令来运行 Django 服务器、celery 和 celery beat

python manage.py runserver
celery -A qcg worker -l info
celery beat -A qcg worker -l info

qcg我的申请在哪里。

我的Dockerfile具有以下uwsgi配置

EXPOSE 8000
ENV UWSGI_WSGI_FILE=qcg/wsgi.py

ENV UWSGI_HTTP=:8000 UWSGI_MASTER=1 UWSGI_HTTP_AUTO_CHUNKED=1 UWSGI_HTTP_KEEPALIVE=1 UWSGI_LAZY_APPS=1 UWSGI_WSGI_ENV_BEHAVIOR=holy

ENV UWSGI_WORKERS=2 UWSGI_THREADS=4

ENV UWSGI_STATIC_MAP="/static/=/static_cdn/static_root/" UWSGI_STATIC_EXPIRES_URI="/static/.*\.[a-f0-9]{12,}\.(css|js|png|jpg|jpeg|gif|ico|woff|ttf|otf|svg|scss|map|txt) 315360000"

USER ${APP_USER}:${APP_USER}

ENTRYPOINT ["/app/scripts/docker/entrypoint.sh"]

entrypoint.sh文件有

exec "$@"

我已经创建了 ECS 任务定义,并且在容器的命令输入中,我有

uwsgi --show-config

这将启动uwsgi服务器。

现在我在集群中运行 1 个 EC2 实例,并运行一个带有两个任务定义实例的服务。

我不知道如何在我的应用程序中运行 celery 任务和 celery beat。

我是否需要为运行 celery 和 celery-beat 创建单独的任务?

4

1 回答 1

0

是的,您需要为 celery beat 和 celery worker 运行单独的 ECS 任务(或单独的 ECS 服务)。Celery Beat 会将 Celery 任务发送给 Celery worker。

我为 Celery、Celery beat 和 Django 使用单独的 Dockerfile。

工人 Dockerfile 是这样的:

FROM python:3.8

ENV PYTHONUNBUFFERED 1
ADD requirements.txt /requirements.txt

RUN pip install -r /requirements.txt
ADD . /src
WORKDIR /src

CMD ["celery", "-A", "<appname>", "worker"]

和击败 Dockerfile:

FROM python:3.8

ENV PYTHONUNBUFFERED 1
ADD requirements.txt /requirements.txt

RUN pip install -r /requirements.txt
ADD . /src
WORKDIR /src

CMD ["celery", "-A", "<appname>", "beat"]
于 2021-10-15T20:43:01.417 回答