Création d’une application Django avec déploiement sur Google Cloud Platform :
ÉTAPE 3 : Base de données PostgreSQL
Nous traitons dans ce tutoriel de la mise en production d’une base de données sur GCP et son utilisation en phase de développement et/ou production.
Les principales étapes sont :
- La création de la base de données sur GCP
- L’utilisation d’un proxy pour se connecter à distance de manière sécurisée
- La mise en production avec la base de données
Ce tutoriel nécessite les prérequis suivants :
- Savoir utiliser le terminal et avoir un outil de gestion d’environnement virtuel (pyenv dans ce tutoriel)
- Avoir des bases de développement en Python
- Avoir Docker et Goggle gcloud CLI d’installer sur sa machine
- Avoir suivi les précédents tutiriaux
Création de la base de données sur GCP
Manuellement dans la console de GCP, allez dans SQL
, puis cliquez sur CREER UNE INSTANCE
et choisissez PostgreSQL
(Pour ce tutriel, les paramètres utilisés pour la configuration de la base de données sont les paramètres minimums) :
ID de l'instance :
pgsql-instance
Mot de passe (compte 'postgres') :
mot_de_passe_principal
Edition Cloud SQL Enterprise / Bac à sable
Région : europe-west1 (Belgique)
Coeur dédié : 1
Stockage : HDD 10Go
Puis cliquez sur Créer une instance
Aller dans le menu Bases de données
Bases de données puis cliquer sur CREER UNE BASE DE DONNEES
:
Nom de la base de données :
ma_base_de_donnees
Aller dans le menu Utilisateur
et cliquez sur AJOUTER UN COMPTE UTILISATEUR
:
Nom d'Utilisateur :
mon_nom_utilisateur
Mot de passe :
mon_de_passe_utiliateur
Cliquez sur AJOUTER
.
Configuration dans notre projet Django
La base de donnée est configurée sur GCP. Ajoutons maintenant les informations de connection au fichier settings.py
dans notre projet localement :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': '127.0.0.1',
'NAME': 'ma_base_de_donnees',
'USER': 'mon_nom_utilisateur',
'PASSWORD': 'mon_de_passe_utiliateur',
'PORT': '5432',
}
}
Installation du proxy pour se connecter à la base de données
Téléchargez le proxy d'authentification Cloud SQL pour se connecter à la base de données depuis notre poste en local :
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.8.2/cloud-sql-proxy.linux.amd64
Rendez le proxy d'authentification Cloud SQL exécutable :
chmod +x cloud-sql-proxy
Pour exécuter le proxy :
./cloud-sql-proxy deploy-project-django:europe-west1:pgsql-instance
Utilisation de la base de données dans le projet Django
Il faut savoir que Django utilise des modèles orientés objets pour l’utilisation des bases de données. Il est possible d’utiliser des requêtes SQL classiques mais l’utilisation de “Models” permet une plus grande facilité de lecture et une sécurité accrue.
On ajoute le modèle pour la base de données dans le fichier models.py
:
# models.py
from django.db import models
class MyTable(models.Model):
firstname = models.CharField(max_length=10)
lasttname = models.CharField(max_length=10)
age = models.IntField()
def __str__(self):
return f"{self.firstname} {self.lastname} is {self.age} years old."
Puis les deux vues dans le fichier views.py
qui devient :
from django.shortcuts import render
from django.http import HttpResponse
from .models import HistoricalQuote
def hello_world(request):
return HttpResponse("Hello, World!")
def add_person(request):
# Ajouter une nouvelle citation à la base de données
person = MyTable(firstname='Manu', lastname='Mancuso' age='40')
person.save()
return HttpResponse("Personne ajoutée avec succès !")
def view_persons(request):
# Récupérer toutes les citations de la base de données
persons = MyTable.objects.all()
# Afficher les citations dans la réponse
output = ', '.join([str(person) for person in persons])
return HttpResponse(f"Liste des personnes : {output}")
Et les deux urls dans le fichier urls.py
qui devient :
from django.urls import path
from .views import hello_world, add_person, view_persons
urlpatterns = [
path('hello/', hello_world, name='hello_world'),
path('add_person/', add_person, name='add_person'),
path('view_persons/', view_persons, name='view_persons'),
]
On peut maintenant effectuer les migrations de la base de données à travers le proxy en utilisant les deux commandes suivantes dans le terminal :
python manage.py makemigrations
python manage.py migrate
On remodifie le fichier settings.py
pour la base de données avant le déploiement :
# Database
# Si l'application est exécutée localement (utilisation du proxy) : DEVELOPPEMENT
if DEBUG :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': '127.0.0.1',
'NAME': 'ma_base_de_donnees',
'USER': 'mon_nom_utilisateur',
'PASSWORD': 'mon_de_passe_utiliateur',
'PORT': '5432',
}
}
# Si l'application est exécutée sur GCP : PRODUCTION
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': '/cloudsql/deploy-project-django:europe-west1:pgsql-instance',
'NAME': 'ma_base_de_donnees',
'USER': 'mon_nom_utilisateur',
'PASSWORD': 'mon_de_passe_utiliateur',
'PORT': '5432',
}
}
Uilisation en mode DÉVELOPPEMENT
Lorsqu’on est en phase de développement de notre projet Django, on peut utiliser la base de données distante à travers le proxy Cloud SQL comme on vient de voir avec son installation et configuration.
Dans le fichier settings.py
la variable DEBUG
doit être à True
lorsqu’on est en déveleoppement.
Il faut aussi via le terminal se connecter au proxy avec la commande T./cloud-sql-proxy deploy-project-django:europe-west1:pgsql-instance
Uilisation en mode PRODUCTION
En production notre projet Django utilise la base de données directement sans l’utilisation du proxy.
Dans le fichier settings.py
la variable DEBUG
doit être à False
.
Le déploiement est décrit à l’étape 2 “Docker et déploiement sur GCP”. Il faut simplement ajouter à la fin de la page de déploiement sur Cloud Run :
Prochaine étape : Buckets (privé et publique) et leur utilisation