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
*   python3 (>= 3.4)
*   python3-django (>= 1.11)
*   python3-psycopg2 (>= 2.5)
*   python3-jinja2 (>= 2.9)
*   python3-django-filters (>= 1.0)
14
*   python3-djangorestframework (>= 3.4.0)
15
*   python3-pil (>= 4.0.0)
Hamza Dely's avatar
Hamza Dely committed
16 17 18 19 20
*   postgresql (>= 9.6)
*   postgresql-plpython3 (>= 9.6)
*   nginx (>= 1.10)
*   uwsgi (>= 2.0.14)
*   uwsgi-plugin-python3 (>= 2.0.14)
21 22 23 24

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
104
| 500 (*Internal Server Error*)  | Erreur interne              |
105 106 107

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