Sauvegarder ses projets de développement : Git, CI/CD et stratégies de backup

Perdre un projet de développement — code, base de données, configuration — est l'un des scénarios les plus coûteux qu'un développeur puisse vivre. Ce guide couvre l'ensemble des stratégies de sauvegarde adaptées aux projets web : dépôts Git (GitHub, GitLab, auto-hébergé), sauvegardes de bases de données, gestion des secrets .env, artefacts CI/CD, automatisation serveur et plans de reprise d'activité.

En bref : Git gère le code, mais pas tout. Une stratégie robuste couvre aussi les bases de données (dumps automatisés), les fichiers média, les secrets (gestionnaire de secrets, jamais dans Git), les artefacts CI/CD et implique des exercices réguliers de restauration. La règle 3-2-1 reste la référence : 3 copies, 2 supports, 1 hors site.

Sommaire
  1. Les dépôts Git : GitHub, GitLab et auto-hébergé
  2. Miroirs et redondance des dépôts
  3. Sauvegardes de bases de données
  4. Gestion des secrets et fichiers .env
  5. Artefacts CI/CD et images Docker
  6. Automatisation des sauvegardes serveur
  7. Plan de reprise d'activité (PRA)
  8. Questions fréquentes
Sauvegarder ses projets de développement - Git, CI/CD et backup

1. Les dépôts Git : GitHub, GitLab et auto-hébergé

Git est le fondement de toute stratégie de sauvegarde du code source. Il enregistre chaque modification avec son auteur, sa date et un message de commit, permettant de remonter dans le temps à n'importe quel état du projet. Mais Git seul ne suffit pas : encore faut-il pousser régulièrement vers un dépôt distant et choisir soigneusement ses services d'hébergement.

GitHub reste la plateforme dominante avec plus de 100 millions de développeurs et une intégration native avec la quasi-totalité des outils DevOps. GitHub Actions, GitHub Packages et l'hébergement des Pages sont inclus dans le plan gratuit. Les dépôts privés sont illimités. Le principal risque : dépendance à un service tiers et, dans de rares cas, suspension de compte.

GitLab se distingue par sa suite DevOps intégrée (CI/CD, container registry, issue tracker, deploy board) dans une seule plateforme. GitLab.com est gratuit pour les projets publics et privés. GitLab CE (Community Edition) peut être auto-hébergé sur vos propres serveurs, ce qui élimine la dépendance à un tiers et donne un contrôle total sur vos données.

Auto-hébergement avec Gitea ou Forgejo

Pour les équipes souhaitant une souveraineté totale sur leur code, Gitea et son fork communautaire Forgejo sont des alternatives légères, déployables en quelques minutes avec Docker. Ils supportent les webhooks, les Actions compatibles GitHub Actions, la gestion des utilisateurs et les dépôts privés illimités. Un VPS à 5 euros par mois suffit pour héberger une instance Gitea pour une petite équipe.

L'auto-hébergement impose cependant une responsabilité : vous devez sauvegarder l'instance Git elle-même (dossier de données, base de données SQLite ou PostgreSQL). Ne pas le faire crée un point de défaillance unique plus risqué que GitHub ou GitLab.

Bonnes pratiques de commit

2. Miroirs et redondance des dépôts

Un seul dépôt distant est insuffisant. Si GitHub subit une panne ou suspend votre compte, vous devez pouvoir continuer à travailler immédiatement. La solution : configurer un miroir automatique vers un second service.

Miroir GitHub vers GitLab

GitLab propose une fonctionnalité native de miroir de dépôt (Settings > Repository > Mirroring repositories) qui synchronise automatiquement un dépôt GitHub toutes les heures. La configuration ne prend que quelques minutes et ne nécessite qu'un token d'accès GitHub en lecture.

Pour une synchronisation plus immédiate, utilisez un workflow GitHub Actions qui pousse vers GitLab à chaque push :

name: Mirror to GitLab
on: [push]
jobs:
  mirror:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - run: |
          git remote add gitlab https://oauth2:${{ secrets.GITLAB_TOKEN }}@gitlab.com/user/repo.git
          git push --mirror gitlab

Miroir local et archives

Complétez avec une sauvegarde locale périodique. La commande git clone --mirror crée une copie complète du dépôt (toutes les branches, tous les tags, les stashes). Archivez ensuite avec git bundle create repo.bundle --all pour un fichier transportable et restaurable. Planifiez cette opération via un cron job hebdomadaire vers un disque externe ou un NAS.

Stratégie de miroir Git - GitHub, GitLab et sauvegarde locale

3. Sauvegardes de bases de données

Le code peut être reconstruit depuis Git, mais les données utilisateurs sont irréempçables. Les bases de données sont donc la partie la plus critique à sauvegarder, et souvent la plus négligée dans les petits projets.

mysqldump automatisé

Pour MySQL et MariaDB, mysqldump reste l'outil de base. Automatisez-le avec un cron job :

# Sauvegarde quotidienne à 2h du matin
0 2 * * * mysqldump -u user -pPASSWORD ma_base | gzip > /backups/ma_base_$(date +\%Y\%m\%d).sql.gz
# Nettoyer les sauvegardes de plus de 30 jours
0 3 * * * find /backups/ -name "*.sql.gz" -mtime +30 -delete

Poussez ensuite ces archives vers un stockage distant : AWS S3, Backblaze B2 (5 fois moins cher que S3) ou un second serveur via rsync. Ne jamais stocker les sauvegardes uniquement sur le même serveur que la base de données.

PostgreSQL avec pg_dump

Pour PostgreSQL, pg_dump et pg_dumpall remplissent le même rôle. Préférez le format --format=custom qui permet une restauration sélective par table et une meilleure compression que le SQL brut. Les services gérés comme Supabase, Neon ou Railway intègrent des sauvegardes automatiques avec point-in-time recovery (PITR) — une fonctionnalité qui permet de restaurer la base à n'importe quelle seconde des 7 derniers jours.

Fréquence et rétention

Type de projet Fréquence Rétention
Site vitrine / blogQuotidienne30 jours
Application avec utilisateursToutes les 6h90 jours
E-commerce / transactionsToutes les heures1 an + archives
Données sensibles (RGPD)Temps réel (réplication)Conformément au DPA

4. Gestion des secrets et fichiers .env

Les fichiers .env contiennent des informations critiques : clés API, mots de passe de bases de données, tokens OAuth, clés de chiffrement. Ils ne doivent jamais être commités dans Git, mais doivent tout de même être sauvegardés de façon sécurisée.

Ce qu'il ne faut jamais faire

Les gestionnaires de secrets en production

Doppler et Infisical (open source, auto-hébergeable) permettent de centraliser tous les secrets de vos projets, de les synchroniser automatiquement dans vos environnements et de journaliser chaque accès. L'intégration avec les pipelines CI/CD (GitHub Actions, GitLab CI) se fait via des tokens de service à durée de vie limitée. HashiCorp Vault est la référence pour les environnements d'entreprise, avec rotation automatique des credentials et audit complet.

Pour les petites équipes, stocker les secrets de développement dans un gestionnaire de mots de passe partagé (1Password Teams, Bitwarden Organizations) est suffisant, à condition de définir clairement qui a accès à quoi.

La règle du .gitignore

Ajoutez systématiquement ces entrées à votre .gitignore :

.env
.env.local
.env.*.local
*.key
*.pem
secrets/
config/secrets.yaml

Configurez une clé de détection de secrets dans votre pipeline CI/CD (Gitleaks, git-secrets, TruffleHog) pour bloquer automatiquement tout commit qui contiendrait accidentellement des credentials.

5. Artefacts CI/CD et images Docker

Les pipelines CI/CD génèrent des artefacts précieux : binaires compilés, bundles JavaScript, images Docker, rapports de tests, documentation générée. Ces artefacts doivent être conservés pour permettre un rollback rapide sans recompilation.

Gestion des artefacts dans GitHub Actions

GitHub Actions permet de persister des artefacts avec l'action actions/upload-artifact. La rétention par défaut est de 90 jours. Pour les releases, utilisez GitHub Releases pour attacher des binaires à chaque tag de version : ils sont conservés indéfiniment et téléchargeables directement.

- uses: actions/upload-artifact@v4
  with:
    name: dist-${{ github.sha }}
    path: dist/
    retention-days: 30

Registre d'images Docker

Pour les applications conteneurisées, taggez chaque image avec le hash du commit Git (image:sha-abc1234) en plus du tag latest. Cela permet de revenir précisément à n'importe quelle version déployée. Utilisez GitHub Container Registry (GHCR), GitLab Container Registry ou Docker Hub avec une politique de rétention configurant la suppression des images de plus de 6 mois (sauf les tags de release).

Pipeline CI/CD avec artefacts et images Docker sauvegardées

6. Automatisation des sauvegardes serveur

Au-delà du code et des bases de données, un projet web en production comprend des fichiers serveur critiques : uploads utilisateurs, certificats SSL, configurations Nginx/Apache, crons, scripts de maintenance. Ces éléments doivent être inclus dans la stratégie de sauvegarde.

Restic : sauvegarde incrémentale chiffrée

Restic est l'outil de référence pour les sauvegardes serveur automatisées. Il crée des sauvegardes incrmentales chiffrées (AES-256) vers n'importe quel backend (local, S3, Backblaze B2, SFTP, rclone). Sa déduplication intelligente réduit considérablement l'espace de stockage. Un exemple de configuration pour un projet PHP :

# Initialiser le dépôt
restic -r s3:s3.amazonaws.com/mon-bucket init

# Sauvegarde quotidienne
restic -r s3:s3.amazonaws.com/mon-bucket backup \
  /var/www/html/uploads \
  /etc/nginx \
  /etc/letsencrypt

# Garder 7 quotidiennes, 4 hebdomadaires, 12 mensuelles
restic -r s3:s3.amazonaws.com/mon-bucket forget \
  --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune

rsync pour les fichiers média

Pour synchroniser les fichiers uploads vers un second serveur ou un NAS, rsync reste l'outil le plus efficace grâce à sa synchronisation différentielle (seuls les fichiers modifiés sont transférés). Planifiez un rsync -avz --delete /var/www/html/uploads/ backup-server:/backups/uploads/ toutes les nuits via cron.

Pour les sites web qui gèrent également des projets clients (contrats, livrables, maquettes), il est utile de compléter ces sauvegardes techniques avec une solution dédiée aux documents. Ce guide sur les méthodes de sauvegarde de documents web détaille les approches complémentaires pour protéger l'ensemble des actifs d'un projet, y compris les fichiers non techniques.

Les services cloud de backup managé

Des solutions comme DigitalOcean Managed Backups, Hetzner Backup (inclus dans certains plans) ou Cloudflare R2 simplifient la gestion des sauvegardes en éliminant la gestion d'infrastructure. Le coût est généralement 20 % du prix du volume de stockage mensuel pour les Droplet Backups DigitalOcean.

7. Plan de reprise d'activité (PRA)

Avoir des sauvegardes sans plan de restauration, c'est comme avoir des extincteurs sans avoir formé les employés à s'en servir. Un plan de reprise d'activité (PRA) ou Disaster Recovery Plan (DRP) définit les procédures exactes à suivre en cas d'incident.

Les métriques clés d'un PRA

Le runbook de restauration

Rédigez un runbook clair et testé, accessible hors ligne (PDF, doc imprimé), détaillant pas à pas :

Tests de restauration périodiques

Planifiez des exercices de restauration mensuels sur un environnement de staging isolé. Chronométrez chaque étape, notez les blocages rencontrés et mettez à jour le runbook en conséquence. Une sauvegarde non testée est une sauvegarde dont l'intégrité est inconnue. Vérifiez les checksums des dumps SQL (md5sum ou sha256sum) et décompressez-les pour vérifier l'absence de corruption.

Enfin, documentez l'architecture de sauvegarde dans le README du projet : quels sont les services utilisés, quelle est la fréquence, où trouver les credentials de restauration. Cette documentation est aussi précieuse lors d'un changement d'équipe. Pour compléter ce guide, consultez notre article sur les compétences DevOps incontournables pour un développeur web en 2026.

Questions fréquentes

Git suffit-il pour sauvegarder un projet de développement ?

Git gère l'historique du code source, mais ne sauvegarde pas les bases de données, les fichiers uploadés, les variables d'environnement ni les secrets. Une stratégie complète couvre le code (Git), les données (dumps SQL automatisés), les assets média et la configuration (gestionnaire de secrets). Git est le pilier, pas la solution complète.

Comment sauvegarder une base de données MySQL automatiquement ?

La solution la plus simple est un cron job qui exécute mysqldump chaque nuit et pousse le fichier compressé vers un stockage distant (S3, Backblaze B2, ou un second serveur). Les services gérés (RDS, PlanetScale, Neon) intègrent des sauvegardes automatiques avec point-in-time recovery, évitant toute gestion manuelle.

Comment stocker les secrets et fichiers .env de façon sécurisée ?

Ne jamais committer de fichier .env dans Git. Utilisez un gestionnaire de secrets comme Doppler, Infisical ou HashiCorp Vault en production. Pour les petites équipes, un gestionnaire de mots de passe partagé (1Password Teams, Bitwarden) est suffisant. Documentez dans le README la liste des variables nécessaires sans leurs valeurs.

Quelle est la règle 3-2-1 pour les sauvegardes ?

La règle 3-2-1 recommande de conserver 3 copies des données, sur 2 supports différents, dont 1 hors site. Appliquée au développement : dépôt Git principal (GitHub), miroir sur un second service (GitLab), et archive compressée sur un stockage cloud froid (Glacier, Backblaze B2). Cette règle s'applique aussi aux bases de données.

Que faire si on perd l'accès à son dépôt GitHub ?

Configurez un miroir automatique vers un second service (GitLab, Gitea auto-hébergé) grâce aux GitHub Actions. La commande git push --mirror synchronise un dépôt complet avec toutes ses branches et tags. Conservez aussi une copie locale régulière via git bundle create repo.bundle --all.

Comment tester qu'une sauvegarde fonctionne vraiment ?

Planifiez des exercices de restauration mensuels sur un environnement staging isolé : restaurez le dump SQL, vérifiez l'intégrité des fichiers (checksums MD5/SHA256), et chronométrez le temps de restauration complète. Documentez la procédure dans un runbook accessible hors ligne. Une sauvegarde non testée est une sauvegarde dont on ignore si elle fonctionne.