create separated files for production
This commit is contained in:
parent
c93e1f6bec
commit
6ac8edea4f
|
@ -14,180 +14,6 @@ Pour une mise ne production, il nous faut donc quelque chose de plus solide:
|
||||||
Les points suivants décrivent les étapes nécessaires à la mise en place de ces outils.
|
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 $$$.
|
***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/
|
Voir http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
|
||||||
Et http://tutos.readthedocs.org/en/latest/source/ndg.html
|
Et http://tutos.readthedocs.org/en/latest/source/ndg.html
|
||||||
|
|
|
@ -0,0 +1,138 @@
|
||||||
|
|
||||||
|
************
|
||||||
|
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:: 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.
|
|
@ -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
|
||||||
|
$$$
|
Loading…
Reference in New Issue