<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki-br.binets.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wilson.jallet</id>
	<title>WikiBR - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-br.binets.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wilson.jallet"/>
	<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/Sp%C3%A9cial:Contributions/Wilson.jallet"/>
	<updated>2026-10-06T06:08:26Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8758</id>
		<title>Tuto pour le déploiement des sites Django</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8758"/>
		<updated>2018-04-05T07:36:50Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : /* Avec Git (recommzndé) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Connexion ==&lt;br /&gt;
&lt;br /&gt;
Assurez vous tout d&#039;abord d&#039;être administrateur de votre binet. Il faut attendre au moins une heure pour que les modifications soient prises en compte.&lt;br /&gt;
&lt;br /&gt;
Ensuite vous ouvrez votre terminal et vous vous connectez sur le serveur avec la commande ssh.&lt;br /&gt;
 ssh prenom.nom@129.104.201.52&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez tapé votre mot de passe frankiz, vous arrivez sur le serveur dans un dossier à votre nom. Il y a un fichier {{c|README.txt}} qui devrait donner un certain nombre d&#039;informations sur le fonctionnement de kevarzh ou encore sur certaines modifs à faire sur le code de votre site. Vous pouvez vous diriger sur le serveur par les commandes habituelles. Votre dossier personnel se trouve dans {{c|/hosting/user/prenom.nom}}. &lt;br /&gt;
&lt;br /&gt;
Si jamais vous voulez lancer une commande ayant besoin d&#039;internet (par exemple des commandes git) n&#039;oubliez pas de mettre {{c|proxychains}} devant votre commande.&lt;br /&gt;
&lt;br /&gt;
== Copie des fichiers ==&lt;br /&gt;
&lt;br /&gt;
=== En FTP ===&lt;br /&gt;
&lt;br /&gt;
Le dossier {{c|/hosting/www/nom_binet}} contient (au moins) un dossier par site. Si vous n&#039;avez qu&#039;un site, le dossier par défaut est {{c|htdocs}}. C&#039;est dans un de ces dossiers que vous allez devoir copier le code de votre site.&lt;br /&gt;
 scp -r /code_site prenom.nom@129.104.201.52:/hosting/wwww/nom_binet/version_site&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Avec Git (recommandé) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prérequis: &#039;&#039;Vous devez avoir une clef SSH activée sur votre compte sur Ostizan&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Naviguez au dossier où vous voulez mettre votre site, par exemple {{c|htdocs}} :&lt;br /&gt;
 cd /hosting/www/nom_binet/htdocs&lt;br /&gt;
et initialisez un dépôt Git&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
Si cela a fonctionné, le terminal répondra&lt;br /&gt;
 Initialized empty Git repository in /hosting/www/nom_binet/htdocs/.git&lt;br /&gt;
&lt;br /&gt;
Ajoutez maintenant une &#039;&#039;remote&#039;&#039; qui pointera vers là où vous hébergez votre code, par exemple&lt;br /&gt;
 git remote add origin git@gitlab.binets.fr:domaine/site.git&lt;br /&gt;
pour un site dont le code est hébergé sur [//gitlab.binets.fr le GitLab], ou&lt;br /&gt;
 git remote add origin git@github.com:domaine/site.git&lt;br /&gt;
pour un site dont le code est sur [//github.com GitHub].&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
&lt;br /&gt;
Attention ! L&#039;espace réservé à chaque binet est limité. Il faut se méfier quand on fait une copie, notamment a l&#039;environnement virtuel. D&#039;abord il pèse lourd, en plus il faudra que vous le remplaciez de toute façon. Autant ne pas le copier dès le départ...&lt;br /&gt;
Pour savoir si vous avez dépassé votre quota :&lt;br /&gt;
 quota -sg&lt;br /&gt;
Cette commande affiche, pour chaque binet, l&#039;espace utilisé, une «soft limit» et la vraie («hard») limit.&lt;br /&gt;
&lt;br /&gt;
== Environnement virtuel ==&lt;br /&gt;
&lt;br /&gt;
Une fois que le code du site est en place, il créer un environnement virtuel, c&#039;est-à-dire une copie locale de l&#039;interpréteur Python correspondant à la version que vous utilisez pour votre site :&lt;br /&gt;
 virtualenv -p /usr/bin/python3.6 venv&lt;br /&gt;
Il est important que vous nommiez le dossier {{c|venv}}.&lt;br /&gt;
&lt;br /&gt;
À partir de là, &#039;&#039;&#039;toutes&#039;&#039;&#039; les commandes utilisant python doivent être exécutées dans le virtualenv. Pour rentrer dans le virtualenv, vous devez lancer :&lt;br /&gt;
 source venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
Si cela a fonctionné, vous aurez {{c|(venv)}} en préfixe dans votre terminal :&lt;br /&gt;
 (venv) prenom.nom@ostizan:/hosting/www/site_binet/htdocs&lt;br /&gt;
&lt;br /&gt;
Une fois dans le venv, vous pouvez installer les dépendances nécessaires :&lt;br /&gt;
 pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
== Adaptations ==&lt;br /&gt;
Certaines adaptations sont nécessaires pour faire fonctionner le site. La documentation officielle de Django fournit une bonne [https://docs.djangoproject.com/fr/1.10/howto/deployment/checklist/ checklist]. Là, pas besoin de se casser la tête il suffit de suivre la liste, des liens sont là pour expliquer en détails ce que l&#039;on fait à chaque fois. Les points essentiels à ne surtout pas sauter sont :&lt;br /&gt;
* Mettre {{c|DEBUG}} à {{False}}&lt;br /&gt;
* {{c|SECRET_KEY}}:&lt;br /&gt;
Si vous utilisez un repo git, il ne faut pas mettre cette clef dans le code.&lt;br /&gt;
Un snippet possible est le suivant:&lt;br /&gt;
 keyfile = os.path.join(BASE_DIR, &amp;quot;secret.key&amp;quot;)&lt;br /&gt;
 if not os.path.exists(keyfile):&lt;br /&gt;
     with open(keyfile, &amp;quot;wb&amp;quot;) as f:&lt;br /&gt;
         f.write(base64.b64_encode(os.urandom(30)))&lt;br /&gt;
 with open(keyfile, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
     SECRET_KEY = f.read().strip()&lt;br /&gt;
&lt;br /&gt;
La clef est contenue dans le fichier {{c|secret.key}} (généré automatiquement s&#039;il n&#039;existe pas) qu&#039;il suffit de mettre dans le {{c|.gitignore}}.&lt;br /&gt;
&lt;br /&gt;
* Mettre {{c|ALLOWED_HOST}} à {{c|[&amp;quot;*&amp;quot;]}}, le filtrage a lieu avant Django&lt;br /&gt;
* STATIC_ROOT, STATIC_URL, MEDIA_ROOT et MEDIA_URL:&lt;br /&gt;
 STATIC_URL = &#039;/assets/static/&#039;&lt;br /&gt;
 STATIC_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/static/&amp;quot;)&lt;br /&gt;
 MEDIA_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/media/&amp;quot;)&lt;br /&gt;
 MEDIA_URL = &#039;/assets/media/&#039;&lt;br /&gt;
&lt;br /&gt;
* emails (indispensable pour être averti des erreurs 500)&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &amp;quot;nom_du_binet@binets.polytechnique.fr&amp;quot;&lt;br /&gt;
 # voir https://portail.polytechnique.edu/dsi/eleves/mail-binets&lt;br /&gt;
 SERVER_EMAIL = DEFAULT_FROM_EMAIL&lt;br /&gt;
 ADMINS = [(&amp;quot;Webmaster&amp;quot;, DEFAULT_FROM_EMAIL)]&lt;br /&gt;
&lt;br /&gt;
* base de donnée : n&#039;utilisez pas sqlite ! Nous avons eu des problèmes par le passé, et les bases de données sql sont sauvegardées toutes les semaines.&lt;br /&gt;
Un snippet utilisable est :&lt;br /&gt;
 if DEBUG:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
       &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
       &#039;NAME&#039;: os.path.join(BASE_DIR, &#039;db.sqlite3&#039;),&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 else:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;read_default_file&#039;: os.path.join(BASE_DIR, &#039;my.cnf&#039;),&lt;br /&gt;
        },&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Placer les mots de passe dans le fichier {{c|my.cnf}}:&lt;br /&gt;
 [client]&lt;br /&gt;
 database = NAME&lt;br /&gt;
 user = USER&lt;br /&gt;
 password = PASSWORD&lt;br /&gt;
 default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
Bien sûr il faut ajouter ce fichier dans le gitignore.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;authentification par CAS sous Django ==&lt;br /&gt;
&lt;br /&gt;
* Demander sur [https://panix.binets.fr Panix] à utiliser cette authentification. Préciser les éventuels attributs supplémentaires nécessaires (promo, section, ...).&lt;br /&gt;
* Installer le paquet django-cas-ng :&lt;br /&gt;
  pip install django-cas-ng&lt;br /&gt;
* Ajouter ce paquet à la liste des applications :&lt;br /&gt;
  INSTALLED_APPS = [&lt;br /&gt;
    ...&lt;br /&gt;
    &#039;django_cas_ng&#039;,&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Configurer la connection au serveur CAS du BR : &lt;br /&gt;
  AUTHENTICATION_BACKENDS = (&lt;br /&gt;
    &#039;django.contrib.auth.backends.ModelBackend&#039;,&lt;br /&gt;
    &#039;django_cas_ng.backends.CASBackend&#039;,&lt;br /&gt;
  )&lt;br /&gt;
  CAS_SERVER_URL = &amp;quot;https://cas.binets.fr/&amp;quot;&lt;br /&gt;
* Renseigner les pages de connexion (dans {{c|my_project/urls.py}} par exemple): &lt;br /&gt;
  from django_cas_ng.views import login, logout&lt;br /&gt;
  &lt;br /&gt;
  urlpatterns = [&lt;br /&gt;
    ...&lt;br /&gt;
    url(r&#039;^login$&#039;, login, name=&#039;cas_ng_login&#039;),&lt;br /&gt;
    url(r&#039;^logout$&#039;, logout, name=&#039;cas_ng_logout&#039;),&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Ajouter l&#039;URL d&#039;entrée : &lt;br /&gt;
  LOGIN_URL = &amp;quot;login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Attention à forcer l&#039;authentification pour les pages concernées : &lt;br /&gt;
  from django.contrib.auth.decorators import login_required&lt;br /&gt;
  &lt;br /&gt;
  @login_required&lt;br /&gt;
  def my_awesome_view(request):&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
À noter : &lt;br /&gt;
* le nom de l&#039;utilisateur connecté se trouve dans : request.user.username (accessible dans n&#039;importe quelle vue).&lt;br /&gt;
* les attributs du [[LDAP]] peuvent être disponibles (demander les attributs nécessaires  lors de la mise en place du CAS). Ils sont alors disponibles dans request.session[&#039;attributes&#039;] .&lt;br /&gt;
* plus d&#039;option de configuration sont présentés [https://github.com/mingchen/django-cas-ng/tree/master/django_cas_ng ici]&lt;br /&gt;
&lt;br /&gt;
== À chaque modification... ==&lt;br /&gt;
&lt;br /&gt;
* du code python quel qu&#039;il soit :&lt;br /&gt;
 touch /var/run/please/restart&lt;br /&gt;
* du schéma SQL (sous Django):&lt;br /&gt;
 python manage.py migrate&lt;br /&gt;
* des fichiers statiques (sous Django):&lt;br /&gt;
 python manage.py collectstatic&lt;br /&gt;
Il faut attendre 1 ou deux minutes que le système enregistre la modification, quand c&#039;est fait il affiche un message dans le terminal.&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
=== Erreurs python ===&lt;br /&gt;
La commande&lt;br /&gt;
 python manage.py runserver&lt;br /&gt;
permet de vérifier qu&#039;il n&#039;y a pas d&#039;{{c|ImportError}} ou autres. Pensez à le faire dans le virtualenv.&lt;br /&gt;
=== Erreurs web ===&lt;br /&gt;
Pour checker les changements il suffit de taper l&#039;url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs : {{c|/var/log/uwsgi/nom_binet}} ou {{c|/hosting/log/nom_binet}}.&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error}} pas en gras : c&#039;est une erreur de {{c|uwsgi}} qui n&#039;arrive pas à :&lt;br /&gt;
** trouver ton site&lt;br /&gt;
** trouver le virtualenv&lt;br /&gt;
** une exception est levée au démarrage du serveur ({{c|ImportError}} notamment).&lt;br /&gt;
&lt;br /&gt;
Tu peux lire les logs dans {{c|/var/log/uwsgi/&amp;lt;ton binet&amp;gt;/&amp;lt;ton site&amp;gt;.log}} et vérifier où {{c|uwsgi}} va chercher ton site dans {{c|/etc/uwsgi.d/&amp;lt;ton site&amp;gt;.json}}. S&#039;il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi même.&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error(500)}} en gras : c&#039;est django. Actives les mails pour avoir des détails, mais tu as probablement oublié de lancer les migrations sur une base sql vide.&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8757</id>
		<title>Tuto pour le déploiement des sites Django</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8757"/>
		<updated>2018-04-05T07:29:01Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : /* Avec Git (recommndé) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Connexion ==&lt;br /&gt;
&lt;br /&gt;
Assurez vous tout d&#039;abord d&#039;être administrateur de votre binet. Il faut attendre au moins une heure pour que les modifications soient prises en compte.&lt;br /&gt;
&lt;br /&gt;
Ensuite vous ouvrez votre terminal et vous vous connectez sur le serveur avec la commande ssh.&lt;br /&gt;
 ssh prenom.nom@129.104.201.52&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez tapé votre mot de passe frankiz, vous arrivez sur le serveur dans un dossier à votre nom. Il y a un fichier {{c|README.txt}} qui devrait donner un certain nombre d&#039;informations sur le fonctionnement de kevarzh ou encore sur certaines modifs à faire sur le code de votre site. Vous pouvez vous diriger sur le serveur par les commandes habituelles. Votre dossier personnel se trouve dans {{c|/hosting/user/prenom.nom}}. &lt;br /&gt;
&lt;br /&gt;
Si jamais vous voulez lancer une commande ayant besoin d&#039;internet (par exemple des commandes git) n&#039;oubliez pas de mettre {{c|proxychains}} devant votre commande.&lt;br /&gt;
&lt;br /&gt;
== Copie des fichiers ==&lt;br /&gt;
&lt;br /&gt;
=== En FTP ===&lt;br /&gt;
&lt;br /&gt;
Le dossier {{c|/hosting/www/nom_binet}} contient (au moins) un dossier par site. Si vous n&#039;avez qu&#039;un site, le dossier par défaut est {{c|htdocs}}. C&#039;est dans un de ces dossiers que vous allez devoir copier le code de votre site.&lt;br /&gt;
 scp -r /code_site prenom.nom@129.104.201.52:/hosting/wwww/nom_binet/version_site&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Avec Git (recommzndé) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prérequis: &#039;&#039;Vous devez avoir une clef SSH activée sur votre compte sur Ostizan&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Naviguez au dossier où vous voulez mettre votre site, par exemple {{c|htdocs}} :&lt;br /&gt;
 cd /hosting/www/nom_binet/htdocs&lt;br /&gt;
et initialisez un dépôt Git&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
Si cela a fonctionné, le terminal répondra&lt;br /&gt;
 Initialized empty Git repository in /hosting/www/nom_binet/htdocs/.git&lt;br /&gt;
&lt;br /&gt;
Ajoutez maintenant une &#039;&#039;remote&#039;&#039; qui pointera vers là où vous hébergez votre code, par exemple&lt;br /&gt;
 git remote add origin git@gitlab.binets.fr:domaine/site.git&lt;br /&gt;
pour un site dont le code est hébergé sur [//gitlab.binets.fr le GitLab], ou&lt;br /&gt;
 git remote add origin git@github.com:domaine/site.git&lt;br /&gt;
pour un site dont le code est sur [//github.com GitHub].&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
&lt;br /&gt;
Attention ! L&#039;espace réservé à chaque binet est limité. Il faut se méfier quand on fait une copie, notamment a l&#039;environnement virtuel. D&#039;abord il pèse lourd, en plus il faudra que vous le remplaciez de toute façon. Autant ne pas le copier dès le départ...&lt;br /&gt;
Pour savoir si vous avez dépassé votre quota :&lt;br /&gt;
 quota -sg&lt;br /&gt;
Cette commande affiche, pour chaque binet, l&#039;espace utilisé, une «soft limit» et la vraie («hard») limit.&lt;br /&gt;
&lt;br /&gt;
== Environnement virtuel ==&lt;br /&gt;
&lt;br /&gt;
Une fois que le code du site est en place, il créer un environnement virtuel, c&#039;est-à-dire une copie locale de l&#039;interpréteur Python correspondant à la version que vous utilisez pour votre site :&lt;br /&gt;
 virtualenv -p /usr/bin/python3.6 venv&lt;br /&gt;
Il est important que vous nommiez le dossier {{c|venv}}.&lt;br /&gt;
&lt;br /&gt;
À partir de là, &#039;&#039;&#039;toutes&#039;&#039;&#039; les commandes utilisant python doivent être exécutées dans le virtualenv. Pour rentrer dans le virtualenv, vous devez lancer :&lt;br /&gt;
 source venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
Si cela a fonctionné, vous aurez {{c|(venv)}} en préfixe dans votre terminal :&lt;br /&gt;
 (venv) prenom.nom@ostizan:/hosting/www/site_binet/htdocs&lt;br /&gt;
&lt;br /&gt;
Une fois dans le venv, vous pouvez installer les dépendances nécessaires :&lt;br /&gt;
 pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
== Adaptations ==&lt;br /&gt;
Certaines adaptations sont nécessaires pour faire fonctionner le site. La documentation officielle de Django fournit une bonne [https://docs.djangoproject.com/fr/1.10/howto/deployment/checklist/ checklist]. Là, pas besoin de se casser la tête il suffit de suivre la liste, des liens sont là pour expliquer en détails ce que l&#039;on fait à chaque fois. Les points essentiels à ne surtout pas sauter sont :&lt;br /&gt;
* Mettre {{c|DEBUG}} à {{False}}&lt;br /&gt;
* {{c|SECRET_KEY}}:&lt;br /&gt;
Si vous utilisez un repo git, il ne faut pas mettre cette clef dans le code.&lt;br /&gt;
Un snippet possible est le suivant:&lt;br /&gt;
 keyfile = os.path.join(BASE_DIR, &amp;quot;secret.key&amp;quot;)&lt;br /&gt;
 if not os.path.exists(keyfile):&lt;br /&gt;
     with open(keyfile, &amp;quot;wb&amp;quot;) as f:&lt;br /&gt;
         f.write(base64.b64_encode(os.urandom(30)))&lt;br /&gt;
 with open(keyfile, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
     SECRET_KEY = f.read().strip()&lt;br /&gt;
&lt;br /&gt;
La clef est contenue dans le fichier {{c|secret.key}} (généré automatiquement s&#039;il n&#039;existe pas) qu&#039;il suffit de mettre dans le {{c|.gitignore}}.&lt;br /&gt;
&lt;br /&gt;
* Mettre {{c|ALLOWED_HOST}} à {{c|[&amp;quot;*&amp;quot;]}}, le filtrage a lieu avant Django&lt;br /&gt;
* STATIC_ROOT, STATIC_URL, MEDIA_ROOT et MEDIA_URL:&lt;br /&gt;
 STATIC_URL = &#039;/assets/static/&#039;&lt;br /&gt;
 STATIC_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/static/&amp;quot;)&lt;br /&gt;
 MEDIA_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/media/&amp;quot;)&lt;br /&gt;
 MEDIA_URL = &#039;/assets/media/&#039;&lt;br /&gt;
&lt;br /&gt;
* emails (indispensable pour être averti des erreurs 500)&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &amp;quot;nom_du_binet@binets.polytechnique.fr&amp;quot;&lt;br /&gt;
 # voir https://portail.polytechnique.edu/dsi/eleves/mail-binets&lt;br /&gt;
 SERVER_EMAIL = DEFAULT_FROM_EMAIL&lt;br /&gt;
 ADMINS = [(&amp;quot;Webmaster&amp;quot;, DEFAULT_FROM_EMAIL)]&lt;br /&gt;
&lt;br /&gt;
* base de donnée : n&#039;utilisez pas sqlite ! Nous avons eu des problèmes par le passé, et les bases de données sql sont sauvegardées toutes les semaines.&lt;br /&gt;
Un snippet utilisable est :&lt;br /&gt;
 if DEBUG:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
       &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
       &#039;NAME&#039;: os.path.join(BASE_DIR, &#039;db.sqlite3&#039;),&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 else:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;read_default_file&#039;: os.path.join(BASE_DIR, &#039;my.cnf&#039;),&lt;br /&gt;
        },&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Placer les mots de passe dans le fichier {{c|my.cnf}}:&lt;br /&gt;
 [client]&lt;br /&gt;
 database = NAME&lt;br /&gt;
 user = USER&lt;br /&gt;
 password = PASSWORD&lt;br /&gt;
 default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
Bien sûr il faut ajouter ce fichier dans le gitignore.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;authentification par CAS sous Django ==&lt;br /&gt;
&lt;br /&gt;
* Demander sur [https://panix.binets.fr Panix] à utiliser cette authentification. Préciser les éventuels attributs supplémentaires nécessaires (promo, section, ...).&lt;br /&gt;
* Installer le paquet django-cas-ng :&lt;br /&gt;
  pip install django-cas-ng&lt;br /&gt;
* Ajouter ce paquet à la liste des applications :&lt;br /&gt;
  INSTALLED_APPS = [&lt;br /&gt;
    ...&lt;br /&gt;
    &#039;django_cas_ng&#039;,&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Configurer la connection au serveur CAS du BR : &lt;br /&gt;
  AUTHENTICATION_BACKENDS = (&lt;br /&gt;
    &#039;django.contrib.auth.backends.ModelBackend&#039;,&lt;br /&gt;
    &#039;django_cas_ng.backends.CASBackend&#039;,&lt;br /&gt;
  )&lt;br /&gt;
  CAS_SERVER_URL = &amp;quot;https://cas.binets.fr/&amp;quot;&lt;br /&gt;
* Renseigner les pages de connexion (dans {{c|my_project/urls.py}} par exemple): &lt;br /&gt;
  from django_cas_ng.views import login, logout&lt;br /&gt;
  &lt;br /&gt;
  urlpatterns = [&lt;br /&gt;
    ...&lt;br /&gt;
    url(r&#039;^login$&#039;, login, name=&#039;cas_ng_login&#039;),&lt;br /&gt;
    url(r&#039;^logout$&#039;, logout, name=&#039;cas_ng_logout&#039;),&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Ajouter l&#039;URL d&#039;entrée : &lt;br /&gt;
  LOGIN_URL = &amp;quot;login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Attention à forcer l&#039;authentification pour les pages concernées : &lt;br /&gt;
  from django.contrib.auth.decorators import login_required&lt;br /&gt;
  &lt;br /&gt;
  @login_required&lt;br /&gt;
  def my_awesome_view(request):&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
À noter : &lt;br /&gt;
* le nom de l&#039;utilisateur connecté se trouve dans : request.user.username (accessible dans n&#039;importe quelle vue).&lt;br /&gt;
* les attributs du [[LDAP]] peuvent être disponibles (demander les attributs nécessaires  lors de la mise en place du CAS). Ils sont alors disponibles dans request.session[&#039;attributes&#039;] .&lt;br /&gt;
* plus d&#039;option de configuration sont présentés [https://github.com/mingchen/django-cas-ng/tree/master/django_cas_ng ici]&lt;br /&gt;
&lt;br /&gt;
== À chaque modification... ==&lt;br /&gt;
&lt;br /&gt;
* du code python quel qu&#039;il soit :&lt;br /&gt;
 touch /var/run/please/restart&lt;br /&gt;
* du schéma SQL (sous Django):&lt;br /&gt;
 python manage.py migrate&lt;br /&gt;
* des fichiers statiques (sous Django):&lt;br /&gt;
 python manage.py collectstatic&lt;br /&gt;
Il faut attendre 1 ou deux minutes que le système enregistre la modification, quand c&#039;est fait il affiche un message dans le terminal.&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
=== Erreurs python ===&lt;br /&gt;
La commande&lt;br /&gt;
 python manage.py runserver&lt;br /&gt;
permet de vérifier qu&#039;il n&#039;y a pas d&#039;{{c|ImportError}} ou autres. Pensez à le faire dans le virtualenv.&lt;br /&gt;
=== Erreurs web ===&lt;br /&gt;
Pour checker les changements il suffit de taper l&#039;url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs : {{c|/var/log/uwsgi/nom_binet}} ou {{c|/hosting/log/nom_binet}}.&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error}} pas en gras : c&#039;est une erreur de {{c|uwsgi}} qui n&#039;arrive pas à :&lt;br /&gt;
** trouver ton site&lt;br /&gt;
** trouver le virtualenv&lt;br /&gt;
** une exception est levée au démarrage du serveur ({{c|ImportError}} notamment).&lt;br /&gt;
&lt;br /&gt;
Tu peux lire les logs dans {{c|/var/log/uwsgi/&amp;lt;ton binet&amp;gt;/&amp;lt;ton site&amp;gt;.log}} et vérifier où {{c|uwsgi}} va chercher ton site dans {{c|/etc/uwsgi.d/&amp;lt;ton site&amp;gt;.json}}. S&#039;il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi même.&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error(500)}} en gras : c&#039;est django. Actives les mails pour avoir des détails, mais tu as probablement oublié de lancer les migrations sur une base sql vide.&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8756</id>
		<title>Tuto pour le déploiement des sites Django</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8756"/>
		<updated>2018-04-05T07:28:48Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : /* Copie des fichiers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Connexion ==&lt;br /&gt;
&lt;br /&gt;
Assurez vous tout d&#039;abord d&#039;être administrateur de votre binet. Il faut attendre au moins une heure pour que les modifications soient prises en compte.&lt;br /&gt;
&lt;br /&gt;
Ensuite vous ouvrez votre terminal et vous vous connectez sur le serveur avec la commande ssh.&lt;br /&gt;
 ssh prenom.nom@129.104.201.52&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez tapé votre mot de passe frankiz, vous arrivez sur le serveur dans un dossier à votre nom. Il y a un fichier {{c|README.txt}} qui devrait donner un certain nombre d&#039;informations sur le fonctionnement de kevarzh ou encore sur certaines modifs à faire sur le code de votre site. Vous pouvez vous diriger sur le serveur par les commandes habituelles. Votre dossier personnel se trouve dans {{c|/hosting/user/prenom.nom}}. &lt;br /&gt;
&lt;br /&gt;
Si jamais vous voulez lancer une commande ayant besoin d&#039;internet (par exemple des commandes git) n&#039;oubliez pas de mettre {{c|proxychains}} devant votre commande.&lt;br /&gt;
&lt;br /&gt;
== Copie des fichiers ==&lt;br /&gt;
&lt;br /&gt;
=== En FTP ===&lt;br /&gt;
&lt;br /&gt;
Le dossier {{c|/hosting/www/nom_binet}} contient (au moins) un dossier par site. Si vous n&#039;avez qu&#039;un site, le dossier par défaut est {{c|htdocs}}. C&#039;est dans un de ces dossiers que vous allez devoir copier le code de votre site.&lt;br /&gt;
 scp -r /code_site prenom.nom@129.104.201.52:/hosting/wwww/nom_binet/version_site&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Avec Git (recommndé) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prérequis: &#039;&#039;Vous devez avoir une clef SSH activée sur votre compte sur Ostizan&#039;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Naviguez au dossier où vous voulez mettre votre site, par exemple {{c|htdocs}} :&lt;br /&gt;
 cd /hosting/www/nom_binet/htdocs&lt;br /&gt;
et initialisez un dépôt Git&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
Si cela a fonctionné, le terminal répondra&lt;br /&gt;
 Initialized empty Git repository in /hosting/www/nom_binet/htdocs/.git&lt;br /&gt;
&lt;br /&gt;
Ajoutez maintenant une &#039;&#039;remote&#039;&#039; qui pointera vers là où vous hébergez votre code, par exemple&lt;br /&gt;
 git remote add origin git@gitlab.binets.fr:domaine/site.git&lt;br /&gt;
pour un site dont le code est hébergé sur [//gitlab.binets.fr le GitLab], ou&lt;br /&gt;
 git remote add origin git@github.com:domaine/site.git&lt;br /&gt;
pour un site dont le code est sur [//github.com GitHub].&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
&lt;br /&gt;
Attention ! L&#039;espace réservé à chaque binet est limité. Il faut se méfier quand on fait une copie, notamment a l&#039;environnement virtuel. D&#039;abord il pèse lourd, en plus il faudra que vous le remplaciez de toute façon. Autant ne pas le copier dès le départ...&lt;br /&gt;
Pour savoir si vous avez dépassé votre quota :&lt;br /&gt;
 quota -sg&lt;br /&gt;
Cette commande affiche, pour chaque binet, l&#039;espace utilisé, une «soft limit» et la vraie («hard») limit.&lt;br /&gt;
&lt;br /&gt;
== Environnement virtuel ==&lt;br /&gt;
&lt;br /&gt;
Une fois que le code du site est en place, il créer un environnement virtuel, c&#039;est-à-dire une copie locale de l&#039;interpréteur Python correspondant à la version que vous utilisez pour votre site :&lt;br /&gt;
 virtualenv -p /usr/bin/python3.6 venv&lt;br /&gt;
Il est important que vous nommiez le dossier {{c|venv}}.&lt;br /&gt;
&lt;br /&gt;
À partir de là, &#039;&#039;&#039;toutes&#039;&#039;&#039; les commandes utilisant python doivent être exécutées dans le virtualenv. Pour rentrer dans le virtualenv, vous devez lancer :&lt;br /&gt;
 source venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
Si cela a fonctionné, vous aurez {{c|(venv)}} en préfixe dans votre terminal :&lt;br /&gt;
 (venv) prenom.nom@ostizan:/hosting/www/site_binet/htdocs&lt;br /&gt;
&lt;br /&gt;
Une fois dans le venv, vous pouvez installer les dépendances nécessaires :&lt;br /&gt;
 pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
== Adaptations ==&lt;br /&gt;
Certaines adaptations sont nécessaires pour faire fonctionner le site. La documentation officielle de Django fournit une bonne [https://docs.djangoproject.com/fr/1.10/howto/deployment/checklist/ checklist]. Là, pas besoin de se casser la tête il suffit de suivre la liste, des liens sont là pour expliquer en détails ce que l&#039;on fait à chaque fois. Les points essentiels à ne surtout pas sauter sont :&lt;br /&gt;
* Mettre {{c|DEBUG}} à {{False}}&lt;br /&gt;
* {{c|SECRET_KEY}}:&lt;br /&gt;
Si vous utilisez un repo git, il ne faut pas mettre cette clef dans le code.&lt;br /&gt;
Un snippet possible est le suivant:&lt;br /&gt;
 keyfile = os.path.join(BASE_DIR, &amp;quot;secret.key&amp;quot;)&lt;br /&gt;
 if not os.path.exists(keyfile):&lt;br /&gt;
     with open(keyfile, &amp;quot;wb&amp;quot;) as f:&lt;br /&gt;
         f.write(base64.b64_encode(os.urandom(30)))&lt;br /&gt;
 with open(keyfile, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
     SECRET_KEY = f.read().strip()&lt;br /&gt;
&lt;br /&gt;
La clef est contenue dans le fichier {{c|secret.key}} (généré automatiquement s&#039;il n&#039;existe pas) qu&#039;il suffit de mettre dans le {{c|.gitignore}}.&lt;br /&gt;
&lt;br /&gt;
* Mettre {{c|ALLOWED_HOST}} à {{c|[&amp;quot;*&amp;quot;]}}, le filtrage a lieu avant Django&lt;br /&gt;
* STATIC_ROOT, STATIC_URL, MEDIA_ROOT et MEDIA_URL:&lt;br /&gt;
 STATIC_URL = &#039;/assets/static/&#039;&lt;br /&gt;
 STATIC_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/static/&amp;quot;)&lt;br /&gt;
 MEDIA_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/media/&amp;quot;)&lt;br /&gt;
 MEDIA_URL = &#039;/assets/media/&#039;&lt;br /&gt;
&lt;br /&gt;
* emails (indispensable pour être averti des erreurs 500)&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &amp;quot;nom_du_binet@binets.polytechnique.fr&amp;quot;&lt;br /&gt;
 # voir https://portail.polytechnique.edu/dsi/eleves/mail-binets&lt;br /&gt;
 SERVER_EMAIL = DEFAULT_FROM_EMAIL&lt;br /&gt;
 ADMINS = [(&amp;quot;Webmaster&amp;quot;, DEFAULT_FROM_EMAIL)]&lt;br /&gt;
&lt;br /&gt;
* base de donnée : n&#039;utilisez pas sqlite ! Nous avons eu des problèmes par le passé, et les bases de données sql sont sauvegardées toutes les semaines.&lt;br /&gt;
Un snippet utilisable est :&lt;br /&gt;
 if DEBUG:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
       &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
       &#039;NAME&#039;: os.path.join(BASE_DIR, &#039;db.sqlite3&#039;),&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 else:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;read_default_file&#039;: os.path.join(BASE_DIR, &#039;my.cnf&#039;),&lt;br /&gt;
        },&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Placer les mots de passe dans le fichier {{c|my.cnf}}:&lt;br /&gt;
 [client]&lt;br /&gt;
 database = NAME&lt;br /&gt;
 user = USER&lt;br /&gt;
 password = PASSWORD&lt;br /&gt;
 default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
Bien sûr il faut ajouter ce fichier dans le gitignore.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;authentification par CAS sous Django ==&lt;br /&gt;
&lt;br /&gt;
* Demander sur [https://panix.binets.fr Panix] à utiliser cette authentification. Préciser les éventuels attributs supplémentaires nécessaires (promo, section, ...).&lt;br /&gt;
* Installer le paquet django-cas-ng :&lt;br /&gt;
  pip install django-cas-ng&lt;br /&gt;
* Ajouter ce paquet à la liste des applications :&lt;br /&gt;
  INSTALLED_APPS = [&lt;br /&gt;
    ...&lt;br /&gt;
    &#039;django_cas_ng&#039;,&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Configurer la connection au serveur CAS du BR : &lt;br /&gt;
  AUTHENTICATION_BACKENDS = (&lt;br /&gt;
    &#039;django.contrib.auth.backends.ModelBackend&#039;,&lt;br /&gt;
    &#039;django_cas_ng.backends.CASBackend&#039;,&lt;br /&gt;
  )&lt;br /&gt;
  CAS_SERVER_URL = &amp;quot;https://cas.binets.fr/&amp;quot;&lt;br /&gt;
* Renseigner les pages de connexion (dans {{c|my_project/urls.py}} par exemple): &lt;br /&gt;
  from django_cas_ng.views import login, logout&lt;br /&gt;
  &lt;br /&gt;
  urlpatterns = [&lt;br /&gt;
    ...&lt;br /&gt;
    url(r&#039;^login$&#039;, login, name=&#039;cas_ng_login&#039;),&lt;br /&gt;
    url(r&#039;^logout$&#039;, logout, name=&#039;cas_ng_logout&#039;),&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Ajouter l&#039;URL d&#039;entrée : &lt;br /&gt;
  LOGIN_URL = &amp;quot;login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Attention à forcer l&#039;authentification pour les pages concernées : &lt;br /&gt;
  from django.contrib.auth.decorators import login_required&lt;br /&gt;
  &lt;br /&gt;
  @login_required&lt;br /&gt;
  def my_awesome_view(request):&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
À noter : &lt;br /&gt;
* le nom de l&#039;utilisateur connecté se trouve dans : request.user.username (accessible dans n&#039;importe quelle vue).&lt;br /&gt;
* les attributs du [[LDAP]] peuvent être disponibles (demander les attributs nécessaires  lors de la mise en place du CAS). Ils sont alors disponibles dans request.session[&#039;attributes&#039;] .&lt;br /&gt;
* plus d&#039;option de configuration sont présentés [https://github.com/mingchen/django-cas-ng/tree/master/django_cas_ng ici]&lt;br /&gt;
&lt;br /&gt;
== À chaque modification... ==&lt;br /&gt;
&lt;br /&gt;
* du code python quel qu&#039;il soit :&lt;br /&gt;
 touch /var/run/please/restart&lt;br /&gt;
* du schéma SQL (sous Django):&lt;br /&gt;
 python manage.py migrate&lt;br /&gt;
* des fichiers statiques (sous Django):&lt;br /&gt;
 python manage.py collectstatic&lt;br /&gt;
Il faut attendre 1 ou deux minutes que le système enregistre la modification, quand c&#039;est fait il affiche un message dans le terminal.&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
=== Erreurs python ===&lt;br /&gt;
La commande&lt;br /&gt;
 python manage.py runserver&lt;br /&gt;
permet de vérifier qu&#039;il n&#039;y a pas d&#039;{{c|ImportError}} ou autres. Pensez à le faire dans le virtualenv.&lt;br /&gt;
=== Erreurs web ===&lt;br /&gt;
Pour checker les changements il suffit de taper l&#039;url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs : {{c|/var/log/uwsgi/nom_binet}} ou {{c|/hosting/log/nom_binet}}.&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error}} pas en gras : c&#039;est une erreur de {{c|uwsgi}} qui n&#039;arrive pas à :&lt;br /&gt;
** trouver ton site&lt;br /&gt;
** trouver le virtualenv&lt;br /&gt;
** une exception est levée au démarrage du serveur ({{c|ImportError}} notamment).&lt;br /&gt;
&lt;br /&gt;
Tu peux lire les logs dans {{c|/var/log/uwsgi/&amp;lt;ton binet&amp;gt;/&amp;lt;ton site&amp;gt;.log}} et vérifier où {{c|uwsgi}} va chercher ton site dans {{c|/etc/uwsgi.d/&amp;lt;ton site&amp;gt;.json}}. S&#039;il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi même.&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error(500)}} en gras : c&#039;est django. Actives les mails pour avoir des détails, mais tu as probablement oublié de lancer les migrations sur une base sql vide.&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8755</id>
		<title>Tuto pour le déploiement des sites Django</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8755"/>
		<updated>2018-04-05T07:20:54Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : /* Environnement virtuel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Connexion ==&lt;br /&gt;
&lt;br /&gt;
Assurez vous tout d&#039;abord d&#039;être administrateur de votre binet. Il faut attendre au moins une heure pour que les modifications soient prises en compte.&lt;br /&gt;
&lt;br /&gt;
Ensuite vous ouvrez votre terminal et vous vous connectez sur le serveur avec la commande ssh.&lt;br /&gt;
 ssh prenom.nom@129.104.201.52&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez tapé votre mot de passe frankiz, vous arrivez sur le serveur dans un dossier à votre nom. Il y a un fichier {{c|README.txt}} qui devrait donner un certain nombre d&#039;informations sur le fonctionnement de kevarzh ou encore sur certaines modifs à faire sur le code de votre site. Vous pouvez vous diriger sur le serveur par les commandes habituelles. Votre dossier personnel se trouve dans {{c|/hosting/user/prenom.nom}}. &lt;br /&gt;
&lt;br /&gt;
Si jamais vous voulez lancer une commande ayant besoin d&#039;internet (par exemple des commandes git) n&#039;oubliez pas de mettre {{c|proxychains}} devant votre commande.&lt;br /&gt;
&lt;br /&gt;
== Copie des fichiers ==&lt;br /&gt;
&lt;br /&gt;
Le dossier {{c|/hosting/www/nom_binet}} contient (au moins) un dossier par site. Si vous n&#039;avez qu&#039;un site, le dossier par défaut est {{c|htdocs}}. C&#039;est dans un de ces dossiers que vous allez devoir copier le code de votre site.&lt;br /&gt;
 scp -r /code_site prenom.nom@129.104.201.52:/hosting/wwww/nom_binet/version_site&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
&lt;br /&gt;
Attention ! L&#039;espace réservé à chaque binet est limité. Il faut se méfier quand on fait une copie, notamment a l&#039;environnement virtuel. D&#039;abord il pèse lourd, en plus il faudra que vous le remplaciez de toute façon. Autant ne pas le copier dès le départ...&lt;br /&gt;
Pour savoir si vous avez dépassé votre quota :&lt;br /&gt;
 quota -sg&lt;br /&gt;
Cette commande affiche, pour chaque binet, l&#039;espace utilisé, une «soft limit» et la vraie («hard») limit.&lt;br /&gt;
&lt;br /&gt;
== Environnement virtuel ==&lt;br /&gt;
&lt;br /&gt;
Une fois que le code du site est en place, il créer un environnement virtuel, c&#039;est-à-dire une copie locale de l&#039;interpréteur Python correspondant à la version que vous utilisez pour votre site :&lt;br /&gt;
 virtualenv -p /usr/bin/python3.6 venv&lt;br /&gt;
Il est important que vous nommiez le dossier {{c|venv}}.&lt;br /&gt;
&lt;br /&gt;
À partir de là, &#039;&#039;&#039;toutes&#039;&#039;&#039; les commandes utilisant python doivent être exécutées dans le virtualenv. Pour rentrer dans le virtualenv, vous devez lancer :&lt;br /&gt;
 source venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
Si cela a fonctionné, vous aurez {{c|(venv)}} en préfixe dans votre terminal :&lt;br /&gt;
 (venv) prenom.nom@ostizan:/hosting/www/site_binet/htdocs&lt;br /&gt;
&lt;br /&gt;
Une fois dans le venv, vous pouvez installer les dépendances nécessaires :&lt;br /&gt;
 pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
== Adaptations ==&lt;br /&gt;
Certaines adaptations sont nécessaires pour faire fonctionner le site. La documentation officielle de Django fournit une bonne [https://docs.djangoproject.com/fr/1.10/howto/deployment/checklist/ checklist]. Là, pas besoin de se casser la tête il suffit de suivre la liste, des liens sont là pour expliquer en détails ce que l&#039;on fait à chaque fois. Les points essentiels à ne surtout pas sauter sont :&lt;br /&gt;
* Mettre {{c|DEBUG}} à {{False}}&lt;br /&gt;
* {{c|SECRET_KEY}}:&lt;br /&gt;
Si vous utilisez un repo git, il ne faut pas mettre cette clef dans le code.&lt;br /&gt;
Un snippet possible est le suivant:&lt;br /&gt;
 keyfile = os.path.join(BASE_DIR, &amp;quot;secret.key&amp;quot;)&lt;br /&gt;
 if not os.path.exists(keyfile):&lt;br /&gt;
     with open(keyfile, &amp;quot;wb&amp;quot;) as f:&lt;br /&gt;
         f.write(base64.b64_encode(os.urandom(30)))&lt;br /&gt;
 with open(keyfile, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
     SECRET_KEY = f.read().strip()&lt;br /&gt;
&lt;br /&gt;
La clef est contenue dans le fichier {{c|secret.key}} (généré automatiquement s&#039;il n&#039;existe pas) qu&#039;il suffit de mettre dans le {{c|.gitignore}}.&lt;br /&gt;
&lt;br /&gt;
* Mettre {{c|ALLOWED_HOST}} à {{c|[&amp;quot;*&amp;quot;]}}, le filtrage a lieu avant Django&lt;br /&gt;
* STATIC_ROOT, STATIC_URL, MEDIA_ROOT et MEDIA_URL:&lt;br /&gt;
 STATIC_URL = &#039;/assets/static/&#039;&lt;br /&gt;
 STATIC_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/static/&amp;quot;)&lt;br /&gt;
 MEDIA_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/media/&amp;quot;)&lt;br /&gt;
 MEDIA_URL = &#039;/assets/media/&#039;&lt;br /&gt;
&lt;br /&gt;
* emails (indispensable pour être averti des erreurs 500)&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &amp;quot;nom_du_binet@binets.polytechnique.fr&amp;quot;&lt;br /&gt;
 # voir https://portail.polytechnique.edu/dsi/eleves/mail-binets&lt;br /&gt;
 SERVER_EMAIL = DEFAULT_FROM_EMAIL&lt;br /&gt;
 ADMINS = [(&amp;quot;Webmaster&amp;quot;, DEFAULT_FROM_EMAIL)]&lt;br /&gt;
&lt;br /&gt;
* base de donnée : n&#039;utilisez pas sqlite ! Nous avons eu des problèmes par le passé, et les bases de données sql sont sauvegardées toutes les semaines.&lt;br /&gt;
Un snippet utilisable est :&lt;br /&gt;
 if DEBUG:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
       &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
       &#039;NAME&#039;: os.path.join(BASE_DIR, &#039;db.sqlite3&#039;),&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 else:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;read_default_file&#039;: os.path.join(BASE_DIR, &#039;my.cnf&#039;),&lt;br /&gt;
        },&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Placer les mots de passe dans le fichier {{c|my.cnf}}:&lt;br /&gt;
 [client]&lt;br /&gt;
 database = NAME&lt;br /&gt;
 user = USER&lt;br /&gt;
 password = PASSWORD&lt;br /&gt;
 default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
Bien sûr il faut ajouter ce fichier dans le gitignore.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;authentification par CAS sous Django ==&lt;br /&gt;
&lt;br /&gt;
* Demander sur [https://panix.binets.fr Panix] à utiliser cette authentification. Préciser les éventuels attributs supplémentaires nécessaires (promo, section, ...).&lt;br /&gt;
* Installer le paquet django-cas-ng :&lt;br /&gt;
  pip install django-cas-ng&lt;br /&gt;
* Ajouter ce paquet à la liste des applications :&lt;br /&gt;
  INSTALLED_APPS = [&lt;br /&gt;
    ...&lt;br /&gt;
    &#039;django_cas_ng&#039;,&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Configurer la connection au serveur CAS du BR : &lt;br /&gt;
  AUTHENTICATION_BACKENDS = (&lt;br /&gt;
    &#039;django.contrib.auth.backends.ModelBackend&#039;,&lt;br /&gt;
    &#039;django_cas_ng.backends.CASBackend&#039;,&lt;br /&gt;
  )&lt;br /&gt;
  CAS_SERVER_URL = &amp;quot;https://cas.binets.fr/&amp;quot;&lt;br /&gt;
* Renseigner les pages de connexion (dans {{c|my_project/urls.py}} par exemple): &lt;br /&gt;
  from django_cas_ng.views import login, logout&lt;br /&gt;
  &lt;br /&gt;
  urlpatterns = [&lt;br /&gt;
    ...&lt;br /&gt;
    url(r&#039;^login$&#039;, login, name=&#039;cas_ng_login&#039;),&lt;br /&gt;
    url(r&#039;^logout$&#039;, logout, name=&#039;cas_ng_logout&#039;),&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Ajouter l&#039;URL d&#039;entrée : &lt;br /&gt;
  LOGIN_URL = &amp;quot;login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Attention à forcer l&#039;authentification pour les pages concernées : &lt;br /&gt;
  from django.contrib.auth.decorators import login_required&lt;br /&gt;
  &lt;br /&gt;
  @login_required&lt;br /&gt;
  def my_awesome_view(request):&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
À noter : &lt;br /&gt;
* le nom de l&#039;utilisateur connecté se trouve dans : request.user.username (accessible dans n&#039;importe quelle vue).&lt;br /&gt;
* les attributs du [[LDAP]] peuvent être disponibles (demander les attributs nécessaires  lors de la mise en place du CAS). Ils sont alors disponibles dans request.session[&#039;attributes&#039;] .&lt;br /&gt;
* plus d&#039;option de configuration sont présentés [https://github.com/mingchen/django-cas-ng/tree/master/django_cas_ng ici]&lt;br /&gt;
&lt;br /&gt;
== À chaque modification... ==&lt;br /&gt;
&lt;br /&gt;
* du code python quel qu&#039;il soit :&lt;br /&gt;
 touch /var/run/please/restart&lt;br /&gt;
* du schéma SQL (sous Django):&lt;br /&gt;
 python manage.py migrate&lt;br /&gt;
* des fichiers statiques (sous Django):&lt;br /&gt;
 python manage.py collectstatic&lt;br /&gt;
Il faut attendre 1 ou deux minutes que le système enregistre la modification, quand c&#039;est fait il affiche un message dans le terminal.&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
=== Erreurs python ===&lt;br /&gt;
La commande&lt;br /&gt;
 python manage.py runserver&lt;br /&gt;
permet de vérifier qu&#039;il n&#039;y a pas d&#039;{{c|ImportError}} ou autres. Pensez à le faire dans le virtualenv.&lt;br /&gt;
=== Erreurs web ===&lt;br /&gt;
Pour checker les changements il suffit de taper l&#039;url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs : {{c|/var/log/uwsgi/nom_binet}} ou {{c|/hosting/log/nom_binet}}.&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error}} pas en gras : c&#039;est une erreur de {{c|uwsgi}} qui n&#039;arrive pas à :&lt;br /&gt;
** trouver ton site&lt;br /&gt;
** trouver le virtualenv&lt;br /&gt;
** une exception est levée au démarrage du serveur ({{c|ImportError}} notamment).&lt;br /&gt;
&lt;br /&gt;
Tu peux lire les logs dans {{c|/var/log/uwsgi/&amp;lt;ton binet&amp;gt;/&amp;lt;ton site&amp;gt;.log}} et vérifier où {{c|uwsgi}} va chercher ton site dans {{c|/etc/uwsgi.d/&amp;lt;ton site&amp;gt;.json}}. S&#039;il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi même.&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error(500)}} en gras : c&#039;est django. Actives les mails pour avoir des détails, mais tu as probablement oublié de lancer les migrations sur une base sql vide.&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8754</id>
		<title>Tuto pour le déploiement des sites Django</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8754"/>
		<updated>2018-04-05T07:19:12Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : /* Virtual environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Connexion ==&lt;br /&gt;
&lt;br /&gt;
Assurez vous tout d&#039;abord d&#039;être administrateur de votre binet. Il faut attendre au moins une heure pour que les modifications soient prises en compte.&lt;br /&gt;
&lt;br /&gt;
Ensuite vous ouvrez votre terminal et vous vous connectez sur le serveur avec la commande ssh.&lt;br /&gt;
 ssh prenom.nom@129.104.201.52&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez tapé votre mot de passe frankiz, vous arrivez sur le serveur dans un dossier à votre nom. Il y a un fichier {{c|README.txt}} qui devrait donner un certain nombre d&#039;informations sur le fonctionnement de kevarzh ou encore sur certaines modifs à faire sur le code de votre site. Vous pouvez vous diriger sur le serveur par les commandes habituelles. Votre dossier personnel se trouve dans {{c|/hosting/user/prenom.nom}}. &lt;br /&gt;
&lt;br /&gt;
Si jamais vous voulez lancer une commande ayant besoin d&#039;internet (par exemple des commandes git) n&#039;oubliez pas de mettre {{c|proxychains}} devant votre commande.&lt;br /&gt;
&lt;br /&gt;
== Copie des fichiers ==&lt;br /&gt;
&lt;br /&gt;
Le dossier {{c|/hosting/www/nom_binet}} contient (au moins) un dossier par site. Si vous n&#039;avez qu&#039;un site, le dossier par défaut est {{c|htdocs}}. C&#039;est dans un de ces dossiers que vous allez devoir copier le code de votre site.&lt;br /&gt;
 scp -r /code_site prenom.nom@129.104.201.52:/hosting/wwww/nom_binet/version_site&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
&lt;br /&gt;
Attention ! L&#039;espace réservé à chaque binet est limité. Il faut se méfier quand on fait une copie, notamment a l&#039;environnement virtuel. D&#039;abord il pèse lourd, en plus il faudra que vous le remplaciez de toute façon. Autant ne pas le copier dès le départ...&lt;br /&gt;
Pour savoir si vous avez dépassé votre quota :&lt;br /&gt;
 quota -sg&lt;br /&gt;
Cette commande affiche, pour chaque binet, l&#039;espace utilisé, une «soft limit» et la vraie («hard») limit.&lt;br /&gt;
&lt;br /&gt;
== Environnement virtuel ==&lt;br /&gt;
&lt;br /&gt;
Une fois que le code du site est en place, il créer un environnement virtuel, c&#039;est-à-dire une copie locale de l&#039;interpréteur Python correspondant à la version que vous utilisez pour votre site :&lt;br /&gt;
 virtualenv -p /usr/bin/python3.6 venv&lt;br /&gt;
Il est important que vous nommiez le dossier {{c|venv}}.&lt;br /&gt;
&lt;br /&gt;
À partir de là, &#039;&#039;&#039;toutes&#039;&#039;&#039; les commandes utilisant python doivent être exécutées dans le virtualenv. Pour rentrer dans le virtualenv, vous devez lancer :&lt;br /&gt;
 source venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
Une fois dans le venv, vous pouvez installer les dépendances nécessaires :&lt;br /&gt;
 pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
== Adaptations ==&lt;br /&gt;
Certaines adaptations sont nécessaires pour faire fonctionner le site. La documentation officielle de Django fournit une bonne [https://docs.djangoproject.com/fr/1.10/howto/deployment/checklist/ checklist]. Là, pas besoin de se casser la tête il suffit de suivre la liste, des liens sont là pour expliquer en détails ce que l&#039;on fait à chaque fois. Les points essentiels à ne surtout pas sauter sont :&lt;br /&gt;
* Mettre {{c|DEBUG}} à {{False}}&lt;br /&gt;
* {{c|SECRET_KEY}}:&lt;br /&gt;
Si vous utilisez un repo git, il ne faut pas mettre cette clef dans le code.&lt;br /&gt;
Un snippet possible est le suivant:&lt;br /&gt;
 keyfile = os.path.join(BASE_DIR, &amp;quot;secret.key&amp;quot;)&lt;br /&gt;
 if not os.path.exists(keyfile):&lt;br /&gt;
     with open(keyfile, &amp;quot;wb&amp;quot;) as f:&lt;br /&gt;
         f.write(base64.b64_encode(os.urandom(30)))&lt;br /&gt;
 with open(keyfile, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
     SECRET_KEY = f.read().strip()&lt;br /&gt;
&lt;br /&gt;
La clef est contenue dans le fichier {{c|secret.key}} (généré automatiquement s&#039;il n&#039;existe pas) qu&#039;il suffit de mettre dans le {{c|.gitignore}}.&lt;br /&gt;
&lt;br /&gt;
* Mettre {{c|ALLOWED_HOST}} à {{c|[&amp;quot;*&amp;quot;]}}, le filtrage a lieu avant Django&lt;br /&gt;
* STATIC_ROOT, STATIC_URL, MEDIA_ROOT et MEDIA_URL:&lt;br /&gt;
 STATIC_URL = &#039;/assets/static/&#039;&lt;br /&gt;
 STATIC_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/static/&amp;quot;)&lt;br /&gt;
 MEDIA_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/media/&amp;quot;)&lt;br /&gt;
 MEDIA_URL = &#039;/assets/media/&#039;&lt;br /&gt;
&lt;br /&gt;
* emails (indispensable pour être averti des erreurs 500)&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &amp;quot;nom_du_binet@binets.polytechnique.fr&amp;quot;&lt;br /&gt;
 # voir https://portail.polytechnique.edu/dsi/eleves/mail-binets&lt;br /&gt;
 SERVER_EMAIL = DEFAULT_FROM_EMAIL&lt;br /&gt;
 ADMINS = [(&amp;quot;Webmaster&amp;quot;, DEFAULT_FROM_EMAIL)]&lt;br /&gt;
&lt;br /&gt;
* base de donnée : n&#039;utilisez pas sqlite ! Nous avons eu des problèmes par le passé, et les bases de données sql sont sauvegardées toutes les semaines.&lt;br /&gt;
Un snippet utilisable est :&lt;br /&gt;
 if DEBUG:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
       &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
       &#039;NAME&#039;: os.path.join(BASE_DIR, &#039;db.sqlite3&#039;),&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 else:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;read_default_file&#039;: os.path.join(BASE_DIR, &#039;my.cnf&#039;),&lt;br /&gt;
        },&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Placer les mots de passe dans le fichier {{c|my.cnf}}:&lt;br /&gt;
 [client]&lt;br /&gt;
 database = NAME&lt;br /&gt;
 user = USER&lt;br /&gt;
 password = PASSWORD&lt;br /&gt;
 default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
Bien sûr il faut ajouter ce fichier dans le gitignore.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;authentification par CAS sous Django ==&lt;br /&gt;
&lt;br /&gt;
* Demander sur [https://panix.binets.fr Panix] à utiliser cette authentification. Préciser les éventuels attributs supplémentaires nécessaires (promo, section, ...).&lt;br /&gt;
* Installer le paquet django-cas-ng :&lt;br /&gt;
  pip install django-cas-ng&lt;br /&gt;
* Ajouter ce paquet à la liste des applications :&lt;br /&gt;
  INSTALLED_APPS = [&lt;br /&gt;
    ...&lt;br /&gt;
    &#039;django_cas_ng&#039;,&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Configurer la connection au serveur CAS du BR : &lt;br /&gt;
  AUTHENTICATION_BACKENDS = (&lt;br /&gt;
    &#039;django.contrib.auth.backends.ModelBackend&#039;,&lt;br /&gt;
    &#039;django_cas_ng.backends.CASBackend&#039;,&lt;br /&gt;
  )&lt;br /&gt;
  CAS_SERVER_URL = &amp;quot;https://cas.binets.fr/&amp;quot;&lt;br /&gt;
* Renseigner les pages de connexion (dans {{c|my_project/urls.py}} par exemple): &lt;br /&gt;
  from django_cas_ng.views import login, logout&lt;br /&gt;
  &lt;br /&gt;
  urlpatterns = [&lt;br /&gt;
    ...&lt;br /&gt;
    url(r&#039;^login$&#039;, login, name=&#039;cas_ng_login&#039;),&lt;br /&gt;
    url(r&#039;^logout$&#039;, logout, name=&#039;cas_ng_logout&#039;),&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Ajouter l&#039;URL d&#039;entrée : &lt;br /&gt;
  LOGIN_URL = &amp;quot;login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Attention à forcer l&#039;authentification pour les pages concernées : &lt;br /&gt;
  from django.contrib.auth.decorators import login_required&lt;br /&gt;
  &lt;br /&gt;
  @login_required&lt;br /&gt;
  def my_awesome_view(request):&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
À noter : &lt;br /&gt;
* le nom de l&#039;utilisateur connecté se trouve dans : request.user.username (accessible dans n&#039;importe quelle vue).&lt;br /&gt;
* les attributs du [[LDAP]] peuvent être disponibles (demander les attributs nécessaires  lors de la mise en place du CAS). Ils sont alors disponibles dans request.session[&#039;attributes&#039;] .&lt;br /&gt;
* plus d&#039;option de configuration sont présentés [https://github.com/mingchen/django-cas-ng/tree/master/django_cas_ng ici]&lt;br /&gt;
&lt;br /&gt;
== À chaque modification... ==&lt;br /&gt;
&lt;br /&gt;
* du code python quel qu&#039;il soit :&lt;br /&gt;
 touch /var/run/please/restart&lt;br /&gt;
* du schéma SQL (sous Django):&lt;br /&gt;
 python manage.py migrate&lt;br /&gt;
* des fichiers statiques (sous Django):&lt;br /&gt;
 python manage.py collectstatic&lt;br /&gt;
Il faut attendre 1 ou deux minutes que le système enregistre la modification, quand c&#039;est fait il affiche un message dans le terminal.&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
=== Erreurs python ===&lt;br /&gt;
La commande&lt;br /&gt;
 python manage.py runserver&lt;br /&gt;
permet de vérifier qu&#039;il n&#039;y a pas d&#039;{{c|ImportError}} ou autres. Pensez à le faire dans le virtualenv.&lt;br /&gt;
=== Erreurs web ===&lt;br /&gt;
Pour checker les changements il suffit de taper l&#039;url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs : {{c|/var/log/uwsgi/nom_binet}} ou {{c|/hosting/log/nom_binet}}.&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error}} pas en gras : c&#039;est une erreur de {{c|uwsgi}} qui n&#039;arrive pas à :&lt;br /&gt;
** trouver ton site&lt;br /&gt;
** trouver le virtualenv&lt;br /&gt;
** une exception est levée au démarrage du serveur ({{c|ImportError}} notamment).&lt;br /&gt;
&lt;br /&gt;
Tu peux lire les logs dans {{c|/var/log/uwsgi/&amp;lt;ton binet&amp;gt;/&amp;lt;ton site&amp;gt;.log}} et vérifier où {{c|uwsgi}} va chercher ton site dans {{c|/etc/uwsgi.d/&amp;lt;ton site&amp;gt;.json}}. S&#039;il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi même.&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error(500)}} en gras : c&#039;est django. Actives les mails pour avoir des détails, mais tu as probablement oublié de lancer les migrations sur une base sql vide.&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8753</id>
		<title>Tuto pour le déploiement des sites Django</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8753"/>
		<updated>2018-04-05T07:17:42Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : /* Mise en place de l&amp;#039;authentification par CAS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Connexion ==&lt;br /&gt;
&lt;br /&gt;
Assurez vous tout d&#039;abord d&#039;être administrateur de votre binet. Il faut attendre au moins une heure pour que les modifications soient prises en compte.&lt;br /&gt;
&lt;br /&gt;
Ensuite vous ouvrez votre terminal et vous vous connectez sur le serveur avec la commande ssh.&lt;br /&gt;
 ssh prenom.nom@129.104.201.52&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez tapé votre mot de passe frankiz, vous arrivez sur le serveur dans un dossier à votre nom. Il y a un fichier {{c|README.txt}} qui devrait donner un certain nombre d&#039;informations sur le fonctionnement de kevarzh ou encore sur certaines modifs à faire sur le code de votre site. Vous pouvez vous diriger sur le serveur par les commandes habituelles. Votre dossier personnel se trouve dans {{c|/hosting/user/prenom.nom}}. &lt;br /&gt;
&lt;br /&gt;
Si jamais vous voulez lancer une commande ayant besoin d&#039;internet (par exemple des commandes git) n&#039;oubliez pas de mettre {{c|proxychains}} devant votre commande.&lt;br /&gt;
&lt;br /&gt;
== Copie des fichiers ==&lt;br /&gt;
&lt;br /&gt;
Le dossier {{c|/hosting/www/nom_binet}} contient (au moins) un dossier par site. Si vous n&#039;avez qu&#039;un site, le dossier par défaut est {{c|htdocs}}. C&#039;est dans un de ces dossiers que vous allez devoir copier le code de votre site.&lt;br /&gt;
 scp -r /code_site prenom.nom@129.104.201.52:/hosting/wwww/nom_binet/version_site&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
&lt;br /&gt;
Attention ! L&#039;espace réservé à chaque binet est limité. Il faut se méfier quand on fait une copie, notamment a l&#039;environnement virtuel. D&#039;abord il pèse lourd, en plus il faudra que vous le remplaciez de toute façon. Autant ne pas le copier dès le départ...&lt;br /&gt;
Pour savoir si vous avez dépassé votre quota :&lt;br /&gt;
 quota -sg&lt;br /&gt;
Cette commande affiche, pour chaque binet, l&#039;espace utilisé, une «soft limit» et la vraie («hard») limit.&lt;br /&gt;
&lt;br /&gt;
== Virtual environment ==&lt;br /&gt;
&lt;br /&gt;
Une fois que le code du site est en place, il faut recréer l&#039;environnement virtuel.&lt;br /&gt;
 virtualenv -p /usr/bin/python3 venv&lt;br /&gt;
Il est important que vous nommiez le dossier {{c|venv}}.&lt;br /&gt;
&lt;br /&gt;
À partir de là, &#039;&#039;&#039;toutes&#039;&#039;&#039; les commandes utilisant python doivent être exécutées dans le virtualenv. Pour rentrer dans le virtualenv, vous devez lancer :&lt;br /&gt;
 source venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
Une fois dans le venv, vous pouvez installer les dépendances nécessaires :&lt;br /&gt;
 proxychains pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
== Adaptations ==&lt;br /&gt;
Certaines adaptations sont nécessaires pour faire fonctionner le site. La documentation officielle de Django fournit une bonne [https://docs.djangoproject.com/fr/1.10/howto/deployment/checklist/ checklist]. Là, pas besoin de se casser la tête il suffit de suivre la liste, des liens sont là pour expliquer en détails ce que l&#039;on fait à chaque fois. Les points essentiels à ne surtout pas sauter sont :&lt;br /&gt;
* Mettre {{c|DEBUG}} à {{False}}&lt;br /&gt;
* {{c|SECRET_KEY}}:&lt;br /&gt;
Si vous utilisez un repo git, il ne faut pas mettre cette clef dans le code.&lt;br /&gt;
Un snippet possible est le suivant:&lt;br /&gt;
 keyfile = os.path.join(BASE_DIR, &amp;quot;secret.key&amp;quot;)&lt;br /&gt;
 if not os.path.exists(keyfile):&lt;br /&gt;
     with open(keyfile, &amp;quot;wb&amp;quot;) as f:&lt;br /&gt;
         f.write(base64.b64_encode(os.urandom(30)))&lt;br /&gt;
 with open(keyfile, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
     SECRET_KEY = f.read().strip()&lt;br /&gt;
&lt;br /&gt;
La clef est contenue dans le fichier {{c|secret.key}} (généré automatiquement s&#039;il n&#039;existe pas) qu&#039;il suffit de mettre dans le {{c|.gitignore}}.&lt;br /&gt;
&lt;br /&gt;
* Mettre {{c|ALLOWED_HOST}} à {{c|[&amp;quot;*&amp;quot;]}}, le filtrage a lieu avant Django&lt;br /&gt;
* STATIC_ROOT, STATIC_URL, MEDIA_ROOT et MEDIA_URL:&lt;br /&gt;
 STATIC_URL = &#039;/assets/static/&#039;&lt;br /&gt;
 STATIC_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/static/&amp;quot;)&lt;br /&gt;
 MEDIA_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/media/&amp;quot;)&lt;br /&gt;
 MEDIA_URL = &#039;/assets/media/&#039;&lt;br /&gt;
&lt;br /&gt;
* emails (indispensable pour être averti des erreurs 500)&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &amp;quot;nom_du_binet@binets.polytechnique.fr&amp;quot;&lt;br /&gt;
 # voir https://portail.polytechnique.edu/dsi/eleves/mail-binets&lt;br /&gt;
 SERVER_EMAIL = DEFAULT_FROM_EMAIL&lt;br /&gt;
 ADMINS = [(&amp;quot;Webmaster&amp;quot;, DEFAULT_FROM_EMAIL)]&lt;br /&gt;
&lt;br /&gt;
* base de donnée : n&#039;utilisez pas sqlite ! Nous avons eu des problèmes par le passé, et les bases de données sql sont sauvegardées toutes les semaines.&lt;br /&gt;
Un snippet utilisable est :&lt;br /&gt;
 if DEBUG:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
       &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
       &#039;NAME&#039;: os.path.join(BASE_DIR, &#039;db.sqlite3&#039;),&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 else:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;read_default_file&#039;: os.path.join(BASE_DIR, &#039;my.cnf&#039;),&lt;br /&gt;
        },&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Placer les mots de passe dans le fichier {{c|my.cnf}}:&lt;br /&gt;
 [client]&lt;br /&gt;
 database = NAME&lt;br /&gt;
 user = USER&lt;br /&gt;
 password = PASSWORD&lt;br /&gt;
 default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
Bien sûr il faut ajouter ce fichier dans le gitignore.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;authentification par CAS sous Django ==&lt;br /&gt;
&lt;br /&gt;
* Demander sur [https://panix.binets.fr Panix] à utiliser cette authentification. Préciser les éventuels attributs supplémentaires nécessaires (promo, section, ...).&lt;br /&gt;
* Installer le paquet django-cas-ng :&lt;br /&gt;
  pip install django-cas-ng&lt;br /&gt;
* Ajouter ce paquet à la liste des applications :&lt;br /&gt;
  INSTALLED_APPS = [&lt;br /&gt;
    ...&lt;br /&gt;
    &#039;django_cas_ng&#039;,&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Configurer la connection au serveur CAS du BR : &lt;br /&gt;
  AUTHENTICATION_BACKENDS = (&lt;br /&gt;
    &#039;django.contrib.auth.backends.ModelBackend&#039;,&lt;br /&gt;
    &#039;django_cas_ng.backends.CASBackend&#039;,&lt;br /&gt;
  )&lt;br /&gt;
  CAS_SERVER_URL = &amp;quot;https://cas.binets.fr/&amp;quot;&lt;br /&gt;
* Renseigner les pages de connexion (dans {{c|my_project/urls.py}} par exemple): &lt;br /&gt;
  from django_cas_ng.views import login, logout&lt;br /&gt;
  &lt;br /&gt;
  urlpatterns = [&lt;br /&gt;
    ...&lt;br /&gt;
    url(r&#039;^login$&#039;, login, name=&#039;cas_ng_login&#039;),&lt;br /&gt;
    url(r&#039;^logout$&#039;, logout, name=&#039;cas_ng_logout&#039;),&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Ajouter l&#039;URL d&#039;entrée : &lt;br /&gt;
  LOGIN_URL = &amp;quot;login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Attention à forcer l&#039;authentification pour les pages concernées : &lt;br /&gt;
  from django.contrib.auth.decorators import login_required&lt;br /&gt;
  &lt;br /&gt;
  @login_required&lt;br /&gt;
  def my_awesome_view(request):&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
À noter : &lt;br /&gt;
* le nom de l&#039;utilisateur connecté se trouve dans : request.user.username (accessible dans n&#039;importe quelle vue).&lt;br /&gt;
* les attributs du [[LDAP]] peuvent être disponibles (demander les attributs nécessaires  lors de la mise en place du CAS). Ils sont alors disponibles dans request.session[&#039;attributes&#039;] .&lt;br /&gt;
* plus d&#039;option de configuration sont présentés [https://github.com/mingchen/django-cas-ng/tree/master/django_cas_ng ici]&lt;br /&gt;
&lt;br /&gt;
== À chaque modification... ==&lt;br /&gt;
&lt;br /&gt;
* du code python quel qu&#039;il soit :&lt;br /&gt;
 touch /var/run/please/restart&lt;br /&gt;
* du schéma SQL (sous Django):&lt;br /&gt;
 python manage.py migrate&lt;br /&gt;
* des fichiers statiques (sous Django):&lt;br /&gt;
 python manage.py collectstatic&lt;br /&gt;
Il faut attendre 1 ou deux minutes que le système enregistre la modification, quand c&#039;est fait il affiche un message dans le terminal.&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
=== Erreurs python ===&lt;br /&gt;
La commande&lt;br /&gt;
 python manage.py runserver&lt;br /&gt;
permet de vérifier qu&#039;il n&#039;y a pas d&#039;{{c|ImportError}} ou autres. Pensez à le faire dans le virtualenv.&lt;br /&gt;
=== Erreurs web ===&lt;br /&gt;
Pour checker les changements il suffit de taper l&#039;url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs : {{c|/var/log/uwsgi/nom_binet}} ou {{c|/hosting/log/nom_binet}}.&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error}} pas en gras : c&#039;est une erreur de {{c|uwsgi}} qui n&#039;arrive pas à :&lt;br /&gt;
** trouver ton site&lt;br /&gt;
** trouver le virtualenv&lt;br /&gt;
** une exception est levée au démarrage du serveur ({{c|ImportError}} notamment).&lt;br /&gt;
&lt;br /&gt;
Tu peux lire les logs dans {{c|/var/log/uwsgi/&amp;lt;ton binet&amp;gt;/&amp;lt;ton site&amp;gt;.log}} et vérifier où {{c|uwsgi}} va chercher ton site dans {{c|/etc/uwsgi.d/&amp;lt;ton site&amp;gt;.json}}. S&#039;il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi même.&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error(500)}} en gras : c&#039;est django. Actives les mails pour avoir des détails, mais tu as probablement oublié de lancer les migrations sur une base sql vide.&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8752</id>
		<title>Tuto pour le déploiement des sites Django</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Tuto_pour_le_d%C3%A9ploiement_des_sites_Django&amp;diff=8752"/>
		<updated>2018-04-05T07:17:02Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : /* À chaque modification... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Connexion ==&lt;br /&gt;
&lt;br /&gt;
Assurez vous tout d&#039;abord d&#039;être administrateur de votre binet. Il faut attendre au moins une heure pour que les modifications soient prises en compte.&lt;br /&gt;
&lt;br /&gt;
Ensuite vous ouvrez votre terminal et vous vous connectez sur le serveur avec la commande ssh.&lt;br /&gt;
 ssh prenom.nom@129.104.201.52&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez tapé votre mot de passe frankiz, vous arrivez sur le serveur dans un dossier à votre nom. Il y a un fichier {{c|README.txt}} qui devrait donner un certain nombre d&#039;informations sur le fonctionnement de kevarzh ou encore sur certaines modifs à faire sur le code de votre site. Vous pouvez vous diriger sur le serveur par les commandes habituelles. Votre dossier personnel se trouve dans {{c|/hosting/user/prenom.nom}}. &lt;br /&gt;
&lt;br /&gt;
Si jamais vous voulez lancer une commande ayant besoin d&#039;internet (par exemple des commandes git) n&#039;oubliez pas de mettre {{c|proxychains}} devant votre commande.&lt;br /&gt;
&lt;br /&gt;
== Copie des fichiers ==&lt;br /&gt;
&lt;br /&gt;
Le dossier {{c|/hosting/www/nom_binet}} contient (au moins) un dossier par site. Si vous n&#039;avez qu&#039;un site, le dossier par défaut est {{c|htdocs}}. C&#039;est dans un de ces dossiers que vous allez devoir copier le code de votre site.&lt;br /&gt;
 scp -r /code_site prenom.nom@129.104.201.52:/hosting/wwww/nom_binet/version_site&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
&lt;br /&gt;
Attention ! L&#039;espace réservé à chaque binet est limité. Il faut se méfier quand on fait une copie, notamment a l&#039;environnement virtuel. D&#039;abord il pèse lourd, en plus il faudra que vous le remplaciez de toute façon. Autant ne pas le copier dès le départ...&lt;br /&gt;
Pour savoir si vous avez dépassé votre quota :&lt;br /&gt;
 quota -sg&lt;br /&gt;
Cette commande affiche, pour chaque binet, l&#039;espace utilisé, une «soft limit» et la vraie («hard») limit.&lt;br /&gt;
&lt;br /&gt;
== Virtual environment ==&lt;br /&gt;
&lt;br /&gt;
Une fois que le code du site est en place, il faut recréer l&#039;environnement virtuel.&lt;br /&gt;
 virtualenv -p /usr/bin/python3 venv&lt;br /&gt;
Il est important que vous nommiez le dossier {{c|venv}}.&lt;br /&gt;
&lt;br /&gt;
À partir de là, &#039;&#039;&#039;toutes&#039;&#039;&#039; les commandes utilisant python doivent être exécutées dans le virtualenv. Pour rentrer dans le virtualenv, vous devez lancer :&lt;br /&gt;
 source venv/bin/activate&lt;br /&gt;
&lt;br /&gt;
Une fois dans le venv, vous pouvez installer les dépendances nécessaires :&lt;br /&gt;
 proxychains pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
== Adaptations ==&lt;br /&gt;
Certaines adaptations sont nécessaires pour faire fonctionner le site. La documentation officielle de Django fournit une bonne [https://docs.djangoproject.com/fr/1.10/howto/deployment/checklist/ checklist]. Là, pas besoin de se casser la tête il suffit de suivre la liste, des liens sont là pour expliquer en détails ce que l&#039;on fait à chaque fois. Les points essentiels à ne surtout pas sauter sont :&lt;br /&gt;
* Mettre {{c|DEBUG}} à {{False}}&lt;br /&gt;
* {{c|SECRET_KEY}}:&lt;br /&gt;
Si vous utilisez un repo git, il ne faut pas mettre cette clef dans le code.&lt;br /&gt;
Un snippet possible est le suivant:&lt;br /&gt;
 keyfile = os.path.join(BASE_DIR, &amp;quot;secret.key&amp;quot;)&lt;br /&gt;
 if not os.path.exists(keyfile):&lt;br /&gt;
     with open(keyfile, &amp;quot;wb&amp;quot;) as f:&lt;br /&gt;
         f.write(base64.b64_encode(os.urandom(30)))&lt;br /&gt;
 with open(keyfile, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
     SECRET_KEY = f.read().strip()&lt;br /&gt;
&lt;br /&gt;
La clef est contenue dans le fichier {{c|secret.key}} (généré automatiquement s&#039;il n&#039;existe pas) qu&#039;il suffit de mettre dans le {{c|.gitignore}}.&lt;br /&gt;
&lt;br /&gt;
* Mettre {{c|ALLOWED_HOST}} à {{c|[&amp;quot;*&amp;quot;]}}, le filtrage a lieu avant Django&lt;br /&gt;
* STATIC_ROOT, STATIC_URL, MEDIA_ROOT et MEDIA_URL:&lt;br /&gt;
 STATIC_URL = &#039;/assets/static/&#039;&lt;br /&gt;
 STATIC_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/static/&amp;quot;)&lt;br /&gt;
 MEDIA_ROOT = os.path.join(BASE_DIR, &amp;quot;assets/media/&amp;quot;)&lt;br /&gt;
 MEDIA_URL = &#039;/assets/media/&#039;&lt;br /&gt;
&lt;br /&gt;
* emails (indispensable pour être averti des erreurs 500)&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &amp;quot;nom_du_binet@binets.polytechnique.fr&amp;quot;&lt;br /&gt;
 # voir https://portail.polytechnique.edu/dsi/eleves/mail-binets&lt;br /&gt;
 SERVER_EMAIL = DEFAULT_FROM_EMAIL&lt;br /&gt;
 ADMINS = [(&amp;quot;Webmaster&amp;quot;, DEFAULT_FROM_EMAIL)]&lt;br /&gt;
&lt;br /&gt;
* base de donnée : n&#039;utilisez pas sqlite ! Nous avons eu des problèmes par le passé, et les bases de données sql sont sauvegardées toutes les semaines.&lt;br /&gt;
Un snippet utilisable est :&lt;br /&gt;
 if DEBUG:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
       &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
       &#039;NAME&#039;: os.path.join(BASE_DIR, &#039;db.sqlite3&#039;),&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 else:&lt;br /&gt;
   DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;read_default_file&#039;: os.path.join(BASE_DIR, &#039;my.cnf&#039;),&lt;br /&gt;
        },&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Placer les mots de passe dans le fichier {{c|my.cnf}}:&lt;br /&gt;
 [client]&lt;br /&gt;
 database = NAME&lt;br /&gt;
 user = USER&lt;br /&gt;
 password = PASSWORD&lt;br /&gt;
 default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
Bien sûr il faut ajouter ce fichier dans le gitignore.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;authentification par CAS ==&lt;br /&gt;
&lt;br /&gt;
* Demander sur [https://panix.binets.fr Panix] à utiliser cette authentification. Préciser les éventuels attributs supplémentaires nécessaires (promo, section, ...).&lt;br /&gt;
* Installer le paquet django-cas-ng :&lt;br /&gt;
  pip install django-cas-ng&lt;br /&gt;
* Ajouter ce paquet à la liste des applications :&lt;br /&gt;
  INSTALLED_APPS = [&lt;br /&gt;
    ...&lt;br /&gt;
    &#039;django_cas_ng&#039;,&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Configurer la connection au serveur CAS du BR : &lt;br /&gt;
  AUTHENTICATION_BACKENDS = (&lt;br /&gt;
    &#039;django.contrib.auth.backends.ModelBackend&#039;,&lt;br /&gt;
    &#039;django_cas_ng.backends.CASBackend&#039;,&lt;br /&gt;
  )&lt;br /&gt;
  CAS_SERVER_URL = &amp;quot;https://cas.binets.fr/&amp;quot;&lt;br /&gt;
* Renseigner les pages de connexion (dans {{c|my_project/urls.py}} par exemple): &lt;br /&gt;
  from django_cas_ng.views import login, logout&lt;br /&gt;
  &lt;br /&gt;
  urlpatterns = [&lt;br /&gt;
    ...&lt;br /&gt;
    url(r&#039;^login$&#039;, login, name=&#039;cas_ng_login&#039;),&lt;br /&gt;
    url(r&#039;^logout$&#039;, logout, name=&#039;cas_ng_logout&#039;),&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
* Ajouter l&#039;URL d&#039;entrée : &lt;br /&gt;
  LOGIN_URL = &amp;quot;login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Attention à forcer l&#039;authentification pour les pages concernées : &lt;br /&gt;
  from django.contrib.auth.decorators import login_required&lt;br /&gt;
  &lt;br /&gt;
  @login_required&lt;br /&gt;
  def my_awesome_view(request):&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
À noter : &lt;br /&gt;
* le nom de l&#039;utilisateur connecté se trouve dans : request.user.username (accessible dans n&#039;importe quelle vue).&lt;br /&gt;
* les attributs du [[LDAP]] peuvent être disponibles (demander les attributs nécessaires  lors de la mise en place du CAS). Ils sont alors disponibles dans request.session[&#039;attributes&#039;] .&lt;br /&gt;
* plus d&#039;option de configuration sont présentés [https://github.com/mingchen/django-cas-ng/tree/master/django_cas_ng ici]&lt;br /&gt;
&lt;br /&gt;
== À chaque modification... ==&lt;br /&gt;
&lt;br /&gt;
* du code python quel qu&#039;il soit :&lt;br /&gt;
 touch /var/run/please/restart&lt;br /&gt;
* du schéma SQL (sous Django):&lt;br /&gt;
 python manage.py migrate&lt;br /&gt;
* des fichiers statiques (sous Django):&lt;br /&gt;
 python manage.py collectstatic&lt;br /&gt;
Il faut attendre 1 ou deux minutes que le système enregistre la modification, quand c&#039;est fait il affiche un message dans le terminal.&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
=== Erreurs python ===&lt;br /&gt;
La commande&lt;br /&gt;
 python manage.py runserver&lt;br /&gt;
permet de vérifier qu&#039;il n&#039;y a pas d&#039;{{c|ImportError}} ou autres. Pensez à le faire dans le virtualenv.&lt;br /&gt;
=== Erreurs web ===&lt;br /&gt;
Pour checker les changements il suffit de taper l&#039;url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs : {{c|/var/log/uwsgi/nom_binet}} ou {{c|/hosting/log/nom_binet}}.&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error}} pas en gras : c&#039;est une erreur de {{c|uwsgi}} qui n&#039;arrive pas à :&lt;br /&gt;
** trouver ton site&lt;br /&gt;
** trouver le virtualenv&lt;br /&gt;
** une exception est levée au démarrage du serveur ({{c|ImportError}} notamment).&lt;br /&gt;
&lt;br /&gt;
Tu peux lire les logs dans {{c|/var/log/uwsgi/&amp;lt;ton binet&amp;gt;/&amp;lt;ton site&amp;gt;.log}} et vérifier où {{c|uwsgi}} va chercher ton site dans {{c|/etc/uwsgi.d/&amp;lt;ton site&amp;gt;.json}}. S&#039;il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi même.&lt;br /&gt;
* Toutes les pages affichent {{c|Internal Server Error(500)}} en gras : c&#039;est django. Actives les mails pour avoir des détails, mais tu as probablement oublié de lancer les migrations sur une base sql vide.&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
	<entry>
		<id>https://wiki-br.binets.fr/index.php?title=Fichier:Logo_gitlab_br.png&amp;diff=8739</id>
		<title>Fichier:Logo gitlab br.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-br.binets.fr/index.php?title=Fichier:Logo_gitlab_br.png&amp;diff=8739"/>
		<updated>2018-04-02T00:19:14Z</updated>

		<summary type="html">&lt;p&gt;Wilson.jallet : Logo présent sur la page d&amp;#039;accueil du GitLab BR https://gitlab.binets.fr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Logo présent sur la page d&#039;accueil du GitLab BR https://gitlab.binets.fr&lt;/div&gt;</summary>
		<author><name>Wilson.jallet</name></author>
	</entry>
</feed>