add multitenant presentation
This commit is contained in:
commit
4ca214c400
|
@ -0,0 +1,3 @@
|
|||
(venv) $ django-admin startproject demo
|
||||
(venv) $ pip install django_tenant_schemas
|
||||
...
|
|
@ -0,0 +1,102 @@
|
|||
\documentclass{beamer}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[french]{babel}
|
||||
\usepackage{hyperref}
|
||||
\usetheme{Berlin}
|
||||
\usepackage{listings}
|
||||
|
||||
\title{Programmer une application Django multitenant sans y penser}
|
||||
\author{S. MIHAI, T. NOËL, B. DAUVERGNE}
|
||||
\institute{\href{http://entrouvert.com}{Entrouvert SCOP ARL}}
|
||||
|
||||
\begin{document}
|
||||
\begin{frame}
|
||||
\titlepage
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Pratiques de multitenantismationerie connues}
|
||||
\begin{enumerate}
|
||||
\item<1->{ajouter un "site\_id" dans tous les modèles de l'appli}
|
||||
\item<2->{faire tourner autant de fois l'appli que de sites (docker, etc)}
|
||||
\item<3->{isoler les données par site au niveau du serveur de base de données, via des base de données/schemas multiples dans celle-ci}
|
||||
\item<4->{fichiers de conf basés sur le hostname}
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Pratiques de multitenantismationerie connues}
|
||||
notre choixe est 3: avec schema
|
||||
\begin{itemize}
|
||||
\item<1-> {une seule base de code (on évite 2)}
|
||||
\item<2->{du code qui n'a pas besoin de savoir qu'il va être multitenant (on évite 1)}
|
||||
\item<3->{une seule connexion à la base (on peut changer de schéma dans la même connexion)}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{django-tenant-schema}
|
||||
|
||||
Et pour ça:
|
||||
\begin{block}{django-tenant-schema\footnote{\url{https://django-tenant-schemas.readthedocs.io/en/latest/}}\footnote{\url{https://docs.microsoft.com/fr-fr/azure/sql-database/saas-tenancy-app-design-patterns}}}
|
||||
\begin{itemize}
|
||||
\item{attache un objet "tenant" à un objet "thread local"}
|
||||
\item{django.db.connexion se base là dessus pour faire \\ \texttt{SET SEARCH\_PATH = '...';} \\ avant chaque requête SQL\footnote{\url{https://www.postgresql.org/docs/9.1/ddl-schemas.html}}}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Demo 1: Multitenantiser une simple appli Django}
|
||||
Ex: django-tutorial\footnote{\url{https://github.com/mdamien/django-tutorial}}
|
||||
\lstinputlisting{pip}
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
\frametitle{Demo 1: Multitenantiser une simple appli Django}
|
||||
\lstinputlisting[language=Python]{settings.py}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Demo 1: Multitenantiser une simple appli Django}
|
||||
\lstset{language=Python}
|
||||
\begin{lstlisting}
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'tenant_schemas.postgresql_backend',
|
||||
'NAME': 'demo'
|
||||
}
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Demo 1: Multitenantiser une simple appli Django}
|
||||
\lstset{language=Python}
|
||||
\begin{lstlisting}
|
||||
DATABASE_ROUTERS = (
|
||||
'tenant_schemas.routers.TenantSyncRouter',
|
||||
)
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Demo 1: Multitenantiser une simple appli Django}
|
||||
\lstset{language=Python}
|
||||
\begin{lstlisting}
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'tenant_schemas.middleware.TenantMiddleware',
|
||||
...
|
||||
)
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Vers l'infini et au-délà: python-hobo\footnote{\url{http://git.entrouvert.org/hobo.git/}}}
|
||||
\begin{itemize}
|
||||
\item<1->{settings personnalisés par tenant: \\ \texttt{hobo.multitenant.settings\_loaders.TemplateVars \\ hobo.multitenant.settings\_loaders.SettingsPy}}
|
||||
\item<2->{templates custom par tenant \\ \texttt{hobo.multitenant.template\_loaders.FilesystemLoader}}
|
||||
\item<3->{shell Django dans le contexte d'un tenant\\ \texttt{hobo.multitenant.management.commands.shell}}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
\end{document}
|
|
@ -0,0 +1,9 @@
|
|||
# demo/settings.py
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.auth',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.admin',
|
||||
'schedule',
|
||||
...
|
||||
)
|
Reference in New Issue