README.md 4.27 KB
Newer Older
1 2 3 4 5 6 7 8
Note Kfet
=========

Paquets requis
--------------

Les paquets peuvent être récupérés via APT ou PIP.

Hamza Dely's avatar
Hamza Dely committed
9 10 11 12 13 14 15
*   python3 (>= 3.4)
*   python3-django (>= 1.11)
*   python3-psycopg2 (>= 2.5)
*   python3-jinja2 (>= 2.9)
*   python3-django-filters (>= 1.0)
*   python3-moneyed
*   python3-django-money
16
*   python3-djangorestframework (>= 3.4.0)
Hamza Dely's avatar
Hamza Dely committed
17 18 19 20 21
*   postgresql
*   postgresql-plpython3
*   nginx
*   uwsgi
*   uwsgi-plugin-python3
Maxime Bombar's avatar
Maxime Bombar committed
22 23
*   djangorestframework
*   Pillow
24 25 26 27

Installation
------------

Hamza Dely's avatar
Hamza Dely committed
28
1.  Clonage du dépôt
29

Hamza Dely's avatar
Hamza Dely committed
30
    Cloner le dépôt à l'endroit souhaité (par exemple `/var/www/note-kfet/`)
31

Hamza Dely's avatar
Hamza Dely committed
32
        $ git clone https://gitlab.crans.org/dely/note-kfet.git
33

Hamza Dely's avatar
Hamza Dely committed
34 35
    Le dossier contenant le projet sera noté dans la suite `$NOTEREPO`.
    On génère ensuite un utilisateur spécial pour le projet.
36

Hamza Dely's avatar
Hamza Dely committed
37 38 39 40
        $ sudo adduser --system --group --home $NOTEREPO --no-create-home --disabled-password --disabled-login note
        $ sudo chown -R note:note $NOTEREPO
        $ sudo chmod -R g+w $NOTEREPO
        $ sudo find $NOTEREPO -type d -exec chmod g+s {} \;
41

Hamza Dely's avatar
Hamza Dely committed
42 43
    Pensez à vous rajouter au groupe 'note' et à changer votre umask lorsque vous travaillez
    sur le projet.
44

Hamza Dely's avatar
Hamza Dely committed
45
    Générez une clé secrète pour votre projet et mettez là dans note_kfet/secrets.py.
46
    Ajoutez également le domaine depuis lequel vous allez servir le site dans SITE_DOMAIN.
47

Hamza Dely's avatar
Hamza Dely committed
48
2.  Mise en place de la base de données
49

Hamza Dely's avatar
Hamza Dely committed
50
    Après avoir cloné le dépôt à l'endroit souhaité, il faut mettre en place la BDD :
51

Hamza Dely's avatar
Hamza Dely committed
52 53 54 55 56
        $ sudo -u postgres psql
        postgres=# CREATE USER note;
        postgres=# CREATE DATABASE note_kfet OWNER note;
        postgres=# \c note_kfet
        $ sudo service postgresql reload
57

Hamza Dely's avatar
Hamza Dely committed
58 59 60
    Il faut ensuite ajouter les lignes adéquates dans le fichier `pg_hba.conf` en fonction de votre
    infrastructure. Consultez la [doc PostgreSQL](http://docs.postgresql.fr/9.6/client-authentication.html#auth-pg-hba-conf)
    pour trouver la marche à suivre.
61

Hamza Dely's avatar
Hamza Dely committed
62
    Vous pouvez ensuite installer le schéma de la base de données, mettre en place les triggers et y insérer vos données.
63

Hamza Dely's avatar
Hamza Dely committed
64 65
        $ sudo -u note $NOTEREPO/manage.py migrate
        $ sudo -u postgres $NOTEREPO/note_kfet/triggers.py
66
        $ sudo -u note $NOTEREPO/note_kfet/db_initial.py
67

Hamza Dely's avatar
Hamza Dely committed
68
3.  Configuration de uWSGI + Nginx
69

Hamza Dely's avatar
Hamza Dely committed
70 71
    Une fois la base de données mise en place, il faut mettre en place le serveur Web. Plus d'informations
    sont disponbibles [ici](http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html?highlight=Django).
72

Hamza Dely's avatar
Hamza Dely committed
73
    Pour uWSGI :
74

Hamza Dely's avatar
Hamza Dely committed
75 76 77
        $ sudo cp $NOTEREPO/note_kfet/note.uwsgi /etc/uwsgi/apps-available/note.ini
        $ sudo ln -s /etc/uwsgi/apps-available/note.ini /etc/uwsgi/apps-enabled/note.ini
        $ sudo service uwsgi reload
78

Hamza Dely's avatar
Hamza Dely committed
79
    Pour Nginx :
80

Hamza Dely's avatar
Hamza Dely committed
81 82 83
        $ sudo cp $NOTEREPO/note_kfet/note.nginx /etc/nginx/sites-available/note
        $ sudo ln -s /etc/nginx/sites-available/note /etc/uwsgi/sites-enabled/note
        $ sudo service nginx reload
84

Hamza Dely's avatar
Hamza Dely committed
85
    Vous pouvez ensuite essayer d'accéder à la note depuis votre navigateur.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110

API RESTful
-----------

La Note Kfet possède une API RESTful, utilisant Django REST Framework. Après l'envoi d'une requête, le serveur
renverra un code HTTP en fonction du résultat de la requête. Le sens des codes HTTP reçus est résumé dans le tableau
ci-dessous :

|            Code HTTP           |         Signification       |
| ------------------------------ | --------------------------- |
| 200 (*OK*)                     | Opération effectuée         |
| 201 (*Created*)                | L'objet a bien été créé     |
| 204 (*No Content*)             | L'objet a été bien supprimé |
| 304 (*Not Modified*)           | L'objet n'a pas été modifié |
| 400 (*Bad Request*)            | Données erronnées           |
| 401 (*Unauthorized*)           | Authentification requise    |
| 403 (*Forbidden*)              | Autorisation requise        |
| 404 (*Not Found*)              | Objet introuvable           |
| 405 (*Method Not Allowed*)     | Méthode non autorisée       |
| 422 (*Unprocessable Entity*)   | Données illisibles          |
| 429 (*Too Many Requests*)      | Débit des requêtes anormal  |
| 500 (*Internal Server Error *) | Erreur interne              |

En cas d'erreur, le serveur retournera également un message détaillant indiquant plus précisément
les raisons de l'erreur.