fix typos

This commit is contained in:
Fred Pauchet 2016-04-27 08:29:16 +02:00
commit e2e4a22821
5 changed files with 169 additions and 4 deletions

View File

@ -15,7 +15,7 @@ Contents:
intro
specs
models
views
mvc
forms
admin
docs

View File

@ -4,7 +4,7 @@ Mise en production
Le serveur que django met à notre disposition est prévu uniquement pour le développement: inutile de passer par du code Python pour charger des fichiers statiques (feuilles de style, fichiers JavaScript, images, ...). De même, la base de donnée doit supporter plus qu'un seul utilisateur: SQLite fonctionne très bien dès lors qu'on se limite à un seul utilisateur... Sur une application Web, il est plus que probable que vous rencontriez rapidement des erreurs de base de données verrouillée pour écriture par un autre processus. Il est donc plus que bénéfique de passer sur quelque chose de plus solide.
Pour une mise ne production, la proposition *de facto* est la suivante:
Pour une mise ne production, le standard *de facto* est le suivant:
* Nginx comme serveur principal
* Gunicorn comme serveur d'application
@ -13,13 +13,19 @@ Pour une mise ne production, la proposition *de facto* est la suivante:
C'est celle-ci que nous allons décrire ci-dessous.
Il est évidemment possible de configurer des connecteurs vers d'autres bases de données (Oracle, MSSQL ou MySQL), mais il ne nous est pas possible de décrire tous les cas d'utilisation.
Il est évidemment possible de configurer des connecteurs vers d'autres bases de données (Oracle, MSSQL ou MySQL), mais il ne nous est pas possible de décrire tous les cas d'utilisation. Nous allons nous limiter au
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 $$$.
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 statiques !
.. include:: production/postgresql.rst
.. include:: production/environment.rst
.. include:: production/gunicorn.rst
.. include:: production/nginx.rst
.. include:: production/fabric.rst

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,124 @@
*************
Environnement
*************
Préparation
===========
On prépare l'environement pour accueillir notre application Django. On considère que le serveur est un système GNU/Linux, basé sur une distribution Debian ou Ubuntu. Si vous vous basez sur un autre système d'exploitation ou une autre distribution, adaptez en fonction.
Il faut d'abord rajouter certains paquets 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 utilisateur:
.. 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'
# Allowed host needed to be defined in production
ALLOWED_HOSTS = ["sever_name.com", "www.sever_name.com"]
# 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 lançant le serveur 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 par Nginx.

View File

@ -0,0 +1,35 @@
**********
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
$$$