Skip to content

Instantly share code, notes, and snippets.

@Dolpheus89
Last active December 27, 2024 14:57
Show Gist options
  • Select an option

  • Save Dolpheus89/45a8848b75cef1bf25856df6ed8ad6f1 to your computer and use it in GitHub Desktop.

Select an option

Save Dolpheus89/45a8848b75cef1bf25856df6ed8ad6f1 to your computer and use it in GitHub Desktop.

Mise en place d'un Déploiement Continu

graph TD
    classDef developer fill:#e6f3ff,stroke:#4a90e2,stroke-width:2px,color:black;
    classDef github fill:#f7f7f7,stroke:#24292e,stroke-width:2px,color:black;
    classDef actions fill:#dcffe4,stroke:#28a745,stroke-width:2px,color:black;
    classDef docker fill:#e9f5ff,stroke:#0db7ed,stroke-width:2px,color:black;
    classDef staging fill:#fff0db,stroke:#f4a261,stroke-width:2px,color:black;
    classDef production fill:#ffe6e6,stroke:#e63946,stroke-width:2px,color:black;
    classDef server fill:#f0f0f0,stroke:#666666,stroke-width:2px,color:black;

    Dev[Developer]:::developer -->|Push staging branch| Git[GitHub Repository]:::github
    
    Git --> Actions[GitHub Actions]:::github
    
    subgraph Actions
        A[Build Docker Images]:::actions --> B[Run Tests]:::actions
        B --> C[Prepare Images]:::actions
    end
    
    Actions --> D[DockerHub Registry]:::docker
    
    D -->|Webhook Notification| E[Caddy Port 9000]:::server
    E -->|ops.example.com/hooks/update| F[Staging Deployment Script]:::staging
    F -->|Port 8001| Staging[Staging Environment<br/>staging.example.com]:::staging

    D --> |Manual Deployment| Prod[Production Environment<br/>example.com<br/>Port 8000]:::production
Loading

Le Processus de Déploiement

Initialisation du Processus

Le processus débute par une action simple : un push sur la branche staging du repository GitHub. Cette action représente le point de départ de toute la chaîne de déploiement, initiant une série d'événements automatisés.

*Avoir un environnement de staging est très important car il permet de tester son code sur un environnement équivalent à celui de la prod et donc de limiter les risques de casser la prod lors d'un déploiement.

L'Orchestration par GitHub Actions

Lorsque le code atteint GitHub, les GitHub Actions entrent en jeu. Ces workflows automatisés prennent en charge plusieurs tâches cruciales :

  • La construction des images Docker
  • L'exécution des tests nécessaires
  • La préparation des images pour leur distribution

Le Rôle Central de DockerHub

DockerHub intervient ensuite comme plateforme de stockage et de distribution. Les images créées par GitHub Actions sont stockées dans ce registre central, permettant une gestion efficace des versions et une distribution simplifiée.

La Communication Serveur

Un aspect crucial du système réside dans la communication entre DockerHub et le serveur. À chaque mise à jour d'image, DockerHub envoie une notification via l'URL https://ops.example.com/hooks/update. Caddy, configuré sur le port 9000, réceptionne ces notifications.

Les Environnements de Déploiement

Le système maintient deux environnements distincts :

L'Automatisation du Déploiement

La réception d'une notification déclenche un script de déploiement qui :

  1. Arrête les conteneurs existants
  2. Télécharge les nouvelles images
  3. Démarre les nouveaux conteneurs

La Gestion par Caddy

Caddy assure plusieurs fonctions essentielles dans cette architecture :

  • La gestion automatique des certificats HTTPS
  • Le routage vers les différents environnements
  • La sécurisation des webhooks

Cette architecture apporte plusieurs avantages significatifs :

  • Une automatisation complète du processus de déploiement
  • Une séparation claire entre les environnements
  • Une traçabilité des opérations

Le système ainsi mis en place permet de maintenir un cycle de déploiement continu efficace et sécurisé, adapté aux exigences modernes du développement logiciel.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment