Le serveur est configuré, mais ce n'est pas terminé ! Dans ce chapitre vous allez apprendre à installer les paquets nécessaires au bon fonctionnement de Django. Vous réaliserez également la migration de données, c'est-à-dire que vous importerez les données qui sont actuellement sur Heroku.
Allez, c'est parti !
Télécharger l'application sur le serveur
Librairies utiles
Le projet exemple de ce cours est écrit en Python (évidemment !) et utilise le système de gestion de bases de données PostgreSQL. Or, si vous tapez la commande python
dans le serveur, vous verrez que le programme n'est pas installé. Cela ne va pas du tout ! Il faut y remédier !
celinems@disquaire:~$ sudo apt-get update
celinems@disquaire:~$ sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib
Téléchargez l'application
Vous avez déjà forké l'application exemple sur GitHub. Quoi de plus simple que de la cloner ? Téléchargez l'application via Git dans le répertoire de l'utilisateur.
celinems@disquaire:~/disquaire$ git clone votredepot.git
Cloning into 'decouvrez_django'...
remote: Counting objects: 740, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 740 (delta 3), reused 11 (delta 1), pack-reused 724
Receiving objects: 100% (740/740), 1002.34 KiB | 0 bytes/s, done.
Resolving deltas: 100% (346/346), done.
Checking connectivity... done.
Bravo ! Les fichiers sont sur le serveur ! Il est temps d'activer un environnement virtuel pour lancer Django !
Environnement virtuel et dépendances
Installez Pip, Virtualenv et créez un nouvel environnement virtuel.
celinems@disquaire:~/$ sudo apt install virtualenv
celinems@disquaire:~/$ virtualenv env -p python3
celinems@disquaire:~/$ source env/bin/activate
(env) celinems@disquaire:~/$
Puis installez les dépendances du projet en tapant la commande suivante :
(env) celinems@disquaire:~/$ pip install -r disquaire/requirements.txt
Migrer les données
Création de la base de données
Il est temps de passer à la base de données ! Vous devez créer deux éléments : la base en elle-même et un utilisateur qui pourra y accéder. Il ne s'agit plus ici de l'utilisateur du système mais d'un nouveau dédié à PostgreSQL.
Connectez-vous en tant qu'administrateur à la console PostgreSQL en tapant la commande sudo -u postgres psql
. Puis créez une nouvelle base de données.
celinems@disquaire:~$ sudo -u postgres psql
psql (9.5.8)
Type "help" for help.
postgres=# CREATE DATABASE disquaire;
CREATE DATABASE
Afin de créer l'utilisateur, rien de plus simple ! Utilisez la commande CREATE USER vous WITH PASSWORD 'motdepasse';
.
postgres=# CREATE USER celinems WITH PASSWORD '0+0=LaTeteàT0t0';
CREATE ROLE
Une dernière modification est nécessaire avant de poursuivre. La documentation officielle de Django conseille de changer certains paramètres de la base de données afin d'améliorer la performance des requêtes. En effet, si la base contient déjà la configuration demandée, l'ORM n'aura pas à les indiquer pour toute nouvelle connexion.
postgres=# ALTER ROLE celinems SET client_encoding TO 'utf8';
ALTER ROLE
postgres=# ALTER ROLE celinems SET default_transaction_isolation TO 'read committed';
ALTER ROLE
postgres=# ALTER ROLE celinems SET timezone TO 'Europe/Paris';
ALTER ROLE
Enfin, indiquez à PostgreSQL que l'utilisateur a tous les droits sur la base. Il pourra ainsi lire, écrire et supprimer des données !
postgres=# GRANT ALL PRIVILEGES ON DATABASE disquaire TO celinems;
GRANT
Tapez \q
pour quitter la console de PostgreSQL.
Pourquoi nous n'avons pas dû démarrer le serveur PostgreSQL ?
Car il tourne déjà ! :) L'installation de PostgreSQL a lancé un serveur en tâche de fond. De manière générale, lorsque vous installez un service via apt-get, il est lancé automatiquement.
Modification du fichier de configuration
Modifiez alors le fichier settings.py
pour y faire figurer les informations de connexion :
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'disquaire',
'USER': 'celinems',
'PASSWORD': '0+0=LaTeteàT0t0',
'HOST': 'localhost',
'PORT': '5432',
}
}
Génération des fichiers statiques
Django ne génère pas tout seul les fichiers statiques : il faut lui demander de le faire. Générez-les en exécutant la commande ./manage.py collectstatic
.
Une erreur apparaît : django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
C'est normal ! Ouvrez le fichier de configuration : la constante STATIC_ROOT
, nécessaire à la collecte des fichiers statiques, n'existe que si la variable d'environnement ENV
est égale à PRODUCTION
. Or pour le moment cette variable n'existe pas !
Créez-la tout de suite en tapant la commande suivante :
(env) celinems@disquaire~$ export ENV=PRODUCTION
(env) celinems@disquaire~$ ./disquaire/manage.py collectstatic
# ...
93 static files copied to '/home/celinems/disquaire/disquaire_project/staticfiles'.
Migrations
Lancez les migrations :
(env) celinems@disquaire:~$ ./disquaire/manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, store
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
Applying store.0001_initial... OK
(env) celinems@disquaire:~$
Je vous ai fait un cadeau : j'ai exporté les données présentes sur le serveur d'Heroku dans le dossier que vous avez téléchargé ! Regardez, elles se trouvent ici : store/dumps/store.json
. Comment importer les données dans la base actuelle ? En utilisant la commande loaddata
.
(env) celinems@disquaire:~$ ./disquaire/manage.py loaddata disquaire/store/dumps/store.json
Installed 46 object(s) from 1 fixture(s)
Enfin, créez un administrateur :
(env) celinems@disquaire:~$ ./disquaire/manage.py createsuperuser
Comment vérifier que tout a fonctionné ?
Le premier réflexe est bien sûr de lancer un serveur et de naviguer à l'adresse locale.
./disquaire/manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
September 08, 2017 - 16:47:14
Django version 1.11.4, using settings 'disquaire_project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Évidemment, rien ne s'affiche ! Vous devez configurer Gunicorn pour qu'il envoie les requêtes entrantes à l'application Django. Cela ne vous parle pas ? C'est normal ! Nous voyons tout cela dans le chapitre suivant.