8106
Commentaire:
|
10392
|
Texte supprimé. | Texte ajouté. |
Ligne 10: | Ligne 10: |
python python-psycopg2 postgresql python-netaddr python-beautifulsoup | python python-psycopg2 postgresql python-netaddr python-beautifulsoup imagemagick |
Ligne 14: | Ligne 14: |
''({{{imagemagick}}} n'est nécessaire que pour la conversion des photos)'' |
|
Ligne 95: | Ligne 97: |
cd Note_Kfet_2015_server/recreate/ | cd note-kfet-2015-serveur/recreate/ |
Ligne 162: | Ligne 164: |
'''Si vous utilisez Debian Wheezy (ou une distribution démarrant avec SysV)''' === Backend === |
=== Si vous utilisez Debian Wheezy (ou une distribution démarrant avec SysV) === ==== Backend ==== |
Ligne 176: | Ligne 178: |
=== Frontend === | ==== Frontend ==== |
Ligne 191: | Ligne 193: |
'''Si vous utilisez Debian Jessie/Stretch/Sid (ou une distribution démarrant avec systemd)''' === Backend === |
Par défaut, la note écrit dans un fichier de log, pour {{{ cd /var/log sudo mkdir note cd note sudo touch full_log.log }}} On pensera aussi a '''chown'' le tout pour donner les droits en écriture au groupe '''note'''. === Si vous utilisez Debian Jessie/Stretch/Sid (ou une distribution démarrant avec systemd) === ==== Backend ==== |
Ligne 227: | Ligne 239: |
=== Frontend === | ==== Frontend ==== |
Ligne 243: | Ligne 255: |
'''Dans les deux cas''' | === Dans les deux cas === |
Ligne 267: | Ligne 279: |
sudo chgrp www-data /home/note/Django_Client/media/photos sudo chmod g+ws /home/note/Django_Client/media/photos }}} |
sudo chgrp www-data /home/note/note-kfet-2015-django/media/photos sudo chmod g+ws /home/note/note-kfet-2015-django/media/photos }}} == Cron et mails == Si il s'agit d'une mise en production réelle de la note, il faut qu'elle puisse envoyer des mails et on a également un certains nombre de scripts qui doivent tourner régulièrement pour vérifier l'intégrité de la base de données. === Postfix === Il faut commencer par installer un serveur postfix, qui se charge d'envoyer les mails. {{{ sudo apt-get install postfix }}} Lorsqu'il vous propose, choisir aucune configuration. Ensuite, récupérer les fichiers de configuration postfix présent dans le dossier utils du dépot git et les placer dans le dossier /etc/postfix {{{ cp main.cf /etc/postfix/ cp master.cf /etc/postfix/ }}} Attention, ces fichiers de configurations ne marchent que en zone crans. Enfin, il faut préciser au serveur comment il s'appelle en créant le fichier /etc/mailname avec par exemple le contenu : {{{ note.crans.org }}} Voilà, tout devrait marcher, il n'y a plus qu'à lancer le serveur, et vérifier qu'il tourne : {{{ sudo systemctl start postfix sudo systemctl status postfix }}} === cron === Maintenant, il suffit de récupérer le fichier cron de la note qui se charge de l'envoie de mail et des vérifications d'intégrité et de le placer dans /etc/cron.d/ {{{ cp note.cron /etc/cron.d/ }}} Attention, on ne peut pas faire de ln -s, car sinon le cron sera ignoré par le système. |
Ligne 276: | Ligne 320: |
=== Serveur === * ''Je suis sous Jessie, et la note redémarre toute seule lorsque je l'arrête avec kill {-9 | -s KILL | ... }'' Par défaut, le serveur de la note est monitoré par systemd : lorsque celle-ci s'arrête avec un code de retour indiquant une fin inattendue, systemd la relance automatiquement. Pour désactiver ce comportement, il faut commenter la ligne {{{Restart=on-failure}}} dans {{{/etc/systemd/system/note.service}}}, puis indiquer à systemd que des services ont changé avec {{{ sudo systemctl daemon-reload }}} |
Installer la NoteKfet2015 chez soi
Pour la tester pour développer, ou bien pour la déployer sur le serveur du BDE.
Sommaire
Les paquets à installer
Backend
python python-psycopg2 postgresql python-netaddr python-beautifulsoup imagemagick
(python-beautifulsoup n'est nécessaire que pour les éditions du Wiki)
(imagemagick n'est nécessaire que pour la conversion des photos)
On a besoin de django >= 1.3 et python >= 2.7 (incompatible python3 pour le moment) et postgresql >= 8.4.
La note Kfet a, pour le moment, été testée sous Wheezy et Jessie.
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 https://gitlab.crans.org/bde/note-kfet-2015-serveur.git
cd note-kfet-2015-server/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 https://gitlab.crans.org/bde/note-kfet-2015-django.git
cd note-kfet-2015-django cp secrets_sample.py secrets.py cp settings.py.example settings.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.
Si vous utilisez www-data pour le frontend:
Dans /etc/postgresql/<version>/main/pg_hba.conf :
# TYPE DATABASE USER CIDR-ADDRESS METHOD local all note ident map=notemap
et dans /etc/postgresql/<version>/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
Si vous utilisez note pour le frontend :
Dans /etc/postgresql/<version>/main/pg_hba.conf :
# TYPE DATABASE USER CIDR-ADDRESS METHOD local all note peer
Dans les deux cas, vous devez créer 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-serveur/recreate/ sudo ./recreate_database.sh
Frontend
Django aussi a besoin de sa base de données pour tourner.
Si vous utilisez Django < 1.7
sudo -u postgres createdb django_client sudo -u postgres psql postgres=# ALTER DATABASE django_client OWNER TO note;
Puis
cd note-kfet-2015-django/ ./manage.py syncdb
Si vous utilisez Django >= 1.7
cd note-kfet-2015-django/ ./manage.py makemigrations ./manage.py migrate
Tester en standalone
On peut lancer la note en standalone, en foreground.
Backend
cd note-kfet-2015-serveur/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 note-kfet-2015-django ./manage.py runserver 0.0.0.0:8000
Et vous pouvez tester sur http://<votre IP>: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 tout à l'heure ont bien été faits dans /home/note
sudo adduser note
La méthode d'installation des services dépend de votre distribution.
Si vous utilisez Debian Wheezy (ou une distribution démarrant avec SysV)
Backend
cd /etc/init.d/ sudo ln -s /home/note/note-kfet-2015-serveur/utils/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/note-kfet-2015-django/utils/note.nginx note cd /etc/nginx/sites-enabled/ sudo ln -s ../sites-available/note cd /etc/gunicorn.d/ sudo ln -s /home/note/note-kfet-2015-django/utils/gunicorn.d-note note sudo service nginx restart sudo service gunicorn start
Par défaut, la note écrit dans un fichier de log, pour
cd /var/log sudo mkdir note cd note sudo touch full_log.log
On pensera aussi a chown le tout pour donner les droits en écriture au groupe note.
Il faut copier les unitfiles du serveur dans /etc/systemd/system : Il faut ensuite dire à systemd que des nouveaux services sont apparus: Vous pouvez maintenant lancer le serveur avec la commande l'arrêter avec et la redémarrer avec Si vous voulez que le serveur de la note démarre automatiquement lorsque votre machine boote, vous pouvez ajouter
NB : c'est uniquement à partir de là qu'on a besoin des paquets gunicorn et nginx
Pour générer les certificats en question : Lignes à éditer : 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; 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 :
Si il s'agit d'une mise en production réelle de la note, il faut qu'elle puisse envoyer des mails et on a également un certains nombre de scripts qui doivent tourner régulièrement pour vérifier l'intégrité de la base de données.
Il faut commencer par installer un serveur postfix, qui se charge d'envoyer les mails. Lorsqu'il vous propose, choisir aucune configuration. Ensuite, récupérer les fichiers de configuration postfix présent dans le dossier utils du dépot git et les placer dans le dossier /etc/postfix Attention, ces fichiers de configurations ne marchent que en zone crans. Enfin, il faut préciser au serveur comment il s'appelle en créant le fichier /etc/mailname avec par exemple le contenu : Voilà, tout devrait marcher, il n'y a plus qu'à lancer le serveur, et vérifier qu'il tourne :
Maintenant, il suffit de récupérer le fichier cron de la note qui se charge de l'envoie de mail et des vérifications d'intégrité et de le placer dans /etc/cron.d/ Attention, on ne peut pas faire de ln -s, car sinon le cron sera ignoré par le système.
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).
Par défaut, le serveur de la note est monitoré par systemd : lorsque celle-ci s'arrête avec un code de retour indiquant une fin inattendue, systemd la relance automatiquement. Pour désactiver ce comportement, il faut commenter la ligne Restart=on-failure dans /etc/systemd/system/note.service, puis indiquer à systemd que des services ont changé avec Si vous utilisez Debian Jessie/Stretch/Sid (ou une distribution démarrant avec systemd)
Backend
cd note-kfet-2015-serveur/utils/
sudo cp note.socket /etc/systemd/system/
sudo cp note.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start note
sudo systemctl stop note
sudo systemctl restart note
sudo systemctl enable note.service
Frontend
cd /etc/nginx/sites-available/
sudo ln -s /home/note/note-kfet-2015-django/utils/note.nginx note
cd /etc/nginx/sites-enabled/
sudo ln -s ../sites-available/note
cd /etc/gunicorn.d/
sudo ln -s /home/note/note-kfet-2015-django/utils/gunicorn.d-note note
sudo systemctl restart nginx
sudo systemctl start gunicorn
Dans les deux cas
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
sudo chgrp www-data /home/note/note-kfet-2015-django/media/photos
sudo chmod g+ws /home/note/note-kfet-2015-django/media/photos
Cron et mails
Postfix
sudo apt-get install postfix
cp main.cf /etc/postfix/
cp master.cf /etc/postfix/
note.crans.org
sudo systemctl start postfix
sudo systemctl status postfix
cron
cp note.cron /etc/cron.d/
Ça marche pas
Django
Serveur
Je suis sous Jessie, et la note redémarre toute seule lorsque je l'arrête avec kill {-9 | -s KILL | ... } sudo systemctl daemon-reload