Merge branch 'Kerl/production_settings' into 'master'
Crée un setup proche de celui en production On fait tourner GestioCOF avec daphne derrière un reverse-proxy Apache sur la VM Vagrant tout comme sur le serveur de production. On peut tester en local GestioCOF en “conditions réelles”. Le serveur lancé avec `python manage.py runserver 0.0.0.0:8000` est toujours accessible à la même url `localhost:8000`. Le (nouveau) serveur apache est accessible à `localhost:8080`. Pour appliquer les changements dans le code au serveur type prod, il faut relancer le worker : `sudo supervisorctl restart worker`. Alors que le serveur de dev se relance tout seul. NB important : ce patch supprime le mot de passe sur le serveur redis en dev, pour faire marcher ce nouveau setup avec un version précédente de la VM, il faut lancer `sudo redis-cli config set requirepass ""` Fixes #66 Fixes #9 See merge request !79
This commit is contained in:
commit
cf430b5d3b
7 changed files with 103 additions and 16 deletions
39
README.md
39
README.md
|
@ -47,28 +47,49 @@ gérer la machine virtuelle :
|
||||||
|
|
||||||
- `vagrant ssh` vous connecte en SSH à la machine virtuelle, dans le dossier
|
- `vagrant ssh` vous connecte en SSH à la machine virtuelle, dans le dossier
|
||||||
où est installé GestioCOF. Vous pouvez utiliser les commandes Django
|
où est installé GestioCOF. Vous pouvez utiliser les commandes Django
|
||||||
habituelles (`manage.py runserver` etc.); toutefois pour lancer le serveur il faut faire
|
habituelles (`manage.py runserver` etc.) pour lancer
|
||||||
|
[le serveur en dev](#lancer-le-serveur-de-développement-standard) par
|
||||||
python manage.py runserver 0.0.0.0:8000
|
exemple
|
||||||
|
|
||||||
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
|
**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
|
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
|
coder depuis l'extérieur de la machine virtuelle, et les changements seront
|
||||||
répercutés dans la machine virtuelle.**
|
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
|
### Installation manuelle
|
||||||
|
|
||||||
Si vous optez pour une installation manuelle plutôt que d'utiliser Vagrant, il
|
Si vous optez pour une installation manuelle plutôt que d'utiliser Vagrant, il
|
||||||
est fortement conseillé d'utiliser un environnement virtuel pour Python.
|
est fortement conseillé d'utiliser un environnement virtuel pour Python.
|
||||||
|
|
||||||
Il vous faudra installer mercurial, pip, les librairies de développement de
|
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, ...) :
|
python, un client et un serveur MySQL ainsi qu'un serveur redis ; sous Debian et
|
||||||
|
dérivées (Ubuntu, ...) :
|
||||||
|
|
||||||
sudo apt-get install mercurial python-pip python-dev libmysqlclient-dev
|
sudo apt-get install mercurial python-pip python-dev libmysqlclient-dev
|
||||||
|
redis-server
|
||||||
|
|
||||||
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
|
||||||
|
@ -87,7 +108,7 @@ Vous pouvez maintenant installer les dépendances Python depuis les fichiers
|
||||||
|
|
||||||
pip install -r requirements.txt -r requirements-devel.txt
|
pip install -r requirements.txt -r requirements-devel.txt
|
||||||
|
|
||||||
Enfin, copiez le fichier `cof/settings_dev.py` dans `cof/settings.py`.
|
Copiez le fichier `cof/settings_dev.py` dans `cof/settings.py`.
|
||||||
|
|
||||||
#### Installation avec MySQL
|
#### Installation avec MySQL
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import os
|
import os
|
||||||
from channels.asgi import get_channel_layer
|
from channels.asgi import get_channel_layer
|
||||||
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cof.settings")
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cof.settings_dev")
|
||||||
|
|
||||||
channel_layer = get_channel_layer()
|
channel_layer = get_channel_layer()
|
|
@ -29,7 +29,7 @@ SECRET_KEY = 'q()(zn4m63i%5cp4)f+ww4-28_w+ly3q9=6imw2ciu&_(5_4ah'
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
|
|
||||||
ALLOWED_HOSTS = []
|
ALLOWED_HOSTS = ['127.0.0.1']
|
||||||
|
|
||||||
|
|
||||||
# Application definition
|
# Application definition
|
||||||
|
@ -123,6 +123,7 @@ USE_TZ = True
|
||||||
# https://docs.djangoproject.com/en/1.8/howto/static-files/
|
# https://docs.djangoproject.com/en/1.8/howto/static-files/
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
|
STATIC_ROOT = '/var/www/static/'
|
||||||
|
|
||||||
STATICFILES_DIRS = (
|
STATICFILES_DIRS = (
|
||||||
os.path.join(BASE_DIR, 'static/'),
|
os.path.join(BASE_DIR, 'static/'),
|
||||||
|
@ -175,7 +176,7 @@ CHANNEL_LAYERS = {
|
||||||
"default": {
|
"default": {
|
||||||
"BACKEND": "asgi_redis.RedisChannelLayer",
|
"BACKEND": "asgi_redis.RedisChannelLayer",
|
||||||
"CONFIG": {
|
"CONFIG": {
|
||||||
"hosts": [("redis://:redis_password@127.0.0.1:6379/0")],
|
"hosts": [("localhost", 6379)],
|
||||||
},
|
},
|
||||||
"ROUTING": "cof.routing.channel_routing",
|
"ROUTING": "cof.routing.channel_routing",
|
||||||
}
|
}
|
||||||
|
|
29
provisioning/apache.conf
Normal file
29
provisioning/apache.conf
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName default
|
||||||
|
DocumentRoot /var/www/html
|
||||||
|
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass /static/ !
|
||||||
|
ProxyPass /media/ !
|
||||||
|
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
|
|
@ -9,7 +9,7 @@ DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4"
|
||||||
|
|
||||||
# Installation de paquets utiles
|
# Installation de paquets utiles
|
||||||
apt-get update && apt-get install -y mercurial python-pip python-dev \
|
apt-get update && apt-get install -y mercurial python-pip python-dev \
|
||||||
libmysqlclient-dev libjpeg-dev git
|
libmysqlclient-dev libjpeg-dev git redis-server
|
||||||
|
|
||||||
# Configuration et installation de mysql. Le mot de passe root est le même que
|
# 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
|
# le mot de passe pour l'utilisateur local - pour rappel, ceci est une instance
|
||||||
|
@ -21,9 +21,15 @@ 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'"
|
mysql -uroot -p$DBPASSWD -e "CREATE DATABASE $DBNAME; GRANT ALL PRIVILEGES ON $DBNAME.* TO '$DBUSER'@'localhost' IDENTIFIED BY '$DBPASSWD'"
|
||||||
|
|
||||||
# Installation de redis-server. Todo: lui mettre un mot de passe
|
# Installation et configuration d'Apache
|
||||||
apt-get install -y redis-server
|
apt-get install -y apache2
|
||||||
redis-cli config set requirepass redis_password
|
a2enmod proxy proxy_http
|
||||||
|
cp /vagrant/provisioning/apache.conf /etc/apache2/sites-available/gestiocof.conf
|
||||||
|
a2ensite gestiocof
|
||||||
|
a2dissite 000-default
|
||||||
|
service apache2 restart
|
||||||
|
mkdir /var/www/static
|
||||||
|
chown -R vagrant:www-data /var/www/static
|
||||||
|
|
||||||
# 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 > ~vagrant/.bash_profile <<EOF
|
cat > ~vagrant/.bash_profile <<EOF
|
||||||
|
@ -54,3 +60,12 @@ sudo -H -u vagrant DJANGO_SETTINGS_MODULE='cof.settings_dev' DBUSER=$DBUSER DBNA
|
||||||
|
|
||||||
# Installation du cron pour les mails de rappels
|
# Installation du cron pour les mails de rappels
|
||||||
sudo -H -u vagrant crontab provisioning/cron.dev
|
sudo -H -u vagrant crontab provisioning/cron.dev
|
||||||
|
|
||||||
|
# On installe Daphne et on demande à supervisor de le lancer
|
||||||
|
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
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
|
|
||||||
python manage.py migrate
|
python manage.py migrate
|
||||||
python manage.py loaddata users root bda gestion sites
|
python manage.py loaddata users root bda gestion sites
|
||||||
|
python manage.py collectstatic --noinput
|
||||||
|
|
20
provisioning/supervisor.conf
Normal file
20
provisioning/supervisor.conf
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[program:worker]
|
||||||
|
command=/usr/bin/python /vagrant/manage.py runworker
|
||||||
|
directory=/vagrant/
|
||||||
|
user=vagrant
|
||||||
|
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=/usr/local/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=vagrant
|
Loading…
Reference in a new issue