Nous appelerons dans la suite de cette documentation, serveur frontal le serveur où la partie web serveur est installée et serveur encodage le serveur où est déporté l'encodage
Pré-requis :
- Il faut que votre répertoire
~/django_projects/podv3/pod/mediasoit partagé entre vos serveurs (montage NFS par exemple) - Il faut utiliser une BD Mysql/MariaDB pour qu'elle soit partageable entre les serveurs Pod frontaux et encodages
- Il faut utiliser sur les serveurs d'encodage Elasticsearch installé sur le serveur frontal
Installation sur le serveur frontal :
Il ne faut pas avoir installé ffmpeg, ffmpegthumbnailer et imagemagick. Si c'est le cas, les désinstaller :
(django_pod) pod@pod:~/django_projects/podv3$ sudo apt-get purge ffmpeg ffmpegthumbnailer imagemagick
Il faut installer RabbitMQ :
(django_pod) pod@pod:~/django_projects/podv3$ sudo apt-get install rabbitmq-server (django_pod) pod@pod:~/django_projects/podv3$ sudo rabbitmqctl add_user pod *mdp* (django_pod) pod@pod:~/django_projects/podv3$ sudo rabbitmqctl set_user_tags pod administrator (django_pod) pod@pod:~/django_projects/podv3$ sudo rabbitmqctl set_user_tags guest (django_pod) pod@pod:~/django_projects/podv3$ sudo rabbitmqctl add_vhost rabbitpod (django_pod) pod@pod:~/django_projects/podv3$ sudo rabbitmqctl set_permissions -p rabbitpod pod ".*" ".*" ".*"
Rajouter la configuration Celery/rabbitmq dans le fichier settings_local.py
(django_pod) pod@pod:/usr/local/django_projects/podv3$ vim pod/custom/settings_local.py
# Configuration Celery sur le frontal CELERY_TO_ENCODE = True # Active encode CELERY_BROKER_URL = "amqp://pod:mdp@localhost/rabbitpod" # Define a broker
Installation sur le serveur d’encodage :
Il faut installer Pod sans réinitialiser la base et sans nginx/uwsgi/Elasticsearch. Vous pouvez suivre la doc Installation de la plateforme Pod.
Rajouter la configuration de tout ça dans le fichier de configuration
Il faut maintenant dire au serveur d’encodage :
- Que l’on souhaite utiliser CELERY
- Donner l’adresse du serveur front de CELERY BROKER
- De connecter la base de données commune
- De connecter l'ElasticSearch commun
(django_pod) pod@pod:/usr/local/django_projects/podv3$ vim pod/custom/settings_local.py
CELERY_TO_ENCODE = True # Active encode
CELERY_BROKER_URL = "amqp://pod:mdp@ip.serveur.frontal/rabbitpod" # Definit le message broker.
CELERY_TASK_ACKS_LATE=True # permet de ne traiter que une tache à la fois
TIME_ZONE = 'Europe/Paris'
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'database_name', 'USER': 'user_anme', 'PASSWORD': 'password', 'HOST': 'mysql_host_ip', 'PORT': '3306', 'OPTIONS': { 'init_command': "SET storage_engine=INNODB, sql_mode='STRICT_TRANS_TABLES', innodb_strict_mode=1", }, } }
ES_URL = ['http://elastic.domaine.fr:9200/']
EMAIL_HOST = 'smtp.domaine.fr'
EMAIL_PORT = 25
DEFAULT_FROM_EMAIL = 'noreply@pod.domaine.fr'
SERVER_EMAIL = 'noreply@pod.domaine.fr'
ADMINS = ( ('Bob', 'bob@domaine.fr'), )
LANGUAGES = (
('fr', 'Français'),
('en', 'English')
)
MODELTRANSLATION_FALLBACK_LANGUAGES = ('fr', 'en')
USE_PODFILE = True
Vérifiez que votre base de données, ElasticSearch accepte les communications entrantes avec vos serveurs d'encodage (bind)
Activer Celery sur le serveur d'encodage
Mettre le contenu de https://raw.githubusercontent.com/celery/celery/main/extra/generic-init.d/celeryd dans /etc/init.d/celeryd
(django_pod) pod@pod-enc:~/django_projects/podv3$ sudo vim /etc/init.d/celeryd (django_pod) pod@pod-enc:~/django_projects/podv3$ sudo chmod u+x /etc/init.d/celeryd
Créer le fichier default associé :
(django_pod) pod@pod-enc:/usr/local/django_projects/podv3$ sudo vim /etc/default/celeryd
CELERYD_NODES="worker1" # Nom du/des worker(s). Ajoutez autant de workers que de tache à executer en paralelle. DJANGO_SETTINGS_MODULE="pod.settings" # settings de votre Pod CELERY_BIN="/home/pod/.virtualenvs/django_pod/bin/celery" # répertoire source de celery CELERY_APP="pod.main" # application où se situe celery CELERYD_CHDIR="/usr/local/django_projects/podv3" # répertoire du projet Pod (où se trouve manage.py) CELERYD_OPTS="--time-limit=86400 --concurrency=1 --max-tasks-per-child=1 --prefetch-multiplier=1" # options à appliquer en plus sur le comportement du/des worker(s) CELERYD_LOG_FILE="/var/log/celery/%N.log" # fichier log CELERYD_PID_FILE="/var/run/celery/%N.pid" # fichier pid CELERYD_USER="pod" # utilisateur système utilisant celery CELERYD_GROUP="pod" # groupe système utilisant celery CELERY_CREATE_DIRS=1 # si celery dispose du droit de création de dossiers CELERYD_LOG_LEVEL="INFO" # niveau d'information qui seront inscrit dans les logs
Démarrer Celeryd
(django_pod) pod@pod-enc:~/django_projects/podv3$ sudo /etc/init.d/celeryd start
Pour vérifier si Celery fonctionne bien :
celery -A pod.main worker -l info