= Installer la NoteKfet2015 chez soi = Pour la tester pour développer, ou bien pour la déployer sur le serveur du BDE. <> == Les paquets à installer == === Backend === {{{ python python-psycopg2 postgresql python-beautifulsoup }}} ''({{{python-beautifulsoup}}} n'est nécessaire que pour les éditions du Wiki)'' '''On a besoin de {{{django}}} >= 1.3 et {{{python}}} >= 2.7 (incompatible {{{python3}}} pour le moment).''' === Frontend === {{{ python-django gunicorn nginx }}} == Récupérer les codes == === Backend === On supposera qu'on est dans /home/note en tant qu'user note, même si ce n'est pas nécessaire. {{{ git clone http://bde2.crans.org/git/Note_Kfet_2015_server.git }}} {{{ cd Note_Kfet_2015_server.git/config cp secrets.py.sample secrets.py }}} Puis éditer {{{config/config.py}}} et adapter {{{basedir}}} et {{{photosdir}}} si on n'était pas dans {{{/home/note/}}}. === Frontend === {{{ git clone http://bde2.crans.org/git/Django_Client.git }}} {{{ cd Django_Client cp secrets.py.sample secrets.py }}} Penser à mettre une vraie SECRET_KEY dans {{{secrets.py}}} et corriger {{{ROOT_PATH}}} dans {{{settings.py}}} si ce n'est pas {{{/home/note/}}}. == Bases de données == === Backend === La note a besoin d'une base de données pour fonctionner. Et c'est mieux si elle n'est pas vide. On a besoin de pouvoir s'identifier en tant qu'utilisateur PostgreSQL {{{note}}}. Dans {{{/etc/postgresql//main/pg_hba.conf}}} : {{{ # TYPE DATABASE USER CIDR-ADDRESS METHOD local all note ident map=notemap }}} et dans {{{/etc/postgresql//main/pg_ident.conf}}} : {{{ # MAPNAME SYSTEM-USERNAME PG-USERNAME notemap username note # Pour le frontend django, si lancé en tant que www-data (avec gunicorn) notemap www-data note }}} et on crée l'user : {{{ sudo -u postgres psql postgres=# CREATE ROLE note LOGIN; }}} Maintenant, la base. Heureusement, dans le dépôt git, il y a déjà un script pour créer une base et mettre deux-trois trucs dedans histoire de pouvoir commencer. Pensez à changer {{{NOTEUSER}}} au début du script si vous ne voulez pas l'exécuter en tant que l'utilisateur UNIX {{{note}}}. {{{ cd Note_Kfet_2015_server/recreate/ sudo ./recreate_database.sh }}} === Frontend === Django aussi a besoin de sa base de données pour tourner. {{{ sudo -u postgres createdb django_client sudo -u postgres psql postgres=# ALTER DATABASE django_client OWNER TO note; }}} Puis {{{ cd Django_Client/ ./manage.py syncdb }}} == Tester en standalone == On peut lancer la note en standalone, en foreground. === Backend === {{{ cd Note_Kfet_2015_server/serveur ./Serveur.py 2013/03/10 00:48:58 MainServer :: Server started. Debug levels : file=5 stdout=5 2013/03/10 00:48:58 MainServer :: Ecoute sur 0.0.0.0:4242 }}} === Frontend === {{{ cd Django_Client ./manage.py runserver 0.0.0.0:8000 }}} Et vous pouvez tester sur {{{http://:8000/note}}} Ah, j'oubliais : dans cette base de données par défaut, il y a quelques utilisateurs, ils ont tous pour mot de passe '''{{{plop}}}'''. == Lancer tout ça proprement == En fait, lancer en standalone, c'est moche. Tout est prévu pour pouvoir être lancé en daemon. On commence par créer l'utilisateur qui va faire tourner la note. Par soucis de simplicité, il s'appelera {{{note}}}. Si vous voulez l'appeler autrement, faites comme bon vous semble, j'essaierai de signaler autant que j'y penser les endroits où il faudra penser à changer les variables en conséquence. On supposera également que les {{{git clone}}} de [[#R.2BAOk-cup.2BAOk-rer_les_codes|tout à l'heure]] ont bien été faits dans {{{/home/note}}} {{{ sudo adduser note }}} === Backend === {{{ cd /etc/init.d/ sudo ln -s /home/note/Note_Kfet_2015_server/initscript note }}} ''(éditez les variables {{{USER}}} et {{{DIRECTORY}}})'' La première fois, il faut créer le dossier {{{/var/log/note}}} et s'assurer que l'utilisateur {{{note}}} ''(ou whatever)'' peut écrire dedans. À partir de là, {{{sudo service note start}}} permet de lancer le backend de la note comme n'importe quel service. === Frontend === ''NB : c'est uniquement à partir de là qu'on a besoin des paquets {{{gunicorn}}} et {{{nginx}}}'' {{{ cd /etc/nginx/sites-available/ sudo ln -s /home/note/Django_Client/utils/note.nginx note cd /etc/nginx/sites-enabled/ sudo ln -s ../sites-available/note cd /etc/gunicorn.d/ sudo ln -s /home/note/Django_Client/utils/gunicorn.d-note note sudo service nginx restart sudo service gunicorn start }}} Pour générer les certificats en question : {{{ sudo su cd /etc/ssl/ mkdir note cd note/ openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout note-django.key -out note-django.crt chmod 600 note-django.key }}} Lignes à éditer : * Dans le fichier de conf de nginx : * {{{server_name note2 note2.crans.org;}}} * {{{rewrite ^ https://note2.crans.org$request_uri permanent;}}} * {{{server_name note2 note2.crans.org;}}} * {{{alias /home/note/Django_Client/static;}}} * Les paths des certificats SSL * Dans le fichier de conf gunicorn : * La variable {{{'working_dir'}}} Maintenant que c'est {{{www-data}}} qui lance le frontend, il faut qu'il ait le droit de créer les photos : {{{ sudo chgrp www-data /home/note/Django_Client/media/photos sudo chmod g+ws /home/note/Django_Client/media/photos }}} == Ça marche pas == === Django === Attention, nginx est tatillons sur les options. On ne peut pas préciser plus d'une fois {{{ipv6only=on}}} (donc comme il est dans le fichier note.nginx, il faut qu'il ne soit pas dans le fichier default).