From 4d8d54e7de2bb045c81829f549401ef60e6070f3 Mon Sep 17 00:00:00 2001 From: Alexandre Iooss Date: Sun, 9 Feb 2020 14:18:39 +0100 Subject: [PATCH] Add uwsgi configuration --- README.md | 38 ++++++++++++++++++++++++++++++++------ entrypoint.sh | 21 +++++++++++++++++++-- requirements.txt | 3 ++- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c398e50..0b3b323 100644 --- a/README.md +++ b/README.md @@ -11,22 +11,48 @@ Elle permet de gérer les medias, bd, jeux, emprunts, ainsi que les adhérents d Ce projet est sous la licence GNU public license v3.0. -## Développement +## Installation -Après avoir installé un environnement Django, +### Développement + +On peut soit développer avec Docker, soit utiliser un VirtualEnv. + +Dans le cas du VirtualEnv, ```bash +python3 -m venv venv +. venv/bin/activate +pip install -r requirements.txt ./manage.py migrate ./manage.py collectstatic ./manage.py runserver ``` -## Configuration d'une base MySQL +### Production -Sur le serveur mysql ou postgresl, il est nécessaire de créer une base de donnée med, +Vous pouvez soit utiliser Docker, soit configurer manuellement le serveur. + +#### Mise en place du projet sur Zamok + +Pour mettre en place le projet sans droits root, +on va créer un socket uwsgi dans le répertoire personnel de l'utilisateur `club-med` +puis on va dire à Apache2 d'utiliser ce socket avec un `.htaccess`. + +Pour cela on va imiter ce que fait l'image Docker, + +```bash +python3 -m venv venv +. venv/bin/activate +pip install -r requirements.txt +./entrypoint.sh +``` + +#### Configuration d'une base de données + +Sur le serveur MySQL ou PostgreSQL, il est nécessaire de créer une base de donnée med, ainsi qu'un user med et un mot de passe associé. -Voici les étapes à éxecuter pour mysql : +Voici les étapes à executer pour MySQL : ```SQL CREATE DATABASE med; @@ -35,7 +61,7 @@ GRANT ALL PRIVILEGES ON med.* TO 'med'@'localhost'; FLUSH PRIVILEGES; ``` -Et pour postgresql : +Et pour PostgreSQL : ```SQL CREATE DATABASE med; diff --git a/entrypoint.sh b/entrypoint.sh index 3af5810..5538c65 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,8 +1,25 @@ #!/bin/bash +# This will launch the Django project as a fastcgi socket +# then Apache or NGINX will be able to use that socket + python manage.py compilemessages python manage.py makemigrations + +# Wait for database sleep 2 + python manage.py migrate -# TODO: use uwsgi in production -python manage.py runserver 0.0.0.0:8000 +uwsgi --chdir="$(pwd)" \ + --module=med.wsgi:application \ + --env DJANGO_SETTINGS_MODULE=med.settings \ + --master \ + --pidfile="$(pwd)/uwsgi.pid" \ # create a pidfile + --socket="$(pwd)/uwsgi.sock" \ + --processes=5 \ + --chmod-socket=600 \ + --harakiri=20 \ # respawn processes taking more than 20 seconds + --max-requests=5000 \ # respawn processes after serving 5000 requests + --vacuum \ # clean up when stopped + --daemonize="$(pwd)/uwsgi.log" \ + --protocol=fastcgi \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 651bd3a..31b84ae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,4 +9,5 @@ python-stdnum==1.10 djangorestframework==3.9.2 pyyaml==3.13 coreapi==2.3.3 -psycopg2 +psycopg2==2.7.7 +uwsgi==2.0.18 \ No newline at end of file