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 ""`
This commit is contained in:
parent
9979072c13
commit
f37bdd90b7
7 changed files with 104 additions and 16 deletions
43
README.md
43
README.md
|
@ -47,28 +47,47 @@ gérer la machine virtuelle :
|
|||
|
||||
- `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.
|
||||
habituelles (`manage.py runserver` etc.)
|
||||
|
||||
**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 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
|
||||
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
|
||||
|
@ -87,7 +106,13 @@ Vous pouvez maintenant installer les dépendances Python depuis les fichiers
|
|||
|
||||
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`.
|
||||
|
||||
Enfin, configurez le mot de passe redis le plus simple et de ne pas en utiliser
|
||||
(pas de risque en local) en remplaçant la ligne `hosts` dans
|
||||
`settings.CHANNEL_LAYER` par
|
||||
|
||||
"hosts": [("localhost", 6379)]
|
||||
|
||||
#### Installation avec MySQL
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import os
|
||||
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()
|
|
@ -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!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
ALLOWED_HOSTS = ['127.0.0.1']
|
||||
|
||||
|
||||
# Application definition
|
||||
|
@ -123,6 +123,7 @@ USE_TZ = True
|
|||
# https://docs.djangoproject.com/en/1.8/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
STATIC_ROOT = '/var/www/static/'
|
||||
|
||||
STATICFILES_DIRS = (
|
||||
os.path.join(BASE_DIR, 'static/'),
|
||||
|
@ -175,7 +176,7 @@ CHANNEL_LAYERS = {
|
|||
"default": {
|
||||
"BACKEND": "asgi_redis.RedisChannelLayer",
|
||||
"CONFIG": {
|
||||
"hosts": [("redis://:redis_password@127.0.0.1:6379/0")],
|
||||
"hosts": [("localhost", 6379)],
|
||||
},
|
||||
"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:8000/ws/
|
||||
ProxyPass / http://127.0.0.1:8000/
|
||||
ProxyPassReverse / http://127.0.0.1:8000/
|
||||
|
||||
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
|
||||
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
|
||||
# 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'"
|
||||
|
||||
# Installation de redis-server. Todo: lui mettre un mot de passe
|
||||
apt-get install -y redis-server
|
||||
redis-cli config set requirepass redis_password
|
||||
# Installation et configuration d'Apache
|
||||
apt-get install -y apache2
|
||||
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`
|
||||
cat > ~vagrant/.bash_profile <<EOF
|
||||
|
@ -54,3 +60,9 @@ sudo -H -u vagrant DJANGO_SETTINGS_MODULE='cof.settings_dev' DBUSER=$DBUSER DBNA
|
|||
|
||||
# Installation du cron pour les mails de rappels
|
||||
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
|
||||
service supervisor restart
|
||||
|
|
|
@ -2,3 +2,4 @@
|
|||
|
||||
python manage.py migrate
|
||||
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="cof_gestion",DBNAME="cof_gestion",DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4",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 8000 cof.asgi:channel_layer
|
||||
environment=DBUSER="cof_gestion",DBNAME="cof_gestion",DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4"
|
||||
directory=/vagrant/
|
||||
redirect_stderr=true
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stopasgroup=true
|
||||
user=vagrant
|
Loading…
Reference in a new issue