Django
Selderij uitvoeren met supervisor
Zoeken…
Selderijconfiguratie
SELDERIJ
Installatie -
pip install django-celery
Toevoegen
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
Voeg het bestand
celery.py
aan jestack/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)
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
Maak een taak en markeer deze bijvoorbeeld als
@shared_task()
@shared_task() def add(x, y): print("x*y={}".format(x*y))
De selderij "met de hand" uitvoeren:
celery -A stack worker -l info
als je ook wilt toevoegen
Running Supervisor
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'
Voeg uitvoeringsrechten toe aan uw nieuw gemaakte script:
chmod u+x bin/celery_worker_start
Install supervisor (sla deze test over als supervisor al is geïnstalleerd)
apt-get install supervisor
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
Supervisor opnieuw lezen en bijwerken
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
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