Merge branch 'master' into test/views_kfet

This commit is contained in:
Aurélien Delobelle 2017-08-14 21:18:46 +02:00
commit 343b52f986
19 changed files with 274 additions and 261 deletions

5
.gitignore vendored
View file

@ -9,3 +9,8 @@ venv/
/src /src
media/ media/
*.log *.log
*.sqlite3
# PyCharm
.idea
.cache

118
README.md
View file

@ -66,119 +66,65 @@ car par défaut Django n'écoute que sur l'adresse locale de la machine virtuell
or vous voudrez accéder à GestioCOF depuis votre machine physique. L'url à or vous voudrez accéder à GestioCOF depuis votre machine physique. L'url à
entrer dans le navigateur est `localhost:8000`. entrer dans le navigateur est `localhost:8000`.
#### Serveur de développement type production #### Serveur de développement type production
Sur la VM Vagrant, un serveur apache est configuré pour servir GestioCOF de Juste histoire de jouer, pas indispensable pour développer :
façon similaire à la version en production : on utilise
La VM Vagrant héberge en plus un serveur nginx configuré pour servir GestioCOF
comme en production : on utilise
[Daphne](https://github.com/django/daphne/) et `python manage.py runworker` [Daphne](https://github.com/django/daphne/) et `python manage.py runworker`
derrière un reverse-proxy apache. Le tout est monitoré par derrière un reverse-proxy nginx.
[supervisor](http://supervisord.org/).
Ce serveur se lance tout seul et est accessible en dehors de la VM à l'url 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 `localhost:8080/gestion/`. Toutefois il ne se recharge pas tout seul lorsque le
change, il faut relancer le worker avec `sudo supervisorctl restart worker` pour code change, il faut relancer le worker avec `sudo systemctl restart
visualiser la dernière version du code. worker.service` pour visualiser la dernière version du code.
### Installation manuelle ### Installation manuelle
Si vous optez pour une installation manuelle plutôt que d'utiliser Vagrant, il Vous pouvez opter pour une installation manuelle plutôt que d'utiliser Vagrant,
est fortement conseillé d'utiliser un environnement virtuel pour Python. il est fortement conseillé d'utiliser un environnement virtuel pour Python.
Il vous faudra installer pip, les librairies de développement de python, un Il vous faudra installer pip, les librairies de développement de python ainsi
client et un serveur MySQL ainsi qu'un serveur redis ; sous Debian et dérivées que sqlite3, un moteur de base de données léger et simple d'utilisation. Sous
(Ubuntu, ...) : Debian et dérivées (Ubuntu, ...) :
sudo apt-get install python-pip python-dev libmysqlclient-dev redis-server sudo apt-get install python3-pip python3-dev sqlite3
Si vous décidez d'utiliser un environnement virtuel Python (virtualenv; Si vous décidez d'utiliser un environnement virtuel Python (virtualenv;
fortement conseillé), déplacez-vous dans le dossier où est installé GestioCOF fortement conseillé), déplacez-vous dans le dossier où est installé GestioCOF
(le dossier où se trouve ce README), et créez-le maintenant : (le dossier où se trouve ce README), et créez-le maintenant :
virtualenv env -p $(which python3) python3 -m venv venv
L'option `-p` sert à préciser l'exécutable python à utiliser. Vous devez choisir Pour l'activer, il faut faire
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 . venv/bin/activate
dans le même dossier. dans le même dossier.
Vous pouvez maintenant installer les dépendances Python depuis le fichier Vous pouvez maintenant installer les dépendances Python depuis le fichier
`requirements-devel.txt` : `requirements-devel.txt` :
pip install -U pip
pip install -r requirements-devel.txt pip install -r requirements-devel.txt
Copiez le fichier `cof/settings_dev.py` dans `cof/settings.py`. Pour terminer, copier le fichier `cof/settings/secret_example.py` vers
`cof/settings/secret.py`. Sous Linux ou Mac, préférez plutôt un lien symbolique
pour profiter de façon transparente des mises à jour du fichier:
#### Installation avec MySQL ln -s secret_example.py cof/settings/secret.py
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 #### Fin d'installation
Il ne vous reste plus qu'à initialiser les modèles de Django avec la commande suivante : Il ne vous reste plus qu'à initialiser les modèles de Django et peupler la base
de donnée avec les données nécessaires au bon fonctionnement de GestioCOF + des
données bidons bien pratiques pour développer avec la commande suivante :
python manage.py migrate bash provisioning/prepare_django.sh
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 articles
python manage.py loaddevdata
Vous êtes prêts à développer ! Lancer GestioCOF en faisant Vous êtes prêts à développer ! Lancer GestioCOF en faisant
@ -188,7 +134,7 @@ Vous êtes prêts à développer ! Lancer GestioCOF en faisant
Pour mettre à jour les paquets Python, utiliser la commande suivante : Pour mettre à jour les paquets Python, utiliser la commande suivante :
pip install --upgrade -r requirements.txt -r requirements-devel.txt pip install --upgrade -r requirements-devel.txt
Pour mettre à jour les modèles après une migration, il faut ensuite faire : Pour mettre à jour les modèles après une migration, il faut ensuite faire :
@ -197,6 +143,6 @@ Pour mettre à jour les modèles après une migration, il faut ensuite faire :
## Documentation utilisateur ## Documentation utilisateur
Une brève documentation utilisateur pour se familiariser plus vite avec l'outil Une brève documentation utilisateur est accessible sur le
est accessible sur le [wiki](https://git.eleves.ens.fr/cof-geek/gestioCOF/wikis/home) pour avoir une
[wiki](https://git.eleves.ens.fr/cof-geek/gestioCOF/wikis/home). idée de la façon dont le COF utilise GestioCOF.

View file

@ -8,26 +8,43 @@ the local development server should be here.
import os import os
# Database credentials
try: try:
from .secret import DBNAME, DBUSER, DBPASSWD from . import secret
except ImportError: except ImportError:
# On the local development VM, theses credentials are in the environment raise ImportError(
DBNAME = os.environ["DBNAME"] "The secret.py file is missing.\n"
DBUSER = os.environ["DBUSER"] "For a development environment, simply copy secret_example.py"
DBPASSWD = os.environ["DBPASSWD"]
except KeyError:
raise RuntimeError("Secrets missing")
# Other secrets
try:
from .secret import (
SECRET_KEY, RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY, ADMINS,
REDIS_PASSWD, REDIS_DB, REDIS_HOST, REDIS_PORT, KFETOPEN_TOKEN,
) )
except ImportError:
raise RuntimeError("Secrets missing")
def import_secret(name):
"""
Shorthand for importing a value from the secret module and raising an
informative exception if a secret is missing.
"""
try:
return getattr(secret, name)
except AttributeError:
raise RuntimeError("Secret missing: {}".format(name))
SECRET_KEY = import_secret("SECRET_KEY")
ADMINS = import_secret("ADMINS")
SERVER_EMAIL = import_secret("SERVER_EMAIL")
DBNAME = import_secret("DBNAME")
DBUSER = import_secret("DBUSER")
DBPASSWD = import_secret("DBPASSWD")
REDIS_PASSWD = import_secret("REDIS_PASSWD")
REDIS_DB = import_secret("REDIS_DB")
REDIS_HOST = import_secret("REDIS_HOST")
REDIS_PORT = import_secret("REDIS_PORT")
RECAPTCHA_PUBLIC_KEY = import_secret("RECAPTCHA_PUBLIC_KEY")
RECAPTCHA_PRIVATE_KEY = import_secret("RECAPTCHA_PRIVATE_KEY")
KFETOPEN_TOKEN = import_secret("KFETOPEN_TOKEN")
BASE_DIR = os.path.dirname( BASE_DIR = os.path.dirname(
@ -119,7 +136,7 @@ TEMPLATES = [
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.mysql', 'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': DBNAME, 'NAME': DBNAME,
'USER': DBUSER, 'USER': DBUSER,
'PASSWORD': DBPASSWD, 'PASSWORD': DBPASSWD,

View file

@ -3,9 +3,8 @@ Django development settings for the cof project.
The settings that are not listed here are imported from .common The settings that are not listed here are imported from .common
""" """
import os from .common import * # NOQA
from .common import INSTALLED_APPS, MIDDLEWARE_CLASSES
from .common import *
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
@ -18,9 +17,9 @@ DEBUG = True
# --- # ---
STATIC_URL = '/static/' STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/static/' STATIC_ROOT = '/srv/gestiocof/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') MEDIA_ROOT = '/srv/gestiocof/media/'
MEDIA_URL = '/media/' MEDIA_URL = '/media/'
@ -28,26 +27,6 @@ MEDIA_URL = '/media/'
# Debug tool bar # Debug tool bar
# --- # ---
# "Versions" panel of django-debug-toolbar <=1.8 is not compatible with
# wagtailmenus.
# See https://github.com/jazzband/django-debug-toolbar/issues/922
# TODO: Bug should be fixed in ddt 1.9 (not released yet). When fixed, this
# declaration may be removed.
DEBUG_TOOLBAR_PANELS = [
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
def show_toolbar(request): def show_toolbar(request):
""" """
On ne veut pas la vérification de INTERNAL_IPS faite par la debug-toolbar On ne veut pas la vérification de INTERNAL_IPS faite par la debug-toolbar

36
cof/settings/local.py Normal file
View file

@ -0,0 +1,36 @@
"""
Django local settings for the cof project.
The settings that are not listed here are imported from .common
"""
import os
from .dev import * # NOQA
from .dev import BASE_DIR
# Use sqlite for local development
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": os.path.join(BASE_DIR, "db.sqlite3")
}
}
# Use the default cache backend for local development
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache"
}
}
# Use the default in memory asgi backend for local development
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgiref.inmemory.ChannelLayer",
"ROUTING": "cof.routing.routing",
}
}
# No need to run collectstatic -> unset STATIC_ROOT
STATIC_ROOT = None

View file

@ -5,7 +5,8 @@ The settings that are not listed here are imported from .common
import os import os
from .common import * from .common import * # NOQA
from .common import BASE_DIR
DEBUG = False DEBUG = False
@ -16,11 +17,13 @@ ALLOWED_HOSTS = [
"dev.cof.ens.fr" "dev.cof.ens.fr"
] ]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static")
STATIC_ROOT = os.path.join(
os.path.dirname(os.path.dirname(BASE_DIR)),
"public",
"static",
)
STATIC_URL = "/gestion/static/" STATIC_URL = "/gestion/static/"
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media") MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media")
MEDIA_URL = "/gestion/media/" MEDIA_URL = "/gestion/media/"
LDAP_SERVER_URL = "ldaps://ldap.spi.ens.fr:636"
EMAIL_HOST = "nef.ens.fr"

View file

@ -1,10 +1,20 @@
SECRET_KEY = 'q()(zn4m63i%5cp4)f+ww4-28_w+ly3q9=6imw2ciu&_(5_4ah' SECRET_KEY = 'q()(zn4m63i%5cp4)f+ww4-28_w+ly3q9=6imw2ciu&_(5_4ah'
RECAPTCHA_PUBLIC_KEY = "DUMMY" ADMINS = None
RECAPTCHA_PRIVATE_KEY = "DUMMY" SERVER_EMAIL = "root@vagrant"
DBUSER = "cof_gestion"
DBNAME = "cof_gestion"
DBPASSWD = "4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4"
REDIS_PASSWD = "dummy" REDIS_PASSWD = "dummy"
REDIS_PORT = 6379 REDIS_PORT = 6379
REDIS_DB = 0 REDIS_DB = 0
REDIS_HOST = "127.0.0.1" REDIS_HOST = "127.0.0.1"
ADMINS = None
RECAPTCHA_PUBLIC_KEY = "DUMMY"
RECAPTCHA_PRIVATE_KEY = "DUMMY"
EMAIL_HOST = None
KFETOPEN_TOKEN = "plop" KFETOPEN_TOKEN = "plop"
LDAP_SERVER_URL = None

View file

@ -3,7 +3,7 @@ import os
import sys import sys
if __name__ == "__main__": if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cof.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cof.settings.local")
from django.core.management import execute_from_command_line from django.core.management import execute_from_command_line

View file

@ -1,39 +0,0 @@
<VirtualHost *:80>
ServerName default
DocumentRoot /var/www/html
ProxyPreserveHost On
ProxyRequests Off
ProxyPass /static/ !
ProxyPass /media/ !
# Pour utiliser un sous-dossier (typiquement /gestion/), il faut faire a la
# place des lignes suivantes:
#
# RequestHeader set Daphne-Root-Path /gestion
# ProxyPass /gestion/ws/ ws://127.0.0.1:8001/ws/
# ProxyPass /gestion http://127.0.0.1:8001/gestion
# ProxyPassReverse /gestion http://127.0.0.1:8001/gestion
#
# Penser egalement a changer les /static/ et /media/ dans la config apache
# ainsi que dans les settings django.
ProxyPass /ws/ ws://127.0.0.1:8001/ws/
ProxyPass / http://127.0.0.1:8001/
ProxyPassReverse / http://127.0.0.1:8001/
Alias /media /vagrant/media
Alias /static /var/www/static
<Directory /vagrant/media>
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/static>
Order deny,allow
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

View file

@ -9,75 +9,63 @@ DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4"
# Installation de paquets utiles # Installation de paquets utiles
apt-get update && apt-get upgrade -y apt-get update && apt-get upgrade -y
apt-get install -y python3-pip python3-dev python3-venv libmysqlclient-dev \ apt-get install -y python3-pip python3-dev python3-venv libpq-dev postgresql \
libjpeg-dev git redis-server postgresql-contrib libjpeg-dev nginx git redis-server
# Configuration et installation de mysql. Le mot de passe root est le même que # Postgresql
# le mot de passe pour l'utilisateur local - pour rappel, ceci est une instance sudo -u postgres createdb $DBNAME
# locale de développement. sudo -u postgres createuser -SdR $DBUSER
echo "mysql-server mysql-server/root_password password $DBPASSWD" | debconf-set-selections sudo -u postgres psql -c "ALTER USER $DBUSER WITH PASSWORD '$DBPASSWD';"
echo "mysql-server mysql-server/root_password_again password $DBPASSWD" | debconf-set-selections sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DBNAME TO $DBUSER;"
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'" # Redis
mysql -uroot -p$DBPASSWD -e "GRANT ALL PRIVILEGES ON test_$DBNAME.* TO '$DBUSER'@'localhost'"
# Configuration de redis
REDIS_PASSWD="dummy" REDIS_PASSWD="dummy"
redis-cli CONFIG SET requirepass $REDIS_PASSWD redis-cli CONFIG SET requirepass $REDIS_PASSWD
redis-cli -a $REDIS_PASSWD CONFIG REWRITE redis-cli -a $REDIS_PASSWD CONFIG REWRITE
# Installation et configuration d'Apache # Contenu statique
apt-get install -y apache2 mkdir -p /srv/gestiocof/media
a2enmod proxy proxy_http proxy_wstunnel headers mkdir -p /srv/gestiocof/static
cp /vagrant/provisioning/apache.conf /etc/apache2/sites-available/gestiocof.conf chown -R ubuntu:www-data /srv/gestiocof
a2ensite gestiocof
a2dissite 000-default # Nginx
service apache2 restart ln -s -f /vagrant/provisioning/nginx.conf /etc/nginx/sites-enabled/gestiocof.conf
mkdir /var/www/static rm -f /etc/nginx/sites-enabled/default
chown -R ubuntu:www-data /var/www/static systemctl reload nginx
# Environnement virtuel python
sudo -H -u ubuntu python3 -m venv ~ubuntu/venv
sudo -H -u ubuntu ~ubuntu/venv/bin/pip install -U pip
sudo -H -u ubuntu ~ubuntu/venv/bin/pip install -r /vagrant/requirements-devel.txt
# Préparation de Django
cd /vagrant
ln -s -f secret_example.py cof/settings/secret.py
sudo -H -u ubuntu \
DJANGO_SETTINGS_MODULE='cof.settings.dev' \
bash -c ". ~/venv/bin/activate && bash provisioning/prepare_django.sh"
/home/ubuntu/venv/bin/python manage.py collectstatic --noinput --settings cof.settings.dev
# Installation du cron pour les mails de rappels
sudo -H -u ubuntu crontab provisioning/cron.dev
# Daphne + runworker
cp /vagrant/provisioning/daphne.service /etc/systemd/system/daphne.service
cp /vagrant/provisioning/worker.service /etc/systemd/system/worker.service
systemctl enable daphne.service
systemctl enable worker.service
systemctl start daphne.service
systemctl start worker.service
# Mise en place du .bash_profile pour tout configurer lors du `vagrant ssh` # Mise en place du .bash_profile pour tout configurer lors du `vagrant ssh`
cat >> ~ubuntu/.bashrc <<EOF cat >> ~ubuntu/.bashrc <<EOF
# On utilise la version de développement de GestioCOF # On utilise la version de développement de GestioCOF
export DJANGO_SETTINGS_MODULE='cof.settings.dev' export DJANGO_SETTINGS_MODULE='cof.settings.dev'
# Identifiants MySQL
export DBUSER="$DBUSER"
export DBNAME="$DBNAME"
export DBPASSWD="$DBPASSWD"
# Permet d'utiliser les utilitaires pythons locaux
export PATH="\$PATH:\$HOME/.local/bin"
# Charge le virtualenv # Charge le virtualenv
source ~/venv/bin/activate source ~/venv/bin/activate
# On va dans /vagrant où se trouve le code de gestioCOF # On va dans /vagrant où se trouve le code de gestioCOF
cd /vagrant cd /vagrant
EOF EOF
# On va dans /vagrant où se trouve gestioCOF
cd /vagrant
# Installation du virtualenv, on utilise désormais python3
sudo -H -u ubuntu python3 -m venv ~ubuntu/venv
sudo -H -u ubuntu ~ubuntu/venv/bin/pip install -U pip
sudo -H -u ubuntu ~ubuntu/venv/bin/pip install -r requirements.txt -r requirements-devel.txt
# Préparation de Django
if [ ! -f cof/settings/secret.py ]; then sudo -H -u ubuntu ln -s secret_example.py cof/settings/secret.py; fi
sudo -H -u ubuntu DJANGO_SETTINGS_MODULE='cof.settings.dev' DBUSER=$DBUSER DBNAME=$DBNAME DBPASSWD=$DBPASSWD bash provisioning/prepare_django.sh
# Installation du cron pour les mails de rappels
sudo -H -u ubuntu crontab provisioning/cron.dev
# On installe Daphne et on demande à supervisor de le lancer
sudo -H -u ubuntu ~ubuntu/venv/bin/pip install daphne
apt-get install -y supervisor
cp /vagrant/provisioning/supervisor.conf /etc/supervisor/conf.d/gestiocof.conf
sed "s/{DBUSER}/$DBUSER/" -i /etc/supervisor/conf.d/gestiocof.conf
sed "s/{DBNAME}/$DBNAME/" -i /etc/supervisor/conf.d/gestiocof.conf
sed "s/{DBPASSWD}/$DBPASSWD/" -i /etc/supervisor/conf.d/gestiocof.conf
service supervisor restart

View file

@ -6,5 +6,5 @@ DBUSER="cof_gestion"
DBNAME="cof_gestion" DBNAME="cof_gestion"
DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4" DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4"
19 */12 * * * date >> /vagrant/rappels.log ; python /vagrant/manage.py sendrappels >> /vagrant/rappels.log 2>&1 19 */12 * * * date >> /vagrant/rappels.log ; /ubuntu/home/venv/bin/python /vagrant/manage.py sendrappels >> /vagrant/rappels.log 2>&1
*/5 * * * * python /vagrant/manage.py manage_revente >> /vagrant/reventes.log 2>&1 */5 * * * * /ubuntu/home/venv/bin/python /vagrant/manage.py manage_revente >> /vagrant/reventes.log 2>&1

View file

@ -9,9 +9,9 @@ envoie les mails de rappels des spectacles à venir (sauf s'ils ont déjà été
envoyés). envoyés).
- Un fois toutes les 12 heures me semble bien. - Un fois toutes les 12 heures me semble bien.
- Penser à utiliser le bon executable python (virtualenvs) et les bonnes - Penser à utiliser le bon executable python (virtualenvs) et le bon fichier de
variables d'environnement si besoin. settings pour Django.
- Garde les logs peut être une bonne idée. - Garder les logs peut être une bonne idée.
Exemple : voir le fichier `provisioning/cron.dev`. Exemple : voir le fichier `provisioning/cron.dev`.

View file

@ -0,0 +1,16 @@
Description="GestioCOF"
After=syslog.target
After=network.target
[Service]
Type=simple
User=ubuntu
Group=ubuntu
TimeoutSec=300
WorkingDirectory=/vagrant
Environment="DJANGO_SETTINGS_MODULE=cof.settings.dev"
ExecStart=/home/ubuntu/venv/bin/daphne -u /srv/gestiocof/gestiocof.sock \
cof.asgi:channel_layer
[Install]
WantedBy=multi-user.target

56
provisioning/nginx.conf Normal file
View file

@ -0,0 +1,56 @@
upstream gestiocof {
# Daphne listens on a unix socket
server unix:/srv/gestiocof/gestiocof.sock;
}
server {
listen 80;
server_name localhost;
root /srv/gestiocof/;
# / /gestion/
# /gestion /gestion/
rewrite ^/$ /gestion/;
rewrite ^/gestion$ /gestion/;
# Static files
location /static/ {
access_log off;
add_header Cache-Control "public";
expires 7d;
}
# Uploaded media
location /media/ {
access_log off;
add_header Cache-Control "public";
expires 7d;
}
location /gestion/ {
# A copy-paste of what we have in production
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-SSL-Client-Serial $ssl_client_serial;
proxy_set_header X-SSL-Client-Verify $ssl_client_verify;
proxy_set_header X-SSL-Client-S-DN $ssl_client_s_dn;
proxy_set_header Daphne-Root-Path /gestion;
location /gestion/ws/ {
# See http://nginx.org/en/docs/http/websocket.html
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://gestiocof/ws/;
}
location /gestion/ {
proxy_pass http://gestiocof;
}
}
}

View file

@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# Doit être lancé par bootstrap.sh
source ~/venv/bin/activate
python manage.py migrate python manage.py migrate
python manage.py loaddata gestion sites articles python manage.py loaddata gestion sites articles
python manage.py loaddevdata python manage.py loaddevdata
python manage.py syncmails python manage.py syncmails
python manage.py collectstatic --noinput

View file

@ -1,20 +0,0 @@
[program:worker]
command=/home/ubuntu/venv/bin/python /vagrant/manage.py runworker
directory=/vagrant/
user=ubuntu
environment=DBUSER={DBUSER},DBNAME={DBNAME},DBPASSWD={DBPASSWD},DJANGO_SETTINGS_MODULE="cof.settings.dev"
autostart=true
autorestart=true
redirect_stderr=true
stopasgroup=true
redirect_stderr=true
[program:interface]
command=/home/ubuntu/venv/bin/daphne -b 127.0.0.1 -p 8001 cof.asgi:channel_layer
environment=DBUSER={DBUSER},DBNAME={DBNAME},DBPASSWD={DBPASSWD},DJANGO_SETTINGS_MODULE="cof.settings.dev"
directory=/vagrant/
redirect_stderr=true
autostart=true
autorestart=true
stopasgroup=true
user=ubuntu

View file

@ -0,0 +1,16 @@
[Unit]
Description="GestioCOF"
After=syslog.target
After=network.target
[Service]
Type=simple
User=ubuntu
Group=ubuntu
TimeoutSec=300
WorkingDirectory=/vagrant
Environment="DJANGO_SETTINGS_MODULE=cof.settings.dev"
ExecStart=/home/ubuntu/venv/bin/python manage.py runworker
[Install]
WantedBy=multi-user.target

View file

@ -1,4 +1,4 @@
-r requirements.txt -r requirements.txt
django-debug-toolbar -e git://github.com/jazzband/django-debug-toolbar.git@88ddc7bdf39c7ff660eac054eab225ac22926754#egg=django-debug-toolbar
django-debug-panel django-debug-panel
ipython ipython

View file

@ -7,7 +7,7 @@ django-djconfig==0.5.3
django-grappelli==2.8.1 django-grappelli==2.8.1
django-recaptcha==1.0.5 django-recaptcha==1.0.5
django-redis-cache==1.7.1 django-redis-cache==1.7.1
mysqlclient==1.3.7 psycopg2
Pillow==3.3.0 Pillow==3.3.0
six==1.10.0 six==1.10.0
unicodecsv==0.14.1 unicodecsv==0.14.1
@ -25,3 +25,6 @@ channels==1.1.5
python-dateutil python-dateutil
wagtail==1.10.* wagtail==1.10.*
wagtailmenus==2.2.* wagtailmenus==2.2.*
# Production tools
wheel