Taille: 8687
Commentaire:
|
Taille: 11382
Commentaire:
|
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 58: | Ligne 60: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 60: | Ligne 64: |
---- /!\ '''Edit conflict - your version:''' ---- ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 74: | Ligne 82: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 83: | Ligne 93: |
---- /!\ '''Edit conflict - your version:''' ---- et on crée l'user : ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 95: | Ligne 110: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 97: | Ligne 114: |
---- /!\ '''Edit conflict - your version:''' ---- cd Note_Kfet_2015_server/recreate/ ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 103: | Ligne 125: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 105: | Ligne 129: |
---- /!\ '''Edit conflict - your version:''' ---- ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 113: | Ligne 141: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 114: | Ligne 144: |
---- /!\ '''Edit conflict - your version:''' ---- cd Django_Client/ ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 117: | Ligne 152: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 125: | Ligne 162: |
---- /!\ '''Edit conflict - your version:''' ---- ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 131: | Ligne 172: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 132: | Ligne 175: |
---- /!\ '''Edit conflict - your version:''' ---- cd Note_Kfet_2015_server/serveur ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 141: | Ligne 189: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 142: | Ligne 192: |
---- /!\ '''Edit conflict - your version:''' ---- cd Django_Client ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 160: | Ligne 215: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 168: | Ligne 225: |
---- /!\ '''Edit conflict - your version:''' ---- === Backend === {{{ cd /etc/init.d/ sudo ln -s /home/note/Note_Kfet_2015_server/utils/initscript note ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 176: | Ligne 241: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 177: | Ligne 244: |
---- /!\ '''Edit conflict - your version:''' ---- === Frontend === ---- /!\ '''End of edit conflict''' ---- ''NB : c'est uniquement à partir de là qu'on a besoin des paquets {{{gunicorn}}} et {{{nginx}}}'' {{{ cd /etc/nginx/sites-available/ ---- /!\ '''Edit conflict - other version:''' ---- sudo ln -s /home/note/note-kfet-2015-django/utils/note.nginx note ---- /!\ '''Edit conflict - your version:''' ---- sudo ln -s /home/note/Django_Client/utils/note.nginx note ---- /!\ '''End of edit conflict''' ---- cd /etc/nginx/sites-enabled/ sudo ln -s ../sites-available/note cd /etc/gunicorn.d/ ---- /!\ '''Edit conflict - other version:''' ---- sudo ln -s /home/note/note-kfet-2015-django/utils/gunicorn.d-note note ---- /!\ '''Edit conflict - your version:''' ---- sudo ln -s /home/note/Django_Client/utils/gunicorn.d-note note ---- /!\ '''End of edit conflict''' ---- sudo service nginx restart sudo service gunicorn start }}} ---- /!\ '''Edit conflict - other version:''' ---- === Si vous utilisez Debian Jessie/Stretch/Sid (ou une distribution démarrant avec systemd) === ==== Backend ==== Il faut copier les unitfiles du serveur dans /etc/systemd/system : {{{ cd note-kfet-2015-serveur/utils/ sudo cp note.socket /etc/systemd/system/ sudo cp note.service /etc/systemd/system/ }}} Il faut ensuite dire à systemd que des nouveaux services sont apparus: {{{ sudo systemctl daemon-reload }}} Vous pouvez maintenant lancer le serveur avec la commande {{{ sudo systemctl start note }}} l'arrêter avec {{{ sudo systemctl stop note }}} et la redémarrer avec {{{ sudo systemctl restart note }}} Si vous voulez que le serveur de la note démarre automatiquement lorsque votre machine boote, vous pouvez ajouter {{{ sudo systemctl enable note.service }}} ==== Frontend ==== |
|
Ligne 187: | Ligne 327: |
sudo service nginx restart sudo service gunicorn start }}} === Si vous utilisez Debian Jessie/Stretch/Sid (ou une distribution démarrant avec systemd) === ==== Backend ==== Il faut copier les unitfiles du serveur dans /etc/systemd/system : {{{ cd note-kfet-2015-serveur/utils/ sudo cp note.socket /etc/systemd/system/ sudo cp note.service /etc/systemd/system/ }}} Il faut ensuite dire à systemd que des nouveaux services sont apparus: {{{ sudo systemctl daemon-reload }}} Vous pouvez maintenant lancer le serveur avec la commande {{{ sudo systemctl start note }}} l'arrêter avec {{{ sudo systemctl stop note }}} et la redémarrer avec {{{ sudo systemctl restart note }}} Si vous voulez que le serveur de la note démarre automatiquement lorsque votre machine boote, vous pouvez ajouter {{{ sudo systemctl enable note.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 |
|
Ligne 245: | Ligne 333: |
---- /!\ '''Edit conflict - your version:''' ---- ---- /!\ '''End of edit conflict''' ---- |
|
Ligne 267: | Ligne 359: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
Ligne 269: | Ligne 363: |
---- /!\ '''Edit conflict - your version:''' ---- sudo chgrp www-data /home/note/Django_Client/media/photos sudo chmod g+ws /home/note/Django_Client/media/photos ---- /!\ '''End of edit conflict''' ---- |
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.
Edit conflict - other version:
Si vous utilisez www-data pour le frontend:
Edit conflict - your version:
End of edit conflict
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
Edit conflict - other version:
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 :
Edit conflict - your version:
et on crée l'user :
End of edit conflict
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.
---- /!\ '''Edit conflict - other version:''' ---- cd note-kfet-2015-serveur/recreate/ ---- /!\ '''Edit conflict - your version:''' ---- cd Note_Kfet_2015_server/recreate/ ---- /!\ '''End of edit conflict''' ---- sudo ./recreate_database.sh
Frontend
Django aussi a besoin de sa base de données pour tourner.
Edit conflict - other version:
Si vous utilisez Django < 1.7
Edit conflict - your version:
End of edit conflict
sudo -u postgres createdb django_client sudo -u postgres psql postgres=# ALTER DATABASE django_client OWNER TO note;
Puis
---- /!\ '''Edit conflict - other version:''' ---- cd note-kfet-2015-django/ ---- /!\ '''Edit conflict - your version:''' ---- cd Django_Client/ ---- /!\ '''End of edit conflict''' ---- ./manage.py syncdb
Edit conflict - other version:
Si vous utilisez Django >= 1.7
cd note-kfet-2015-django/ ./manage.py makemigrations ./manage.py migrate
Edit conflict - your version:
End of edit conflict
Tester en standalone
On peut lancer la note en standalone, en foreground.
Backend
---- /!\ '''Edit conflict - other version:''' ---- cd note-kfet-2015-serveur/serveur ---- /!\ '''Edit conflict - your version:''' ---- cd Note_Kfet_2015_server/serveur ---- /!\ '''End of edit conflict''' ---- ./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
---- /!\ '''Edit conflict - other version:''' ---- cd note-kfet-2015-django ---- /!\ '''Edit conflict - your version:''' ---- cd Django_Client ---- /!\ '''End of edit conflict''' ---- ./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
Edit conflict - other version:
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 ---- /!\ '''Edit conflict - your version:''' ---- === Backend === {{{ cd /etc/init.d/ sudo ln -s /home/note/Note_Kfet_2015_server/utils/initscript note ---- /!\ '''End of edit conflict''' ----
(é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.
Edit conflict - other version:
Frontend
Edit conflict - your version:
Frontend
End of edit conflict
NB : c'est uniquement à partir de là qu'on a besoin des paquets gunicorn et nginx
cd /etc/nginx/sites-available/ ---- /!\ '''Edit conflict - other version:''' ---- sudo ln -s /home/note/note-kfet-2015-django/utils/note.nginx note ---- /!\ '''Edit conflict - your version:''' ---- sudo ln -s /home/note/Django_Client/utils/note.nginx note ---- /!\ '''End of edit conflict''' ---- cd /etc/nginx/sites-enabled/ sudo ln -s ../sites-available/note cd /etc/gunicorn.d/ ---- /!\ '''Edit conflict - other version:''' ---- sudo ln -s /home/note/note-kfet-2015-django/utils/gunicorn.d-note note ---- /!\ '''Edit conflict - your version:''' ---- sudo ln -s /home/note/Django_Client/utils/gunicorn.d-note note ---- /!\ '''End of edit conflict''' ---- sudo service nginx restart sudo service gunicorn start
Edit conflict - other version:
Si vous utilisez Debian Jessie/Stretch/Sid (ou une distribution démarrant avec systemd)
Backend
Il faut copier les unitfiles du serveur dans /etc/systemd/system :
cd note-kfet-2015-serveur/utils/ sudo cp note.socket /etc/systemd/system/ sudo cp note.service /etc/systemd/system/
Il faut ensuite dire à systemd que des nouveaux services sont apparus:
sudo systemctl daemon-reload
Vous pouvez maintenant lancer le serveur avec la commande
sudo systemctl start note
l'arrêter avec
sudo systemctl stop note
et la redémarrer avec
sudo systemctl restart note
Si vous voulez que le serveur de la note démarre automatiquement lorsque votre machine boote, vous pouvez ajouter
sudo systemctl enable note.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 systemctl restart nginx sudo systemctl start gunicorn
Dans les deux cas
Edit conflict - your version:
End of edit conflict
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 :
---- /!\ '''Edit conflict - other version:''' ---- sudo chgrp www-data /home/note/note-kfet-2015-django/media/photos sudo chmod g+ws /home/note/note-kfet-2015-django/media/photos ---- /!\ '''Edit conflict - your version:''' ---- sudo chgrp www-data /home/note/Django_Client/media/photos sudo chmod g+ws /home/note/Django_Client/media/photos ---- /!\ '''End of edit conflict''' ----
Ç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).
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