Architecture de Déploiement : Système de Production sans Interruption

Cet article explique comment nous déployons et exécutons le site web avec des redémarrages automatiques et zéro interruption de service.

Le Problème : Le Déploiement Manuel est Risqué

Le déploiement traditionnel nécessite :

  • Redémarrage manuel du serveur : Provoque des interruptions de service

  • Surveillance du service : Quelqu'un doit surveiller les plantages

  • Mises à jour du code : Nécessite un accès SSH et des étapes manuelles

  • Retour arrière : Processus manuel si quelque chose casse

Cela ne passe pas à l'échelle et cause des interruptions de service pendant les mises à jour.

La Solution : Déploiement Automatisé avec Systemd

Nous utilisons systemd pour gérer (voir Vue d'ensemble de l'Infrastructure) l'application :

  • Redémarrage automatique : Redémarre automatiquement en cas de plantage ou de changement de code

  • Zéro interruption : Redémarrage gracieux des workers

  • Journalisation : Gestion centralisée des journaux

  • Gestion des processus : Gère le cycle de vie des workers

Infrastructure Serveur

Serveur de Production

Le serveur de production héberge le site web public :

  • Objectif : Site web public servant le catalogue produits et l'e-commerce

  • Module : Uniquement "web"

  • Environnement : Production (Gunicorn + systemd)

  • Accès : Public (aucune connexion requise)

Serveur d'Application

Gunicorn

Gunicorn est le serveur web de production :

  • Multi-worker : Plusieurs processus workers

Intégration Systemd

Systemd gère Gunicorn :

  • Démarrage automatique : Au démarrage du serveur

  • Redémarrage automatique : En cas de plantage ou de changement de code

  • Journalisation : Intégration au journal systemd

  • Gestion des processus : Cycle de vie des workers

Configuration

Configuration d'Environnement

La configuration est spécifique à l'environnement :

  • Fichiers de configuration : Paramètres spécifiques à l'environnement

  • Format JSON : Paires clé-valeur

  • Variables d'environnement : Secrets et clés API

  • Activation des modules : Contrôle quelles fonctionnalités se chargent

Ressources Statiques

Les ressources statiques sont servies depuis S3 avec CloudFront CDN :

  • Bucket S3 : Stockage d'objets pour les fichiers statiques

  • CloudFront : CDN pour la livraison globale des ressources

  • Mise en cache : TTL long pour le contenu statique

  • Versioning : Invalidation de cache avec des numéros de version

Processus de Déploiement

Déploiement du Code

Le code est déployé via Git avec systemd gérant le service d'application :

  1. Commit et push : Changements poussés vers le dépôt Git
  2. Pull sur le serveur : Code récupéré sur le serveur de production
  3. Redémarrage Systemd : Le service redémarre automatiquement en cas de plantage

Déploiement de la Configuration

La configuration est gérée séparément du code :

  1. Fichiers de configuration : Fichiers de configuration JSON dans Git
  2. Variables d'environnement : Secrets chargés depuis l'environnement
  3. Activation des modules : Contrôle quelles fonctionnalités se chargent

Surveillance

Contrôles de Santé

Les points de terminaison de santé surveillent l'état du serveur :

  • Point de terminaison de santé : Contrôle de santé basique

  • Contrôle de la base de données : Connectivité à la base de données

  • Contrôle du cache : Connectivité au cache

Journalisation

Les journaux sont stockés à plusieurs endroits :

  • Journaux d'erreur Gunicorn : Erreurs d'application

  • Journaux d'accès Gunicorn : Requêtes HTTP

  • Journaux de service : Journal systemd

Résumé

L'architecture de déploiement fournit :

  • Gunicorn : Serveur WSGI de production

  • Systemd : Redémarrage automatique et gestion des processus

  • Déploiement Git : Gestion du code et de la configuration

  • S3 + CloudFront : Livraison des ressources statiques

  • Surveillance de santé : Points de terminaison de contrôle de santé

  • Journalisation : Journaux d'erreur et d'accès