Déploiement

Vue d’ensemble

Le déploiement de l’application repose sur les services suivants :

  • GitHub Actions pour exécuter la CI/CD ;

  • Docker pour construire l’image de l’application ;

  • Docker Hub pour stocker l’image ;

  • Render pour héberger l’application.

Le déploiement en production est déclenché uniquement depuis la branche master.

Conteneurisation

Le fichier Dockerfile situé à la racine du projet décrit l’image Docker de l’application.

L’image :

  • installe les dépendances Python ;

  • copie le code du projet ;

  • collecte les fichiers statiques ;

  • lance l’application avec Gunicorn ;

  • expose le port utilisé par le service.

Construire l’image localement

Depuis la racine du projet :

docker build -t oc-lettings:local .

Lancer le conteneur localement

docker run --rm -p 8000:8000       -e SECRET_KEY=django-insecure-local       -e DEBUG=False       -e ALLOWED_HOSTS=localhost,127.0.0.1       oc-lettings:local

Sous PowerShell, la commande peut être écrite sur une seule ligne :

docker run --rm -p 8000:8000 -e SECRET_KEY=django-insecure-local -e DEBUG=False -e ALLOWED_HOSTS=localhost,127.0.0.1 oc-lettings:local

L’application est alors accessible à l’adresse suivante :

http://127.0.0.1:8000/

Pipeline CI/CD

Le workflow GitHub Actions est stocké dans le dossier :

.github/workflows

Il comporte trois étapes principales.

Tests

À chaque push et à chaque pull_request, la CI :

  1. installe les dépendances ;

  2. exécute les tests Django avec coverage ;

  3. vérifie que la couverture est au moins égale à 80 % ;

  4. exécute flake8.

Les commandes principales sont :

coverage run manage.py test
coverage report --fail-under=80
flake8

Construction et publication de l’image

Lorsque les tests réussissent sur la branche master, le workflow :

  1. construit l’image Docker ;

  2. se connecte à Docker Hub ;

  3. publie l’image avec le tag latest ;

  4. publie également une image identifiée par le SHA du commit.

Image de production :

docker.io/aurelienamorin/oc-lettings:latest

Déploiement sur Render

Après la publication de l’image Docker, GitHub Actions appelle le deploy hook fourni par Render.

Render récupère alors la nouvelle image latest depuis Docker Hub et redémarre le service avec cette version.

Variables d’environnement

Les variables suivantes doivent être configurées sur Render :

SECRET_KEY

Clé secrète Django utilisée en production.

DEBUG

Doit être définie à False.

ALLOWED_HOSTS

Doit contenir le nom d’hôte du service Render.

SENTRY_DSN

DSN du projet Sentry.

SENTRY_ENVIRONMENT

Environnement transmis à Sentry, par exemple production.

PORT

Port fourni au conteneur par Render.

Les secrets utilisés par GitHub Actions, notamment les identifiants Docker Hub et l’URL du deploy hook Render, doivent être enregistrés dans les secrets du dépôt GitHub.

Fichiers statiques

WhiteNoise sert les fichiers statiques en production.

La commande suivante collecte les fichiers statiques avant le lancement de l’application :

python manage.py collectstatic --noinput

Application en production

L’application déployée est accessible à l’adresse suivante :

https://oc-lettings-47nw.onrender.com/

Vérifications après déploiement

Après chaque déploiement, vérifiez :

  • l’affichage de la page d’accueil ;

  • la navigation vers les locations et les profils ;

  • l’accès à l’interface d’administration ;

  • le chargement des fichiers statiques ;

  • l’absence d’erreurs dans les journaux Render ;

  • la remontée des erreurs dans Sentry.