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)
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
------------

26
1.  Clonage du dépôt
27

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

30
        $ git clone https://gitlab.crans.org/dely/note-kfet.git
31

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

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

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

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

46
2.  Mise en place de la base de données
47

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

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

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

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

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

66
3.  Configuration de uWSGI + Nginx
67

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

71
    Pour uWSGI :
72

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

77
    Pour Nginx :
78

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

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  |
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.