باسلام و درود، در این مطلب با روش نصب و کانفیگ celery روی سرور لینوکسی در محیط اسقرار یا همون production در خدمتتان هستم.
۱- پیش فرض ها برای نصب celery روی لینوکس (اوبونتو)
انتظار میره شما یه اپلیکیشن Djangoدارید که داخل اون از celeryهم استفاده کرده اید و کانفیگ های celeryاز جمله تنظیم Broker و غیره را انجام داده اید، و در این آموزش قصدمان فقط راه اندازی celery در محیط production هست (یا همون daemonize کردن celery)
در مستندات خود celery، سه روش برای Daemonize کردن celeryمعرفی شده است، این روش ها عبارت هستند از:
init-script, Init-script: celerybeat و using systemd. در این آموزش من روش systemd رو معرفی و آموزش داده ام 🙂
۲- ساخت userو Group برای celery
در ابتدا، اقدام به ساخت user و Group برای celeryمی کنیم به هر دو نیز نام celery را اختصاص می دهیم.
sudo groupadd celery sudo useradd -g celery celery
۳- ساخت فایل های راه اندازی (کانفیگ) سلری
ابتدا فولدر های pid و log رو می سازیم، ابتدا دستور زیر را بزنید تا فایل برای ویرایش باز شود:
sudo nano /etc/tmpfiles.d/celery.conf
حال دو خط زیر را به آن اضافه می کنید:
d /var/run/celery 0755 celery celery - d /var/log/celery 0755 celery celery -
حال باید ابتدا دو دایرکتوری فوق را بسازیم و سطح دسترسی کاربر celeryکه قبلتر ساخته بودیم را به این دو دایرکتوری درست کنیم:
sudo mkdir /var/log/celery sudo chown -R celery:celery /var/log/celery sudo chmod -R 755 /var/log/celery sudo mkdir /var/run/celery sudo chown -R celery:celery /var/run/celery sudo chmod -R 755 /var/run/celery
حال نوبت به ساخت فایل کانفیگ celery رسیده است:
sudo nano /etc/conf.d/celery
محتویات فایل به شرح زیر باید باشد (حواستان به سه متغیر CELERY_APP_NAME
, CELERYD_CHDIR
, و CELERY_BIN
باشد و آنها را با مقادیر درست جایگزین کنید):
# Name of nodes to start # here we have a single node CELERYD_NODES="w1" # or we could have three nodes: #CELERYD_NODES="w1 w2 w3" # Absolute or relative path to the 'celery' command: CELERY_BIN="/home/sadegh-khan/proj/.env/bin/celery" # App instance to use # comment out this line if you don't use an app CELERY_APP="proj" # Where to chdir at start. CELERYD_CHDIR="/home/sadegh-khan/proj/" # How to call manage.py CELERYD_MULTI="multi" # Extra command-line arguments to the worker CELERYD_OPTS="--time-limit=300 --concurrency=8" # - %n will be replaced with the first part of the nodename. # - %I will be replaced with the current child process index # and is important when using the prefork pool to avoid race conditions. CELERYD_PID_FILE="/var/run/celery/%n.pid" CELERYD_LOG_FILE="/var/log/celery/%n%I.log" CELERYD_LOG_LEVEL="INFO" # you may wish to add these options for Celery Beat CELERYBEAT_PID_FILE="/var/run/celery/beat.pid" CELERYBEAT_LOG_FILE="/var/log/celery/beat.log"
۴ – ساخت فایل systemd برای celery
خب رسیدیم و مرحله ساخت فایل systemd برای راه اندازی celeryدر محیط production ، برای این منظور ابتدا دستور زیر را بزنید:
/etc/systemd/system/celery.service
محتویات فایل فوق به صورت زیر باید نوشته شود:
[Unit] Description=Celery Service After=network.target [Service] Type=forking User=celery Group=celery EnvironmentFile=/etc/conf.d/celery WorkingDirectory=/home/sadegh-khan/proj 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.service با دستور زیر :
/etc/systemd/system/celerybeat.service:
محتویات به شرح زیر باشد:
[Unit] Description=Celery Beat Service After=network.target [Service] Type=simple User=celery Group=celery EnvironmentFile=/etc/conf.d/celery WorkingDirectory=/opt/celery ExecStart=/bin/sh -c '${CELERY_BIN} -A ${CELERY_APP} beat \ --pidfile=${CELERYBEAT_PID_FILE} \ --logfile=${CELERYBEAT_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL}' Restart=always [Install] WantedBy=multi-user.target
حال نوبت به اجرای سرویس ساخته شده رسیده است:
sudo systemctl daemon-reload sudo systemctl start celery sudo systemctl start celerybeat sudo systemctl enable celery sudo systemctl enable celerybeat
و در انتها بررسی وضعیت سرویس ساخته و اجرا شده:
sudo systemctl status celery
ارسال پاسخ