# GestioCOF

## Installation

### Vagrant

La façon recommandée d'installer GestioCOF sur votre machine est d'utiliser
[Vagrant](https://www.vagrantup.com/). Vagrant permet de créer une machine
virtuelle minimale sur laquelle tournera GestioCOF; ainsi on s'assure que tout
le monde à la même configuration de développement (même sous Windows !), et
l'installation se fait en une commande.

Pour utiliser Vagrant, il faut le
[télécharger](https://www.vagrantup.com/downloads.html) et l'installer. 

Si vous êtes sous Linux, votre distribution propose probablement des paquets
Vagrant dans le gestionnaire de paquets (la version sera moins récente, ce qui
peut parfois poser des problèmes de compatibilité).

Vagrant permet d'utiliser différents types de machines virtuelles; par défaut
il utilise [Virtualbox](https://www.virtualbox.org/) qu'il vous faudra
également installer.

Une fois ces dépendances installées voici quelques commandes importantes pour
gérer la machine virtuelle :

 - `vagrant up` permet de lancer la machine virtuelle. Si une machine virtuelle
   existe déjà, elle sera réutilisée; sinon, Vagrant va créer et configurer une
   nouvelle machine virtuelle pour vous (la première fois que vous lancez cette
   commande, Vagrant va télécharger une image d'Ubuntu; il vaut mieux avoir une
   connexion Internet pas trop mauvaise).

 - `vagrant suspend` permet de sauver l'état de la machine virtuelle sur le
   disque pour la relancer plus tard (y compris après un reboot) avec `vagrant
   up`

 - `vagrant halt` permet d'éteindre la machine virtuelle (par comparaison avec
   `vagrant suspend`, cela prend moins de place sur le disque car il n'y a pas
   besoin de sauver la RAM, mais la recréation avec `vagrant up` sera plus
   lente)

 - Enfin, `vagrant destroy` permet de détruire complètement la machine
   virtuelle : lors du prochain appel de `vagrant up`, elle sera réinstallée de
   zéro. *Attention, contrairement aux deux méthodes précédentes, `vagrant
   destroy` détruira irrémédiablement le contenu de votre base de données
   locale, si elle vous est d'un quelconque intérêt, réfléchissez à deux fois !*

 - `vagrant ssh` vous connecte en SSH à la machine virtuelle, dans le dossier
   où est installé GestioCOF. Vous pouvez utiliser les commandes Django
   habituelles (`manage.py runserver` etc.) pour lancer
   [le serveur en dev](#lancer-le-serveur-de-développement-standard) par
   exemple

**Le dossier avec le code de GestioCOF est partagé entre la machine virtuelle
et votre machine physique : vous pouvez donc utiliser votre éditeur favori pour
coder depuis l'extérieur de la machine virtuelle, et les changements seront
répercutés dans la machine virtuelle.**

#### Lancer le serveur de développement standard

Pour lancer le serveur de développement, il faut faire

       python manage.py runserver 0.0.0.0:8000

car par défaut Django n'écoute que sur l'adresse locale de la machine virtuelle
or vous voudrez accéder à GestioCOF depuis votre machine physique. L'url à
entrer dans le navigateur est `localhost:8000`.

#### Serveur de développement type production

Sur la VM Vagrant, un serveur apache est configuré pour servir GestioCOF de
façon similaire à la version en production : on utilise
[Daphne](https://github.com/django/daphne/) et `python manage.py runworker`
derrière un reverse-proxy apache. Le tout est monitoré par
[supervisor](http://supervisord.org/).

Ce serveur se lance tout seul et est accessible en dehors de la VM à l'url
`localhost:8080`. Toutefois il ne se recharge pas tout seul lorsque le code
change, il faut relancer le worker avec `sudo supervisorctl restart worker` pour
visualiser la dernière version du code.

### Installation manuelle

Si vous optez pour une installation manuelle plutôt que d'utiliser Vagrant, il
est fortement conseillé d'utiliser un environnement virtuel pour Python.

Il vous faudra installer pip, les librairies de développement de python, un
client et un serveur MySQL ainsi qu'un serveur redis ; sous Debian et dérivées
(Ubuntu, ...) :

    sudo apt-get install python-pip python-dev libmysqlclient-dev redis-server

Si vous décidez d'utiliser un environnement virtuel Python (virtualenv;
fortement conseillé), déplacez-vous dans le dossier où est installé GestioCOF
(le dossier où se trouve ce README), et créez-le maintenant :

    virtualenv env -p $(which python3)

L'option `-p` sert à préciser l'exécutable python à utiliser. Vous devez choisir
python3, si c'est la version de python par défaut sur votre système, ceci n'est
pas nécessaire. Pour l'activer, il faut faire

    . env/bin/activate

dans le même dossier.

Vous pouvez maintenant installer les dépendances Python depuis le fichier
`requirements-devel.txt` :

    pip install -r requirements-devel.txt

Copiez le fichier `cof/settings_dev.py` dans `cof/settings.py`.

#### Installation avec MySQL

Il faut maintenant installer MySQL. Si vous n'avez pas déjà MySQL installé sur
votre serveur, il faut l'installer ; sous Debian et dérivées (Ubuntu, ...) :

    sudo apt-get install mysql-server

Il vous demandera un mot de passe pour le compte d'administration MySQL,
notez-le quelque part (ou n'en mettez pas, le serveur n'est accessible que
localement par défaut). Si vous utilisez une autre distribution, consultez la
documentation de votre distribution pour savoir comment changer ce mot de passe
et démarrer le serveur MySQL (c'est automatique sous Ubuntu).

Vous devez alors créer un utilisateur local et une base `cof_gestion`, avec le
mot de passe de votre choix (remplacez `mot_de_passe`) :

    mysql -uroot -e "CREATE DATABASE cof_gestion; GRANT ALL PRIVILEGES ON cof_gestion.* TO 'cof_gestion'@'localhost' IDENTIFIER BY 'mot_de_passe'"

Éditez maintenant le fichier `cof/settings.py` pour y intégrer ces changements ;
la définition de `DATABASES` doit ressembler à (à nouveau, remplacez
`mot_de_passe` de façon appropriée) :

    DATABASES = {
	'default': {
	    'ENGINE': 'django.db.backends.mysql',
	    'NAME': 'cof_gestion',
	    'USER': 'cof_gestion',
	    'PASSWORD': 'mot_de_passe',
	}
    }

#### Installation avec SQLite

GestioCOF est installé avec MySQL sur la VM COF, et afin d'avoir un
environnement de développement aussi proche que possible de ce qui tourne en
vrai pour éviter les mauvaises surprises, il est conseillé d'utiliser MySQL sur
votre machine de développement également. Toutefois, GestioCOF devrait
fonctionner avec d'autres moteurs SQL, et certains préfèrent utiliser SQLite
pour sa légèreté et facilité d'installation.

Si vous décidez d'utiliser SQLite, il faut l'installer ; sous Debian et dérivées :

    sudo apt-get install sqlite3

puis éditer le fichier `cof/settings.py` pour que la définition de `DATABASES`
ressemble à :

    DATABASES = {
	'default': {
	    'ENGINE': 'django.db.backends.sqlite3',
	    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
	}
    }

#### Fin d'installation

Il ne vous reste plus qu'à initialiser les modèles de Django avec la commande suivante :

    python manage.py migrate

Charger les mails indispensables au bon fonctionnement de GestioCOF :

    python manage.py syncmails

Une base de donnée pré-remplie est disponible en lançant les commandes :

    python manage.py loaddata gestion sites accounts groups articles
    python manage.py loaddevdata

Vous êtes prêts à développer ! Lancer GestioCOF en faisant

    python manage.py runserver

### Mise à jour

Pour mettre à jour les paquets Python, utiliser la commande suivante :

    pip install --upgrade -r requirements.txt -r requirements-devel.txt

Pour mettre à jour les modèles après une migration, il faut ensuite faire :

    python manage.py migrate


## Documentation utilisateur

Une brève documentation utilisateur pour se familiariser plus vite avec l'outil
est accessible sur le
[wiki](https://git.eleves.ens.fr/cof-geek/gestioCOF/wikis/home). 
