Прежде всего хочу обратить внимание вот на это:
Выбрал вариант с celeryd
Если вы "выбирали" между celeryd или celerybeat, то тут выбор бессмысленен: celeryd - демон для выполнения заданий, celerybeat - следит за расписанием заданий, отправляя их в заданное время на выполнение. Так что, если у вас есть надобность выполнять задания по расписанию, настраивать надо оба демона.
Теперь немного ответов на вопросы.
CELERY_APP - что сюда вписывать?
Это экземпляр класса celery.Celery, вот путь до него и надо прописать, в формате
package[.subpackages].module:variable
. Например, у меня есть файл project/celery.py, в котором создаётся экземпляр таким образом:
from celery import Celery
app = Celery('project')
И я впишу в CELERY_APP значение
project.celery:app
У вас наверняка подобный код тоже есть в проекте, если вы делали по документации
И как создать celery-пользователя? Погуглил, но не понял ответа.
Я для всего проекта использую одного пользователя, того, под которым django выполняется (у меня webapp)
И почему CELERYD_CHDIR="/opt/Myproject/"? Так и не понял, зачем нужен редирект куда-то (а я так понял, это адрес, куда переместиться во время работы). Зачем это нужно и помешает ли сохранять получаемые данные (сохранять изображения в папках) по относительным адресам в django-проекте?
Эту опцию не использую, вместо неё у меня используется WorkingDirectory на уровне systemd, но смысл абсолютно тот же.
Это не редирект, это просто указание рабочей папки, относительно которой будет запускаться ваш демон. При правильной настройке работа проекта в режиме celery-воркера ничем не должна отличаться от работы проекта в веб-режиме. На уровне кода никаких ветвлений на тему "если я демон - то делай так, а если нет - делай эдак" быть не должно (и я даже не знаю, как их вообще делать).
CELERY_BIN="/usr/local/bin/celery"
Прошел по пути, никакого celery там не увидел.
Ну блин, куда вы установите celery, там его исполняемый файл и будет. Например, у меня все python-зависимости, куда входит и celery, установлены в virtual env'е, и путь до него такой:
/home/webapp/Env/project-backend-3.5/bin/celery
2. Что делать после настройки? В документации указано что-то про django-настройки и пояснено значение переменных, прилагается несколько кусков кода, но даже с переводчиком не могу понять их назначения.
Что делать после того, как я сделаю оба файла celeryd пригодными для работы?
После настройки - запускать, тестировать, отлаживать. Всё как обычно.
CELERYD_SU_ARGS="-l"
Что это? Зачем это?
Не знаю, и видимо, не нужно. Там даже написано, что не рекомендуется.
Вот мои конфиги (для systemd), делал на основе конфигов из официальной репы celery.
Файл сервиса celeryd (/etc/systemd/system/celery.service):
[Unit]
Description=Celery Service
After=network.target redis.target
[Service]
Type=forking
User=webapp
Group=webapp
EnvironmentFile=-/etc/systemd/celery.conf
WorkingDirectory=/home/webapp/project_dir/project/src
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p ${CELERYD_STATE_DIR}
ExecStartPre=/bin/chown -R ${CELERYD_USER}:${CELERYD_GROUP} ${CELERYD_STATE_DIR}
ExecStart=/bin/sh -c '${CELERY_BIN} multi start \
${CELERYD_NODES} \
-A ${CELERY_APP} \
--pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} \
--loglevel=${CELERYD_LOG_LEVEL} \
${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait \
${CELERYD_NODES} \
--pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart \
${CELERYD_NODES} \
-A ${CELERY_APP} \
--pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} \
--loglevel=${CELERYD_LOG_LEVEL} \
${CELERYD_OPTS}'
[Install]
WantedBy=multi-user.target
Файл сервиса celerybeat (/etc/systemd/system/celerybeat.service):
[Unit]
Description=CeleryBeat Service
After=network.target redis.target rabbitmq.target
[Service]
Type=simple
User=webapp
Group=webapp
EnvironmentFile=-/etc/systemd/celery.conf
WorkingDirectory=/home/webapp/project_dir/project/src
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p ${CELERYBEAT_STATE_DIR}
ExecStartPre=/bin/chown -R ${CELERYD_USER}:${CELERYD_GROUP} ${CELERYBEAT_STATE_DIR}
ExecStartPre=/bin/rm ${CELERYBEAT_SCHEDULE}
ExecStart=/bin/bash -c '${CELERY_BIN} beat \
-A ${CELERY_APP} \
--workdir=${CELERYBEAT_WORKDIR} \
--pidfile=${CELERYBEAT_PID_FILE} \
--logfile=${CELERYBEAT_LOG_FILE} \
--loglevel=${CELERYBEAT_LOG_LEVEL} \
--schedule=${CELERYBEAT_SCHEDULE}'
ExecStop=/bin/systemctl kill celerybeat.service
[Install]
WantedBy=multi-user.target
Файл конфигурации сервисов celeryd и celerybeat (/etc/systemd/celery.conf):
# See
# http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#available-options
# Common Celery Settings
CELERY_BIN="/home/webapp/Env/project-backend-3.5/bin/celery"
CELERYD_USER="webapp"
CELERYD_GROUP="webapp"
CELERY_APP="project.celery:app"
# Common env settings
DJANGO_SETTINGS_MODULE=settings.production
LC_ALL=ru_RU.UTF-8
LC_LANG="ru_RU.UTF-8"
LANG=ru_RU.UTF-8
# Worker settings
CELERYD_NODES="w1 w2 w3 w4 w5 w6"
CELERYD_OPTS="-Q:w1 default --autoscale:w1=8,4 \
-Q:w2 queue2 --autoscale:w2=6,2 \
-Q:w3 queue3 --autoscale:w3=8,2 \
....................
-Q:w6 queue6 --autoscale:w6=6,2 "
CELERYD_MULTI="multi"
CELERYD_STATE_DIR="/var/run/celery"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n.log"
CELERYD_LOG_LEVEL="INFO"
# Beat settings
CELERYBEAT_STATE_DIR="/var/run/celerybeat"
CELERYBEAT_PID_FILE="/var/run/celerybeat/beat.pid"
CELERYBEAT_LOG_FILE="/var/log/celery/beat.log"
CELERYBEAT_LOG_LEVEL="INFO"
CELERYBEAT_SCHEDULE="/var/run/celerybeat/schedule"
CELERYBEAT_WORKDIR="/home/webapp/project_dir/project/src"