Go to file
Yohann D'ANELLO a9258c332a Order note research results: match first aliases then normalized names 2020-08-30 22:33:59 +02:00
ansible Cron file must be owned by root 2020-08-06 08:21:05 +02:00
apps Order note research results: match first aliases then normalized names 2020-08-30 22:33:59 +02:00
locale Display form error when a permission is missing rather than display a 403 page 2020-08-30 16:23:55 +02:00
media/pic default picture is 200x200 2020-03-28 17:44:03 +01:00
note_kfet Order note research results: match first aliases then normalized names 2020-08-30 22:33:59 +02:00
requirements 🍻 Make coffee, closes #54 2020-08-10 15:36:41 +02:00
.dockerignore Rework on Docker image 2020-06-21 20:27:42 +02:00
.env_example Revert to NOTE_URL 2020-08-09 18:39:17 +02:00
.gitignore Ignore only collected statics 2020-08-10 11:31:21 +02:00
.gitlab-ci.yml Do not test against Py3.6 2020-08-09 19:34:01 +02:00
.gitmodules 💩 Use HTTPS rather than SSH to clone nk20-scripts (may be reverted later) 2020-07-15 08:25:52 +02:00
COPYING Add COPYING 2019-07-08 07:58:44 +02:00
Dockerfile Rework on Docker image 2020-06-21 20:27:42 +02:00
LICENSE Added LICENSE file 2019-09-18 14:46:10 +02:00
README.md Fix CI broken link in README 2020-08-10 18:27:45 +02:00
entrypoint.sh Rework on Docker image 2020-06-21 20:27:42 +02:00
manage.py and so it begins 2019-07-07 20:49:02 +00:00
nginx_note.conf_docker Simplify NGINX examples 2020-08-09 20:33:48 +02:00
nginx_note.conf_example Simplify NGINX examples 2020-08-09 20:33:48 +02:00
note.cron Export activities in the Crans Wiki 2020-08-06 12:15:23 +02:00
tox.ini Execute tests from apps/ 2020-08-10 18:43:50 +02:00
uwsgi_note.ini Export activities in the Crans Wiki 2020-08-06 12:15:23 +02:00
uwsgi_params and so it begins 2019-07-07 20:49:02 +00:00

README.md

NoteKfet 2020

License: GPL v3 pipeline status coverage report

Installation sur un serveur

On supposera pour la suite que vous utilisez une installation de Debian Buster ou Ubuntu 20.04 fraîche ou bien configuré.

Pour aller vite vous pouvez lancer le Playbook Ansible fournit dans ce dépôt en l'adaptant. Sinon vous pouvez suivre les étapes ici.

Installation avec Debian/Ubuntu

  1. Installation des dépendances APT.

    $ sudo apt install nginx python3 python3-pip python3-dev uwsgi uwsgi-plugin-python3 python3-venv git acl
    

    La génération des factures de l'application trésorerie nécessite une installation de LaTeX suffisante,

    $ sudo apt install texlive-latex-extra texlive-fonts-extra texlive-lang-french
    
  2. Clonage du dépot dans /var/www/note_kfet,

    $ mkdir -p /var/www/note_kfet && cd /var/www/note_kfet
    $ sudo chown www-data:www-data .
    $ sudo chmod g+rwx .
    $ sudo -u www-data git clone git@gitlab.crans.org:bde/nk20.git .
    
  3. Création d'un environment de travail Python décorrélé du système.

    $ python3 -m venv env
    $ source env/bin/activate
    (env)$ pip3 install -r requirements/base.txt
    (env)$ pip3 install -r requirements/prod.txt  # uniquement en prod, nécessite une base postgres
    (env)$ deactivate  # sortir de l'environnement
    
  4. Pour configurer UWSGI et NGINX, des exemples de conf sont disponibles. Modifier le fichier pour être en accord avec le reste de votre config

    $ cp nginx_note.conf_example nginx_note.conf
    $ sudo ln -sf /var/www/note_kfet/nginx_note.conf /etc/nginx/sites-enabled/
    

    Si l'on a un emperor (plusieurs instance uwsgi):

    $ sudo ln -sf /var/www/note_kfet/uwsgi_note.ini /etc/uwsgi/sites/
    

    Sinon si on est dans le cas habituel :

    $ sudo ln -sf /var/www/note_kfet/uwsgi_note.ini /etc/uwsgi/apps-enabled/
    

    Le touch-reload est activé par défault, pour redémarrer la note il suffit donc de faire touch uwsgi_note.ini.

  5. Base de données. En production on utilise PostgreSQL.

    $ sudo apt-get install postgresql postgresql-contrib libpq-dev
    (env)$ pip3 install psycopg2
    

    La config de la base de donnée se fait comme suit:

    a. On se connecte au shell de psql

    $ sudo su - postgres
    $ psql
    

    b. On sécurise l'utilisateur postgres

    postgres=# \password
    Enter new password:
    

    Conservez ce mot de passe de la meme manière que tous les autres.

    c. On créer la basse de donnée, et l'utilisateur associé

    postgres=# CREATE USER note WITH PASSWORD 'un_mot_de_passe_sur';
    CREATE ROLE
    postgres=# CREATE DATABASE note_db OWNER note;
    CREATE DATABASE
    

    Si tout va bien :

    postgres=#\list
    List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
    -----------+----------+----------+-------------+-------------+-----------------------
     note_db   | note     | UTF8     | fr_FR.UTF-8 | fr_FR.UTF-8 | 
     postgres  | postgres | UTF8     | fr_FR.UTF-8 | fr_FR.UTF-8 | 
     template0 | postgres | UTF8     | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres+postgres=CTc/postgres
     template1 | postgres | UTF8     | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres  +postgres=CTc/postgres
    (4 rows)
    
  6. Variable d'environnement et Migrations

    On copie le fichier .env_example vers le fichier .env à la racine du projet et on renseigne des secrets et des paramètres :

    DJANGO_APP_STAGE=dev # ou "prod" 
    DJANGO_DEV_STORE_METHOD=sqlite # ou "postgres"
    DJANGO_DB_HOST=localhost
    DJANGO_DB_NAME=note_db
    DJANGO_DB_USER=note
    DJANGO_DB_PASSWORD=CHANGE_ME
    DJANGO_DB_PORT=
    DJANGO_SECRET_KEY=CHANGE_ME
    DJANGO_SETTINGS_MODULE="note_kfet.settings
    NOTE_URL=localhost # URL où accéder à la note
    DOMAIN=localhost # note.example.com
    CONTACT_EMAIL=tresorerie.bde@localhost
    # Le reste n'est utile qu'en production, pour configurer l'envoi des mails
    NOTE_MAIL=notekfet@localhost
    EMAIL_HOST=smtp.localhost
    EMAIL_PORT=25
    EMAIL_USER=notekfet@localhost
    EMAIL_PASSWORD=CHANGE_ME
    WIKI_USER=NoteKfet2020
    WIKI_PASSWORD=CHANGE_ME
    

    Ensuite on (re)bascule dans l'environement virtuel et on lance les migrations

    $ source /env/bin/activate
    (env)$ ./manage.py check # pas de bêtise qui traine
    (env)$ ./manage.py makemigrations
    (env)$ ./manage.py migrate
    
  7. Enjoy \o/

Installation avec Docker

Il est possible de travailler sur une instance Docker.

  1. Cloner le dépôt là où vous voulez :

    $ git clone git@gitlab.crans.org:bde/nk20.git
    
  2. Copiez le fichier .env_example à la racine du projet vers le fichier .env, et mettez à jour vos variables d'environnement

  3. Dans le fichier docker_compose.yml, qu'on suppose déjà configuré, ajouter les lignes suivantes, en les adaptant à la configuration voulue :

     nk20:
       build: /chemin/vers/nk20
       volumes:
         - /chemin/vers/nk20:/code/
       env_file: /chemin/vers/nk20/.env
       restart: always
       labels:
         - traefik.domain=ndd.example.com
         - traefik.frontend.rule=Host:ndd.example.com
         - traefik.port=8000
    
  4. Enjoy :

    $ docker-compose up -d nk20
    

Lancer un serveur de développement

Avec ./manage.py runserver il est très rapide de mettre en place un serveur de développement par exemple sur son ordinateur.

  1. Cloner le dépôt là où vous voulez :

    $ git clone git@gitlab.crans.org:bde/nk20.git && cd nk20
    
  2. Créer un environnement Python isolé pour ne pas interférer avec les versions de paquets systèmes :

     $ python3 -m venv venv
     $ source venv/bin/activate
     (env)$ pip install -r requirements/base.txt
    
  3. Copier le fichier .env_example vers .env à la racine du projet et mettre à jour ce qu'il faut

  4. Migrations et chargement des données initiales :

    (env)$ ./manage.py makemigrations
    (env)$ ./manage.py migrate
    (env)$ ./manage.py loaddata initial
    
  5. Créer un super-utilisateur :

    (env)$ ./manage.py createsuperuser
    
  6. Enjoy :

    (env)$ ./manage.py runserver 0.0.0.0:8000
    

En mettant 0.0.0.0:8000 après runserver, vous rendez votre instance Django accessible depuis l'ensemble de votre réseau, pratique pour tester le rendu de la note sur un téléphone !

Documentation

Le cahier des charges initial est disponible sur le Wiki Crans.

La documentation des classes et fonctions est directement dans le code et est explorable à partir de la partie documentation de l'interface d'administration de Django. Commentez votre code !

La documentation plus haut niveau sur le développement est disponible sur le Wiki associé au dépôt Git.

FAQ

Regénérer les fichiers de traduction

Pour regénérer les traductions vous pouvez vous placer à la racine du projet et lancer le script makemessages. Il faut penser à ignorer les dossiers ne contenant pas notre code, dont le virtualenv.

django-admin makemessages -i env

Une fois les fichiers édités, vous pouvez compiler les nouvelles traductions avec

django-admin compilemessages