Add postgresql and environment installation in production

This commit is contained in:
jaguarondi 2016-04-26 16:24:34 +02:00
parent 95e0b0ad66
commit c93e1f6bec
2 changed files with 182 additions and 1 deletions

View File

@ -9,12 +9,193 @@ Pour une mise ne production, il nous faut donc quelque chose de plus solide:
* Nginx comme serveur principal
* Gunicorn comme serveur d'application
* PostgreSQL comme base de données
* supervisor pour lancer notre application
Les points suivants décrivent les étapes nécessaires à la mise en place de ces outils.
***Remarque***: dans ce qui suit, les commandes exécutées en root seront précédées de $$$.
**********
PostgreSQL
**********
On commence par installer PostgreSQL.
Par exemple, dans le cas de debian, on exécute la commande suivante:
.. code-block:: shell
$$$ aptitude install postgresql postgresql-contrib
Ensuite, on crée un utilisateur pour la DB:
.. code-block:: shell
$$$ su - postgres
postgres@gwift:~$ createuser --interactive -P
Enter name of role to add: gwift_user
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
postgres@gwift:~$
Finalement, on peut créer la DB:
.. code-block:: shell
postgres@gwift:~$ createdb --owner gwift_user gwift
postgres@gwift:~$ exit
logout
$$$
************
environement
************
Préparation
===========
On prépare l'environement pour accueillir notre application django.
Il faut d'abords rajouter certains packets qui seront nécessaires pour compiler certains module python:
.. code-block:: shell
$$$ aptitude install libpq-dev python3-dev
On créé un utilisateur dédié, pour limiter les accès au serveur dans le cas où notre application serait piratée.
.. code-block:: shell
$$$ groupadd --system webapps
$$$ useradd --system --gid webapps --shell /bin/bash --home /webapps/gwift gwift
Ensuite, on crée le repertoire où se trouvera notre application et on lui attribue le bon utilisatuer:
.. code-block:: shell
$$$ mkdir -p /webapps/gwift
$$$ chown gwift:webapps /webapps/gwift
Puis on crée notre environement virtuel:
.. code-block:: shell
$$$ su - gwift
gwift@gwift:~$ mkvirtualenv -p /usr/bin/python3 gwift
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in gwift/bin/python3
Also creating executable in gwift/bin/python
Installing setuptools, pip...done.
(gwift)gwift@gwift:~$
On peut maintenant cloner notre projet:
.. code-block:: shell
(gwift)gwift@gwift:~$ git clone git@framagit.org:Grimbox/gwift.git
Et installer les dépendances:
.. code-block:: shell
(gwift)gwift@gwift:~$ pip install -r requirements/production.txt
Le fichier production.txt contient les librairies pour gunicorn et PostgreSQL:
.. code-block:: txt
-r base.txt
gunicorn
psycopg2
Configuration
=============
Il ne nous reste plus qu'à mettre à jour la DB. On commance par créer le fichier de configuration de l'application en production:
.. code-block:: shell
(gwift)gwift@gwift:~$ touch gwift/gwift/settings/local.py
Et le contenu de local.py, avec la clé secrète et les paramètres pour se connecter à la DB:
.. code-block:: python
from .production import *
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'strong_secret_key'
# Password validation
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# DB
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'gwift',
'USER': 'gwift_user',
'PASSWORD': 'gwift user password',
'HOST': 'localhost',
'PORT': '', # Set to empty string for default.
}
}
Finalement, on peut mettre à jour la DB et créer un super utilisateur:
.. code-block:: shell
(gwift)gwift@gwift:~$ python manage.py migrate
(gwift)gwift@gwift:~$ python manage.py createsuperutilisater
Test
====
On peut tester si tout fonctionne bien en lancant le server avec django
.. code-block:: shell
(gwift)gwift@gwift:~$ python manage.py runserver sever_name.com:8000
Et en se rendant sur server_name.com:8000/admin, on obtient:
.. image:: production/admin_without_static.png
:align: center
Comme on peut le voir, il n'y a pas de mise en forme de la page car les fichiers statics ne sont pas encore servis. Il le seront pas nginx
Voir http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Et http://tutos.readthedocs.org/en/latest/source/ndg.html
.. include:: production/environment.rst
Ne pas oublier la génération des fichiers statics !
.. include:: production/postgresql.rst
.. include:: production/environment.rst
.. include:: production/gunicorn.rst
.. include:: production/nginx.rst

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB