README.md 4.31 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.

9 10 11 12 13 14
*   python3 (>= 3.5)
*   python3-django (>= 2.1)
*   python3-psycopg2 (>= 2.6)
*   python3-jinja2 (>= 2.10)
*   python3-django-filters (>= 2.0.0)
*   python3-djangorestframework (>= 3.8.2)
Hamza Dely's avatar
Hamza Dely committed
15
*   drf-nested-routers (>= 0.90.2)
16
*   python3-pil (>= 4.0.0)
Hamza Dely's avatar
Hamza Dely committed
17 18 19 20 21
*   postgresql (>= 9.6)
*   postgresql-plpython3 (>= 9.6)
*   nginx (>= 1.10)
*   uwsgi (>= 2.0.14)
*   uwsgi-plugin-python3 (>= 2.0.14)
22 23 24 25

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

Hamza Dely's avatar
Hamza Dely committed
26
1.  Clonage du dépôt
27

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

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

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

Hamza Dely's avatar
Hamza Dely committed
35 36 37 38
        $ 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 {} \;
39

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

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

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

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

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

Hamza Dely's avatar
Hamza Dely committed
56 57 58
    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.
59

Hamza Dely's avatar
Hamza Dely committed
60
    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.
61

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

Hamza Dely's avatar
Hamza Dely committed
66
3.  Configuration de uWSGI + Nginx
67

Hamza Dely's avatar
Hamza Dely committed
68 69
    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).
70

Hamza Dely's avatar
Hamza Dely committed
71
    Pour uWSGI :
72

Hamza Dely's avatar
Hamza Dely committed
73 74 75
        $ 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
76

Hamza Dely's avatar
Hamza Dely committed
77
    Pour Nginx :
78

Hamza Dely's avatar
Hamza Dely committed
79 80 81
        $ 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
82

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

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  |
Hamza Dely's avatar
Hamza Dely committed
105
| 500 (*Internal Server Error*)  | Erreur interne              |
106 107 108

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