Skip to main content

Hébergement

Migration vers un GitLab auto-hébergé : orchestrer le CI/CD d'un parc Drupal souverain

EN BREF

  • La souveraineté des données logicielles devient un impératif pour protéger la propriété intellectuelle des agences et de leurs clients.
  • L'installation de GitLab sur une infrastructure Debian chez OVHcloud offre une alternative robuste aux plateformes SaaS américaines.
  • Les pipelines de déploiement doivent être adaptés pour gérer efficacement l'intégration continue, les dépendances Composer et la base de données de Drupal.
  • Une migration de dépôts à chaud bien orchestrée garantit une transition transparente pour les développeurs et aucune interruption de livraison.

Le choix de l'infrastructure qui héberge le code source d'une agence web n'est plus une simple question de commodité technique. Face aux exigences de souveraineté et à l'évolution des réglementations européennes, la maîtrise absolue de la chaîne de fabrication logicielle est devenue un atout stratégique. Pour les agences gérant un parc de sites Drupal, cette transition vers l'auto-hébergement représente un défi majeur : il faut garantir une sécurité maximale tout en maintenant l'efficacité opérationnelle des pipelines d'intégration et de déploiement continus (CI/CD).

Ce guide détaille la mise en place d'une instance GitLab privée sur une infrastructure souveraine, la refonte des workflows de déploiement pour Drupal et la méthodologie pour mener cette migration à chaud sans perturber vos équipes.

Les enjeux de la souveraineté du code pour les agences web

Pour de nombreuses structures, s'appuyer sur des plateformes SaaS tierces a longtemps été la norme. Pourtant, ce modèle comporte des risques invisibles mais bien réels pour la pérennité des projets et la sécurité des données.

La perte de contrôle inhérente aux solutions SaaS globales

Les services cloud centralisés simplifient la gestion quotidienne, mais ils introduisent une dépendance critique vers des acteurs soumis à des législations extra-territoriales. En confiant l'intégralité de vos dépôts, de vos clés d'API et de vos configurations d'infrastructure à des plateformes tierces, vous vous exposez à plusieurs risques :

  • Des modifications unilatérales des conditions d'utilisation ou des tarifs qui impactent directement la rentabilité de vos projets.
  • Des pannes globales paralysant instantanément la capacité de livraison de vos équipes de développement.
  • Une exposition potentielle de vos secrets industriels et de vos codes propriétaires en cas de faille de sécurité sur ces plateformes mutualisées.

La conformité réglementaire et la protection de la propriété intellectuelle

Pour les donneurs d'ordres publics ou les entreprises opérant dans des secteurs régulés, la localisation du code et des outils de déploiement est cruciale. Choisir un hébergement souverain français ou européen permet de répondre à plusieurs exigences réglementaires :

  • La conformité stricte avec le RGPD concernant le traitement et le transit des métadonnées des utilisateurs et des développeurs.
  • La garantie que les sauvegardes, les environnements de test et les bases de données synchronisées restent sur le territoire européen.
  • La protection de la propriété intellectuelle de vos clients contre l'espionnage économique ou les accès gouvernementaux étrangers.

Architecture du serveur GitLab sous Debian sur l'infrastructure OVHcloud

Pour héberger une instance GitLab robuste et performante, le choix s'est porté sur un serveur dédié ou une instance cloud de l'hébergeur européen OVHcloud sous le système d'exploitation Debian.

Prérequis matériels et dimensionnement pour un parc Drupal

La gestion des pipelines de compilation de Drupal requiert des ressources confortables pour éviter les goulots d'étranglement lors des phases de build de Composer et de NPM. Voici les spécifications recommandées pour une agence gérant une cinquantaine de projets actifs :

  • Processeur : un processeur moderne disposant d'au moins 4 cœurs physiques pour traiter les tâches parallèles.
  • Mémoire vive : un minimum de 16 gigaoctets de mémoire vive pour assurer la fluidité de l'interface GitLab et le fonctionnement des runners locaux.
  • Stockage : des disques montés en RAID basés sur la technologie NVMe pour accélérer les opérations de lecture et d'écriture sur les dépôts Git.
  • Bande passante : une connexion réseau d'au moins 1 gigabit par seconde pour fluidifier le transfert des images de conteneurs et des dépendances.

Durcissement de la sécurité de l'instance Debian

Une fois le système de base installé, plusieurs mesures de sécurisation doivent être appliquées pour protéger l'accès à la forge logicielle :

  • Désactivation totale de l'authentification par mot de passe pour le protocole SSH au profit de clés asymétriques fortes.
  • Configuration d'un pare-feu applicatif restrictif pour n'autoriser que les ports nécessaires comme le port 80, le port 443 et le port SSH personnalisé.
  • Installation et paramétrage d'un outil de détection d'intrusions comme Fail2ban pour bloquer automatiquement les tentatives d'accès malveillantes.
  • Utilisation de certificats de sécurité Let's Encrypt renouvelés automatiquement pour chiffrer l'ensemble des flux HTTP de votre instance.

Le script d'initialisation suivant permet de préparer la machine Debian avant l'installation du paquet GitLab :

# Mise à jour globale du système Debian
apt-get update && apt-get upgrade -y

# Installation des dépendances système nécessaires
apt-get install -y curl openssh-server ca-certificates perl ufw fail2ban

# Configuration du pare-feu pour sécuriser les accès réseau
ufw default deny incoming
ufw default allow outgoing
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp
ufw --force enable

# Ajout du dépôt officiel de GitLab et installation de l'édition communautaire
curl -sS [https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh](https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh) | bash
EXTERNAL_URL="[https://git.votre-agence-souveraine.fr](https://git.votre-agence-souveraine.fr)" apt-get install gitlab-ce -y

Stratégie de sauvegarde décentralisée et externalisée

La sécurité d'une infrastructure auto-hébergée repose en grande partie sur sa tolérance aux pannes. Pour prémunir l'agence contre la perte de données, il convient de mettre en place une politique de sauvegarde automatisée et externalisée :

  • Planification d'une tâche de sauvegarde quotidienne via l'outil natif de GitLab pour exporter la base de données, les dépôts et les configurations.
  • Chiffrement systématique des archives de sauvegarde avant tout transfert hors du serveur de production.
  • Exportation automatique des sauvegardes vers un espace de stockage objet souverain d'OVHcloud situé dans un centre de données géographiquement distinct.
  • Tests de restauration réguliers sur une instance de préproduction pour valider l'intégrité des données sauvegardées.

Refonte des pipelines de déploiement CI/CD pour Drupal

Le passage à une infrastructure souveraine est l'opportunité idéale pour moderniser vos processus d'intégration et de déploiement continus. Drupal possède ses propres spécificités, notamment la gestion des configurations actives en base de données et les dépendances gérées par Composer.

schéma d'un pipeline CI/CD GitLab

Structure du fichier de configuration gitlab-ci.yml pour Drupal

Le pipeline de déploiement doit être conçu pour valider le code, exécuter les tests automatisés, compiler les dépendances et déployer les modifications de manière atomique. L'exemple ci-dessous illustre une structure optimisée pour un projet Drupal moderne :

stages:
  - test
  - build
  - deploy

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - vendor/
    - web/core/
    - web/modules/contrib/
    - web/themes/contrib/

test_code_quality:
  stage: test
  image: php:8.2-cli
  script:
    - php -v
    - echo "Exécution des tests de qualité de code et du linter PHP"

build_assets:
  stage: build
  image: composer:2
  script:
    - composer install --no-dev --optimize-autoloader --no-interaction
  artifacts:
    paths:
      - vendor/
      - web/
    expire_in: 1 week

deploy_to_staging:
  stage: deploy
  image: alpine:latest
  before_script:
    - apk add --no-cache rsync openssh-client
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY_STAGING" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - ssh-keyscan -H "$STAGING_SERVER_IP" >> ~/.ssh/known_hosts
  script:
    - echo "Déploiement des fichiers mis à jour vers l'environnement de staging"
    - rsync -az --delete ./vendor/ ./web/ user@$STAGING_SERVER_IP:/var/www/drupal/
    - ssh user@$STAGING_SERVER_IP "cd /var/www/drupal && ./vendor/bin/drush state-set system.maintenance_mode 1 -y"
    - ssh user@$STAGING_SERVER_IP "cd /var/www/drupal && ./vendor/bin/drush updb -y"
    - ssh user@$STAGING_SERVER_IP "cd /var/www/drupal && ./vendor/bin/drush cim -y"
    - ssh user@$STAGING_SERVER_IP "cd /var/www/drupal && ./vendor/bin/drush cr"
    - ssh user@$STAGING_SERVER_IP "cd /var/www/drupal && ./vendor/bin/drush state-set system.maintenance_mode 0 -y"
  only:
    - develop

Synchronisation sécurisée et anonymisation des bases de données

Un défi récurrent lors du développement de projets Drupal réside dans la synchronisation des données de production vers les environnements de staging ou locaux pour reproduire fidèlement les bugs. Pour préserver la souveraineté et la confidentialité, cette étape doit être strictement encadrée :

  • Interdiction stricte de copier des bases de données de production contenant des données personnelles vers des postes de développement locaux.
  • Mise en œuvre de scripts d'anonymisation automatisés lors de l'export de la base de données de production vers l'environnement de staging.
  • Utilisation de clés de chiffrement uniques pour sécuriser le transit des dumps SQL entre les différents serveurs de l'infrastructure.
  • Nettoyage automatique des tables de cache de Drupal avant l'export pour réduire la taille des fichiers et accélérer le processus de transfert.

Le script PHP suivant, intégré à votre processus de synchronisation, illustre comment anonymiser rapidement les adresses e-mail des utilisateurs de Drupal dans la base de données :

<?php
// Script d'anonymisation des utilisateurs Drupal pour les environnements de test
// Ce script doit être exécuté uniquement en dehors de la production

$database_host = getenv('DB_HOST_STAGING');
$database_name = getenv('DB_NAME_STAGING');
$database_user = getenv('DB_USER_STAGING');
$database_pass = getenv('DB_PASSWORD_STAGING');

try {
    $pdo = new PDO("mysql:host=$database_host;dbname=$database_name", $database_user, $database_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Anonymisation des adresses e-mail et réinitialisation des mots de passe pour la sécurité
    $sql = "UPDATE users_field_data 
            SET mail = CONCAT('user_', uid, '@test-agence-souveraine.local'), 
                init = CONCAT('user_', uid, '@test-agence-souveraine.local') 
            WHERE uid > 1";
            
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    
    echo "La base de données staging a été anonymisée avec succès.\n";
} catch (PDOException $e) {
    echo "Erreur lors de l'anonymisation : " . $e->getMessage() . "\n";
}

Gestion de la transition et méthodologie de migration à chaud

Migrer l'ensemble des dépôts actifs d'une agence sans bloquer les développeurs ni interrompre les livraisons clients demande de la méthode. Une approche progressive permet de sécuriser chaque étape.

Stratégie de double dépôt pour éliminer l'interruption de service

Pour assurer une continuité parfaite de votre activité, l'utilisation d'une stratégie de double dépôt temporaire est fortement conseillée :

  • Phase initiale de synchronisation bidirectionnelle : configurez votre nouvelle instance GitLab auto-hébergée pour qu'elle agisse comme un miroir automatique de vos anciens dépôts SaaS.
  • Phase de test des pipelines : exécutez vos nouveaux runners GitLab sur l'infrastructure OVHcloud pour valider la conformité des builds en parallèle des anciens systèmes.
  • Phase de bascule définitive : planifiez une fenêtre de maintenance légère pour déclarer la nouvelle instance privée comme l'unique dépôt de référence (dépôt maître) pour l'écriture.

Accompagnement technique des équipes de développement

Le succès d'une telle migration dépend de l'adhésion et de la préparation de vos collaborateurs techniques :

  • Organisation de sessions de formation internes pour présenter les spécificités de la nouvelle infrastructure et les performances des nouveaux runners.
  • Mise à disposition de scripts d'automatisation pour aider les développeurs à mettre à jour l'adresse de leurs dépôts distants sur leurs postes de travail.
  • Centralisation des retours d'expérience et correction rapide des éventuels ralentissements rencontrés lors des premiers déploiements souverains.

Comparaison des approches d'hébergement pour le code source

Pour vous aider à arbitrer la stratégie à adopter, voici une synthèse comparative des différents modèles d'hébergement disponibles pour les agences :

  • Plateformes SaaS mutualisées mondiales : ces solutions offrent une simplicité extrême et une mise en route immédiate. Cependant, elles imposent une dépendance totale vis-à-vis d'un tiers, des coûts récurrents indexés sur le nombre d'utilisateurs et une localisation des données souvent soumise à des lois non européennes.
  • Instances privées sur hyper-scalers américains : ce modèle permet une personnalisation complète des environnements et des performances évolutives. En revanche, la souveraineté juridique reste fragile en raison des réglementations d'accès aux données imposées par les pays d'origine de ces géants du cloud.
  • Instances auto-hébergées sur infrastructure souveraine européenne : cette approche offre un contrôle absolu sur la chaîne de compilation, une conformité totale avec le RGPD et la protection de la propriété intellectuelle. Elle nécessite toutefois des compétences internes pour assurer l'administration et la maintenance de la plateforme.

Questions fréquentes sur la migration et le déploiement souverain

Voici les réponses aux interrogations les plus fréquentes concernant ce type de transition technologique.

Quel est le coût de fonctionnement d'un GitLab auto-hébergé par rapport à une version SaaS ?

Le coût d'une instance auto-hébergée sur une infrastructure OVHcloud dépend principalement de la puissance du serveur sélectionné. Contrairement aux modèles SaaS facturés par utilisateur et par mois, le coût d'un serveur dédié est fixe, quel que soit le nombre de collaborateurs qui l'utilisent. Pour une agence de taille moyenne, l'auto-hébergement devient financièrement avantageux dès que l'équipe dépasse une quinzaine de développeurs actifs.

Comment sécuriser les runners GitLab qui exécutent les builds de Drupal ?

Les runners GitLab doivent être isolés pour éviter qu'un script malveillant présent dans un projet ne puisse compromettre l'ensemble du serveur principal. Il est fortement recommandé d'utiliser des conteneurs éphémères pour chaque exécution de pipeline et de configurer des machines virtuelles distinctes pour héberger ces runners, en dehors de la machine GitLab principale.

Est-il possible de migrer des dépôts contenant de gros volumes d'historique Git ?

Oui, GitLab propose des outils d'importation puissants qui permettent de conserver l'intégralité de l'historique des commits, des branches, des étiquettes et des demandes de fusion (merge requests). Pour les dépôts volumineux contenant de nombreux fichiers médias ou des bases de données volumineuses archivées, il est conseillé de configurer l'extension Git LFS afin d'optimiser les performances de clonage et de stockage sur le nouveau serveur souverain.

Cyprien Prouvot

Cyprien Prouvot

Associé & Directeur Technique

Associé de l'agence, Cyprien pilote la vision technique et garantit la qualité des développements web. Il encadre les équipes internes et conseille les clients sur les choix d'architecture ou d'outils digitaux les plus pertinents. Il intervient également sur ce blog pour décrypter l'écosystème web, les tendances tech et les bonnes pratiques de conception.


Prêt ? Partez.

Que ce soit pour vous aider à faire le point sur vos besoins ou vous présenter les avantages et fonctionnalités de nos solutions, nous sommes là.
 

Back to top