Cette documentation concerne la future version 2.6 de pod.
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 paramètres.
Pré-configuration dans Pod
Avant de mettre en place à proprement parler le muti-tenants vous devez vous assurer de correctement configurer vos sites dans votre espace d'administration.
A savoir
Un "site" dans django est l'équivalent d'un tenant. Chaque objet site est relié à un nom de domaine, un nom et un identifiant unique.
Dans l'administration des sites (dans Administration > Sites > Site) vous devez donc créer un second site (ou plus, selon vos besoins) qui possédera son propre nom de domaine.
Déploiement avec Nginx
Afin de mettre en place le multi-tenants sur pod, il conviendra de correctement paramétrer son serveur nginx. Plusieurs tenants vont donc signifier plusieurs processus uwsgi, un par tenant.
Ainsi, il suffit de prendre la documentation d'installation de pod dans la section "Mise en production" et de refaire la manipulation autant de fois que vous avez de site.
Aide
Lors de la mise en place du deuxième site, il conviendra de renommer les fichiers nécessaires à la configuration Nginx avec des noms différents de ceux du premier site. Par exemple on pourra créer pod2_nginx.conf,
pod_uwsgi2.ini
Dans la commande d'initialisation du processus uwsgi, il faudra également changer le uid, celui ci doit être uniquement à chaque processus, il en va de même pour le pidfile.
Exemple de commandes qui peuvent être rentrées pour la création d'un second site :
pod@pod:~/django_projects/podv2$ cp pod_nginx.conf pod/custom/pod_nginx2.conf
pod@pod:~/django_projects/podv2$ vim pod/custom/pod_nginx2.conf
pod@pod:~/django_projects/podv2$ sudo ln -s /usr/local/django_projects/podv2/pod/custom/pod_nginx2.conf /etc/nginx/sites-enabled/pod_nginx2.conf
pod@pod:~/django_projects/podv2$ sudo /etc/init.d/nginx restart
pod@pod:~/django_projects/podv2$ cp pod_uwsgi.ini pod_uwsgi2.ini
pod@pod:~/django_projects/podv2$ cp pod_uwsgi2.ini pod/custom/.
pod@pod:~/django_projects/podv2$ sudo uwsgi --ini pod/custom/pod_uwsgi2.ini --enable-threads --daemonize /usr/local/django_projects/podv2/pod/log/uwsgi-pod2.log --uid pod2 --gid www-data --pidfile /tmp/pod2.pid
Cas particulier : le fichier .ini
Concernant le fichier pod_uwsgi2.ini vous devrez modifier le chemin vers le socket
socket = /home/pod/django_projects/podv2/pod2v2.sock
Vous devez également utiliser un fichier settings personnalisé. Pour cela ajoutez celle ligne à la gin du fichier .ini
env = DJANGO_SETTINGS_MODULE=pod.sites2_settings #Vous pouvez choisir le nom que vous voulez
Le fichier de settings
Une fois le déploiement terminé, il est nécessaire de faire quelques ajustements dans le fichier de settings nouvellement créé
Le fichier doit au minimum contenir ces deux lignes :
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 = pod2 #index pour elasticsearch, il est important de le modifier pour que chaque instance ai son moteur de recherche
Dans ce fichier, il est possible de surcharger n'importe quel setting de pod pour ce site en particulier.
Astuce
Pour pouvoir faire une commande concernant un site en particulier il est nécessaire de préciser le site dans la commande
python manage.py <commande> --settings=pod.sites2_settings
Il est notamment nécessaire de le faire lors de la mise à jour de l'index de ElasticSearch