| État | ||||
|---|---|---|---|---|
|
| État | ||||
|---|---|---|---|---|
|
La mise en place de plusieurs tenants sur votre application Pod permettra d'héberger 2 instances de pod tout en n'ayant qu'une seule installation de Pod. Vous pourrez donc avoir un pod1.univ.fr et un pod2.univ.fr. Chaque instance possédera ses propres utilisateurs, ses propres vidéos et ses propre propres paramètres.
Pré-configuration dans Pod
...
Les personnes dans le groupe "Admin du site" n'auront donc les permissions que sur le site du groupe en question.
Commande de mise en place
NGINX-VHOST
-> socket uwsgi
-> fichier ini uwsgi
-> fichier de config par tenant (tenant_settings.py) mettre tout en haut "from .settings import *"
Attention, il faut que chaque tenant est son propre identifiant de site : SITE_ID=2
Ensuite, dans ce fichier de settings, surcharger les variables propres au tenant
Ce qui donnerai
from .settings import * #Cette ligne va importer les settings déjà présents dans votre application, vous pourrez les surchager par site
SITE_ID=2 #Ici il faut mettre l'id unique du site qui correspond à l'id présent dans votre espace d'administration sur le site en question
ES_INDEX = 'podtenant' #index pour elasticsearch, il est important de le modifier pour que chaque instance ai son moteur de recherche
# USE_THEME = 'dark'
ALLOWED_HOSTS = ['video.tenant.fr']
DEFAULT_FROM_EMAIL = 'no-reply@tenant.fr'
SERVER_EMAIL = 'no-reply@tenant.fr'
HELP_MAIL = 'no-reply@tenant.fr'
CONTACT_US_EMAIL = ['contact@tenant.fr']
TEMPLATE_VISIBLE_SETTINGS = {
'TITLE_SITE': 'tenant.Video',
'TITLE_ETB': 'Tenant title',
'LOGO_SITE': 'img/logoPod.svg',
'LOGO_COMPACT_SITE': 'img/logoPod.svg',
'LOGO_ETB': 'tenant/custom/images/tenant-logo-1.png',
'LOGO_PLAYER': 'img/logoPod.svg',
'FOOTER_TEXT': (
''
),
'LINK_PLAYER': 'https://www.tenant.fr/',
'CSS_OVERRIDE': 'tenant/custom/override.css',
}
CELERY_TO_ENCODE = True # Active encode
CELERY_BROKER_URL = "amqp://pod:p0drabbit@localhost/rabbitpod-tenant" # Define a broker
Attention, pour chaque commande lancée, il faut préciser le fichier de settings du tenant :
(django_pod) pod@pod:/usr/local/django_projects/podv2$ python manage.py runserver tenant:8080 --settings=pod.tenant_settings ^C
(django_pod) pod@pod:/usr/local/django_projects/podv2$ python manage.py index_videos --all --settings=pod.tenant_settings
Sauf pour les données communes, example BDD - il faut le faire que pour le tenant 1 (SITE_ID=1)
RAJOUTER les settings cron task :
0 3 * * * cd /usr/local/django_projects/podv2 && /home/pod/.virtualenvs/django_pod/bin/python manage.py clearsessions &>> /usr/local/django_projects/podv2/pod/log/cron_clearsessions.log 2>&1
0 4 * * * cd /usr/local/django_projects/podv2 && /home/pod/.virtualenvs/django_pod/bin/python manage.py index_videos --all &>> /usr/local/django_projects/podv2/pod/log/cron_index.log 2>&1
0 5 * * * cd /usr/local/django_projects/podv2 && /home/pod/.virtualenvs/django_pod/bin/python manage.py check_obsolete_videos >> /usr/local/django_projects/podv2/pod/log/cron_obsolete.log 2>&1
* * * * * cd /usr/local/django_projects/podv2 && /home/pod/.virtualenvs/django_pod/bin/python manage.py live_viewcounter >> /usr/local/django_projects/podv2/pod/log/cron_viewcounter.log 2>&1
0 6 * * * cd /usr/local/django_projects/podv2 && find pod/media/chunked_uploads -mtime +7 -delete
Pour l'encodage déporté (sur une autre VM) avec celery:
Préciser le nom du broker dans le fichier de configuration du tenant (frontal)
Sur la VM d'encodage, copier le fichier /etc/init.d/celeryd en /etc/init.d/celeryd-tenant
Créer un fichier de configuration pour ce broker dans /etc/default/celeryd-tenant
dans ce fichier de configuration, précier le fichier de settings à utiliser (il devra appeler le même broker), l'emplacement du fichier celery.py de votre tenant et le ou les worker(s) à lancer
$> cp pod/main/celery.py pod/custom/tenant/celery.py
$> /etc/default/cellryd-tenant
CELERYD_NODES="worker1tenant" # Nom du/des worker(s). Ajoutez autant de workers que de tache à executer en paralelle.
DJANGO_SETTINGS_MODULE="pod.tenantsettings" # settings de votre Pod
CELERY_BIN="/home/pod/.virtualenvs/django_pod/bin/celery" # répertoire source de celery
CELERY_APP="pod.custom.tenant" # 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 --maxtasksperchild=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