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 :
- Commit et push : Changements poussés vers le dépôt Git
- Pull sur le serveur : Code récupéré sur le serveur de production
- 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 :
- Fichiers de configuration : Fichiers de configuration JSON dans Git
- Variables d'environnement : Secrets chargés depuis l'environnement
- 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