esup-pod

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.


Astuce

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/media soit 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éinstaller :

Bloc de code
languagebash
(django_pod) pod@pod:~/django_projects/podv3$ sudo apt-get purge ffmpeg ffmpegthumbnailer imagemagick

Il faut installer RabbitMQ :

Bloc de code
languagebash
(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

Bloc de code
(django_pod) pod@pod:/usr/local/django_projects/podv3$ vim pod/custom/settings_local.py


Bloc de code
languagepy
# 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 l'installation ici

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


Bloc de code
(django_pod) pod@pod:/usr/local/django_projects/podv3$ vim pod/custom/settings_local.py


Bloc de code
languagepy
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 


Avertissement

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/4.3/extra/generic-init.d/celeryd dans /etc/init.d/celeryd 

Bloc de code
languagebash
(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é :

Bloc de code
(django_pod) pod@pod-enc:/usr/local/django_projects/podv3$ sudo vim /etc/default/celeryd


Bloc de code
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/podv2"                       # 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

Bloc de code
(django_pod) pod@pod-enc:~/django_projects/podv3$ sudo /etc/init.d/celeryd start

Pour vérifier si Celery fonctionne bien :

Bloc de code
languagebash
celery -A pod.main worker -l info