diff --git a/.gitignore b/.gitignore index 9f7bd14e..7d9fd123 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ cof/settings.py settings.py *~ venv/ +.vagrant +/src diff --git a/README.md b/README.md index 8ac6425c..ddfa177c 100644 --- a/README.md +++ b/README.md @@ -2,5 +2,163 @@ ## Installation -- Mettre à jour les paquets pythons `pip install --upgrade -r requirements.txt` -- Mettre à jour les modèles `python manage.py migrate` \ No newline at end of file +### 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.); toutefois pour lancer le serveur 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. + +**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.** + +### 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 mercurial, pip, les librairies de développement de +python, ainsi qu'un client et un serveur MySQL ; sous Debian et dérivées (Ubuntu, ...) : + + sudo apt-get install mercurial python-pip python-dev libmysqlclient-dev + +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 + +Pour l'activer, il faut faire + + . env/bin/activate + +dans le même dossier. + +Vous pouvez maintenant installer les dépendances Python depuis les fichiers +`requirements.txt` et `requirements-devel.txt` : + + pip install -r requirements.txt -r requirements-devel.txt + +Enfin, 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 + +et 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 diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 00000000..c84c3dd9 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,47 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure(2) do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + config.vm.box = "ubuntu/trusty64" + + # On associe le port 80 dans la machine virtuelle avec le port 8080 de notre + # ordinateur, et le port 8000 avec le port 8000. + config.vm.network :forwarded_port, guest: 80, host: 8080 + config.vm.network :forwarded_port, guest: 8000, host: 8000 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + # config.vm.provision "shell", inline: <<-SHELL + # sudo apt-get update + # sudo apt-get install -y apache2 + # SHELL + config.vm.provision :shell, path: "provisioning/bootstrap.sh" +end diff --git a/cof/settings_dev.py b/cof/settings_dev.py new file mode 100644 index 00000000..b83f09bc --- /dev/null +++ b/cof/settings_dev.py @@ -0,0 +1,150 @@ +""" +Django settings for cof project. + +For more information on this file, see +https://docs.djangoproject.com/en/1.8/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.8/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'q()(zn4m63i%5cp4)f+ww4-28_w+ly3q9=6imw2ciu&_(5_4ah' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition +INSTALLED_APPS = ( + 'gestioncof', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'grappelli', + 'django.contrib.admin', + 'django.contrib.admindocs', + 'bda', + 'bda2', + 'bda3', + 'pads', + 'rezo', + 'autocomplete_light', + 'eav', + 'captcha', + 'debug_toolbar', +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django.middleware.security.SecurityMiddleware', +) + +ROOT_URLCONF = 'cof.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + 'django.core.context_processors.i18n', + 'django.core.context_processors.media', + 'django.core.context_processors.static', + 'gestioncof.shared.context_processor', + ], + }, + }, +] + +# WSGI_APPLICATION = 'cof.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.8/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': os.environ['DBNAME'], + 'USER': os.environ['DBUSER'], + 'PASSWORD': os.environ['DBPASSWD'], + } +} + + +# Internationalization +# https://docs.djangoproject.com/en/1.8/topics/i18n/ + +LANGUAGE_CODE = 'fr-fr' + +TIME_ZONE = 'Europe/Paris' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.8/howto/static-files/ + +STATIC_URL = '/static/' + +# Various additional settings +SITE_ID = 1 + +# URL prefix for admin static files -- CSS, JavaScript and images. +# Make sure to use a trailing slash. +# Examples: "http://foo.com/static/admin/", "/static/admin/". +ADMIN_MEDIA_PREFIX = '/static/grappelli/' +GRAPPELLI_ADMIN_HEADLINE = "GestioCOF" +GRAPPELLI_ADMIN_TITLE = "GestioCOF" + +PETITS_COURS_FROM = "Le COF " +PETITS_COURS_BCC = "archivescof@gmail.com" +PETITS_COURS_REPLYTO = "cof@ens.fr" + +LOGIN_URL = "/login" +LOGIN_REDIRECT_URL = "/" + +CAS_SERVER_URL = 'https://cas.eleves.ens.fr/' +CAS_IGNORE_REFERER = True +CAS_REDIRECT_URL = '/' +CAS_EMAIL_FORMAT = "%s@clipper.ens.fr" +AUTHENTICATION_BACKENDS = ( + 'django.contrib.auth.backends.ModelBackend', + 'gestioncof.shared.COFCASBackend', +) + +# EMAIL_HOST="nef.ens.fr" + +RECAPTCHA_PUBLIC_KEY = "DUMMY" +RECAPTCHA_PRIVATE_KEY = "DUMMY" +RECAPTCHA_USE_SSL = True diff --git a/provisioning/bootstrap.sh b/provisioning/bootstrap.sh new file mode 100644 index 00000000..dde6e24a --- /dev/null +++ b/provisioning/bootstrap.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +# Configuration de la base de données. Le mot de passe est constant car c'est +# pour une installation de dév locale qui ne sera accessible que depuis la +# machine virtuelle. +DBUSER="cof_gestion" +DBNAME="cof_gestion" +DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4" + +# Installation de paquets utiles +apt-get update && apt-get install -y mercurial python-pip python-dev libmysqlclient-dev + +# Configuration et installation de mysql. Le mot de passe root est le même que +# le mot de passe pour l'utilisateur local - pour rappel, ceci est une instance +# locale de développement. +echo "mysql-server mysql-server/root_password password $DBPASSWD" | debconf-set-selections +echo "mysql-server mysql-server/root_password_again password $DBPASSWD" | debconf-set-selections + +apt-get install -y mysql-server + +mysql -uroot -p$DBPASSWD -e "CREATE DATABASE $DBNAME; GRANT ALL PRIVILEGES ON $DBNAME.* TO '$DBUSER'@'localhost' IDENTIFIED BY '$DBPASSWD'" + +# Mise en place du .bash_profile pour tout configurer lors du `vagrant ssh` +cat > ~vagrant/.bash_profile <