Zoeken…


Selderijconfiguratie

SELDERIJ

  1. Installatie - pip install django-celery

  2. Toevoegen

  3. Basis projectstructuur.

     - src/
       - bin/celery_worker_start # will be explained later on
       - logs/celery_worker.log
       - stack/__init __.py
       - stack/celery.py
       - stack/settings.py
       - stack/urls.py
       - manage.py
    
  4. Voeg het bestand celery.py aan je stack/stack/ map.

     from __future__ import absolute_import
     import os
     from celery import Celery
     os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'stack.settings')
     from django.conf import settings  # noqa
     app = Celery('stack')
     app.config_from_object('django.conf:settings')
     app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
  5. aan je stack/stack/__init__.py toevoegen, voeg de volgende code toe:

     from __future__ import absolute_import
     from .celery import app as celery_app  # noqa
    
  6. Maak een taak en markeer deze bijvoorbeeld als @shared_task()

     @shared_task()
     def add(x, y):
         print("x*y={}".format(x*y))
    
  7. De selderij "met de hand" uitvoeren:

    celery -A stack worker -l info als je ook wilt toevoegen

Running Supervisor

  1. Maak een script om selderij te starten. Plaats uw script in uw app. Bijvoorbeeld: stack/bin/celery_worker_start

     #!/bin/bash
     
     NAME="StackOverflow Project - celery_worker_start"
     
     PROJECT_DIR=/home/stackoverflow/apps/proj/proj/
     ENV_DIR=/home/stackoverflow/apps/proj/env/
     
     echo "Starting $NAME as `whoami`"
     
     # Activate the virtual environment
     cd "${PROJECT_DIR}"
     
     if [ -d "${ENV_DIR}" ]
     then
         . "${ENV_DIR}bin/activate"
     fi
     
     celery -A stack --loglevel='INFO'
    
  2. Voeg uitvoeringsrechten toe aan uw nieuw gemaakte script:

    chmod u+x bin/celery_worker_start

  3. Install supervisor (sla deze test over als supervisor al is geïnstalleerd)

    apt-get install supervisor

  4. Voeg een configuratiebestand toe voor je supervisor om je bleekselderij te starten. Plaats het in /etc/supervisor/conf.d/stack_supervisor.conf

     [program:stack-celery-worker]
     command = /home/stackoverflow/apps/stack/src/bin/celery_worker_start
     user = polsha
     stdout_logfile = /home/stackoverflow/apps/stack/src/logs/celery_worker.log
     redirect_stderr = true
     environment = LANG = en_US.UTF-8,LC_ALL = en_US.UTF-8
     numprocs = 1
     autostart = true
     autorestart = true
     startsecs = 10
     stopwaitsecs = 600
     priority = 998
    
  5. Supervisor opnieuw lezen en bijwerken

     sudo supervisorctl reread
         stack-celery-worker: available
     sudo supervisorctl update
         stack-celery-worker: added process group
    
  6. Basiscommando's

     sudo supervisorctl status stack-celery-worker                       
         stack-celery-worker      RUNNING    pid 18020, uptime 0:00:50
     sudo supervisorctl stop stack-celery-worker  
         stack-celery-worker: stopped
     sudo supervisorctl start stack-celery-worker                        
         stack-celery-worker: started
     sudo supervisorctl restart stack-celery-worker 
         stack-celery-worker: stopped
         stack-celery-worker: started
    

Selderij + RabbitMQ met Supervisor

Selderij heeft een makelaar nodig om berichten door te geven. We gebruiken RabbitMQ omdat het eenvoudig is in te stellen en goed wordt ondersteund.

Installeer rabbitmq met de volgende opdracht

sudo apt-get install rabbitmq-server

Nadat de installatie is voltooid, maakt u een gebruiker aan, voegt u een virtuele host toe en stelt u machtigingen in.

sudo rabbitmqctl add_user myuser mypassword
sudo rabbitmqctl add_vhost myvhost
sudo rabbitmqctl set_user_tags myuser mytag
sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"

Om de server te starten:

sudo rabbitmq-server

We kunnen selderij installeren met pip:

pip install celery

In uw Django settings.py-bestand ziet uw broker-URL er dan ongeveer zo uit

BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'

Start nu de bleekselderij

celery -A your_app worker -l info

Met deze opdracht start een Celery-medewerker alle taken die in uw django-app zijn gedefinieerd.

Supervisor is een Python-programma waarmee u alle Unix-processen kunt besturen en blijven uitvoeren. Het kan ook gecrashte processen opnieuw starten. We gebruiken het om ervoor te zorgen dat Celery-medewerkers altijd actief zijn.

Installeer eerst supervisor

sudo apt-get install supervisor

Maak uw_proj.conf-bestand in uw supervisor conf.d (/etc/supervisor/conf.d/your_proj.conf):

[program:your_proj_celery]
command=/home/your_user/your_proj/.venv/bin/celery --app=your_proj.celery:app worker -l info
directory=/home/your_user/your_proj
numprocs=1
stdout_logfile=/home/your_user/your_proj/logs/celery-worker.log
stderr_logfile=/home/your_user/your_proj/logs/low-worker.log
autostart=true
autorestart=true
startsecs=10

Zodra ons configuratiebestand is gemaakt en opgeslagen, kunnen we Supervisor op de hoogte brengen van ons nieuwe programma via de opdracht supervisorctl. Eerst vertellen we Supervisor om te zoeken naar nieuwe of gewijzigde programmaconfiguraties in de map /etc/supervisor/conf.d met:

sudo supervisorctl reread

Gevolgd door het te vertellen om eventuele wijzigingen door te voeren met:

sudo supervisorctl update

Zodra onze programma's actief zijn, zal er ongetwijfeld een moment zijn waarop we willen stoppen, herstarten of hun status willen zien.

sudo supervisorctl status

Om je bleekselderij opnieuw te starten:

sudo supervisorctl restart your_proj_celery


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow