From 25b0a2fcfaef2ca5e060064d1ec3a589ddd091a9 Mon Sep 17 00:00:00 2001 From: BeauTroll <-> Date: Tue, 16 Dec 2025 09:13:58 +0100 Subject: [PATCH] Add Gitea Actions for automatic deployment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added workflow to automatically deploy configuration changes when pushing to main branch. Includes comprehensive documentation for setting up SSH keys, configuring secrets, and troubleshooting deployments. đŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .gitea/workflows/deploy.yml | 27 +++++ README.md | 44 ++++++++ TODO.md | 5 +- docs/GITEA-ACTIONS.md | 216 ++++++++++++++++++++++++++++++++++++ 4 files changed, 291 insertions(+), 1 deletion(-) create mode 100644 .gitea/workflows/deploy.yml create mode 100644 docs/GITEA-ACTIONS.md diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..af39cfc --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,27 @@ +name: Deploy Borgmatic Configuration + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + name: Deploy to Production Server + + steps: + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SERVER_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + port: ${{ secrets.SSH_PORT || 22 }} + script: | + cd /opt/borgmatic + echo "đŸ“„ Pulling latest changes from Git..." + git pull origin main + echo "🔧 Installing configuration..." + make install + echo "✅ Deployment completed successfully" diff --git a/README.md b/README.md index 2867c56..08573a0 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ Ce dĂ©pĂŽt contient la configuration complĂšte pour effectuer des backups automa - **Notifications** via ntfy pour succĂšs/Ă©chec - **Compatible** avec les backups Borg existants - **SĂ©curisĂ©** : chiffrement, exclusions de fichiers sensibles +- **DĂ©ploiement automatique** via Gitea Actions lors d'un push Git ## Dossiers sauvegardĂ©s @@ -88,6 +89,49 @@ sudo systemctl enable borgmatic.timer sudo systemctl start borgmatic.timer ``` +## DĂ©ploiement Automatique + +Ce repository inclut un workflow Gitea Actions pour dĂ©ployer automatiquement les modifications sur le serveur lors d'un push Git. + +### Configuration du dĂ©ploiement automatique + +1. **GĂ©nĂ©rer une clĂ© SSH de dĂ©ploiement** + ```bash + ssh-keygen -t ed25519 -C "gitea-deploy-borgmatic" -f ~/.ssh/gitea-deploy-borgmatic + ``` + +2. **Installer la clĂ© publique sur le serveur** + ```bash + ssh-copy-id -i ~/.ssh/gitea-deploy-borgmatic.pub user@server + ``` + +3. **Configurer les secrets dans Gitea** + + Allez dans **Settings → Secrets** de votre repository et ajoutez : + - `SERVER_HOST` : adresse du serveur + - `SERVER_USER` : utilisateur SSH + - `SSH_PRIVATE_KEY` : contenu de `~/.ssh/gitea-deploy-borgmatic` (clĂ© privĂ©e complĂšte) + - `SSH_PORT` : port SSH (optionnel, 22 par dĂ©faut) + +4. **Activer Gitea Actions** + + VĂ©rifiez que Gitea Actions est activĂ© dans votre instance Gitea (`app.ini` : `[actions] ENABLED = true`) + +### Utilisation + +Une fois configurĂ©, chaque push sur `main` dĂ©clenche automatiquement : +```bash +cd /opt/borgmatic +git pull origin main +make install +``` + +Consultez l'onglet **Actions** dans votre repository Gitea pour voir le statut du dĂ©ploiement. + +### Documentation dĂ©taillĂ©e + +Pour plus d'informations sur la configuration du dĂ©ploiement automatique, consultez [docs/GITEA-ACTIONS.md](docs/GITEA-ACTIONS.md). + ## Configuration ### Variables d'environnement (.env) diff --git a/TODO.md b/TODO.md index b76f9b4..5297241 100644 --- a/TODO.md +++ b/TODO.md @@ -5,6 +5,8 @@ - [ ] Tester le premier backup complet - [ ] VĂ©rifier que les notifications ntfy fonctionnent - [ ] Documenter la passphrase et sauvegarder la clĂ© Borg +- [ ] Configurer les secrets Gitea Actions pour le dĂ©ploiement automatique +- [ ] Tester le dĂ©ploiement automatique via Git push ## PrioritĂ© moyenne @@ -62,7 +64,8 @@ - [ ] Tests automatisĂ©s de la configuration - [ ] Simulation d'Ă©chec et vĂ©rification des alertes - [ ] Test de restauration automatisĂ© -- [ ] CI/CD pour valider les modifications de config +- [x] CI/CD pour dĂ©ploiement automatique (Gitea Actions) +- [ ] Ajouter validation de config dans le workflow CI/CD ## Notes diff --git a/docs/GITEA-ACTIONS.md b/docs/GITEA-ACTIONS.md new file mode 100644 index 0000000..db3ccf3 --- /dev/null +++ b/docs/GITEA-ACTIONS.md @@ -0,0 +1,216 @@ +# DĂ©ploiement Automatique avec Gitea Actions + +Ce document explique comment configurer le dĂ©ploiement automatique de la configuration Borgmatic via Gitea Actions. + +## Fonctionnement + +Lorsque vous poussez des modifications sur la branche `main`, Gitea Actions va automatiquement : +1. Se connecter au serveur de production via SSH +2. Faire un `git pull` pour rĂ©cupĂ©rer les derniers changements +3. ExĂ©cuter `make install` pour installer la nouvelle configuration + +## Configuration Initiale + +### 1. PrĂ©parer une ClĂ© SSH de DĂ©ploiement + +Sur votre machine locale (pas sur le serveur), crĂ©ez une paire de clĂ©s SSH dĂ©diĂ©e au dĂ©ploiement : + +```bash +# GĂ©nĂ©rer une clĂ© Ed25519 pour le dĂ©ploiement +ssh-keygen -t ed25519 -C "gitea-deploy-borgmatic" -f ~/.ssh/gitea-deploy-borgmatic + +# Afficher la clĂ© publique +cat ~/.ssh/gitea-deploy-borgmatic.pub + +# Afficher la clĂ© privĂ©e (Ă  copier dans les secrets Gitea) +cat ~/.ssh/gitea-deploy-borgmatic +``` + +### 2. Installer la ClĂ© Publique sur le Serveur + +Connectez-vous au serveur et ajoutez la clĂ© publique : + +```bash +# Sur le serveur +mkdir -p ~/.ssh +chmod 700 ~/.ssh + +# Ajouter la clĂ© publique aux clĂ©s autorisĂ©es +echo "VOTRE_CLE_PUBLIQUE" >> ~/.ssh/authorized_keys +chmod 600 ~/.ssh/authorized_keys +``` + +Ou utilisez `ssh-copy-id` : + +```bash +# Depuis votre machine locale +ssh-copy-id -i ~/.ssh/gitea-deploy-borgmatic.pub user@server +``` + +### 3. Tester la Connexion SSH + +VĂ©rifiez que la connexion fonctionne sans mot de passe : + +```bash +ssh -i ~/.ssh/gitea-deploy-borgmatic user@server +``` + +Si cela fonctionne, vous pouvez continuer. + +### 4. Configurer les Secrets dans Gitea + +Dans votre repository Gitea, allez dans **Settings → Secrets** et ajoutez les secrets suivants : + +| Nom du Secret | Valeur | Description | +|---------------|--------|-------------| +| `SERVER_HOST` | `votre-serveur.example.com` ou `IP` | Adresse du serveur | +| `SERVER_USER` | `root` ou votre utilisateur | Nom d'utilisateur SSH | +| `SSH_PRIVATE_KEY` | Contenu de `~/.ssh/gitea-deploy-borgmatic` | ClĂ© privĂ©e SSH (tout le fichier) | +| `SSH_PORT` | `22` | Port SSH (optionnel, 22 par dĂ©faut) | + +**Important :** Pour `SSH_PRIVATE_KEY`, copiez **TOUT** le contenu du fichier, y compris les lignes `-----BEGIN OPENSSH PRIVATE KEY-----` et `-----END OPENSSH PRIVATE KEY-----`. + +### 5. Activer Gitea Actions + +Assurez-vous que Gitea Actions est activĂ© sur votre instance Gitea : + +1. Dans le fichier de configuration de Gitea (`app.ini`), vĂ©rifiez : + ```ini + [actions] + ENABLED = true + ``` + +2. RedĂ©marrez Gitea si nĂ©cessaire + +3. VĂ©rifiez qu'un runner Gitea Actions est configurĂ© et en cours d'exĂ©cution + +## Structure du Workflow + +Le fichier `.gitea/workflows/deploy.yml` se trouve **dans ce repository** (pas dans Gitea) : + +``` +agence66-borgmatic/ +├── .gitea/ +│ └── workflows/ +│ └── deploy.yml ← Workflow de dĂ©ploiement +├── config.yaml +├── Makefile +└── ... +``` + +C'est similaire Ă  GitHub Actions qui utilise `.github/workflows/`. + +## Utilisation + +Une fois configurĂ©, le dĂ©ploiement est **automatique** : + +1. Faites vos modifications localement +2. Committez et poussez : + ```bash + git add . + git commit -m "Update configuration" + git push origin main + ``` +3. Gitea Actions se dĂ©clenche automatiquement +4. Consultez l'onglet **Actions** dans votre repository Gitea pour voir le statut + +## VĂ©rification du DĂ©ploiement + +AprĂšs chaque dĂ©ploiement, vous pouvez vĂ©rifier : + +```bash +# Sur le serveur +cd /opt/borgmatic +git log -1 # Voir le dernier commit +sudo borgmatic config validate # Valider la configuration +``` + +## DĂ©ploiement Manuel (si besoin) + +Si vous devez dĂ©ployer manuellement sans passer par Gitea Actions : + +```bash +# Sur le serveur +cd /opt/borgmatic +git pull origin main +make install +``` + +Ou utilisez le script dĂ©diĂ© : + +```bash +sudo /opt/borgmatic/scripts/deploy.sh +``` + +## SĂ©curitĂ© + +### Bonnes Pratiques + +1. **ClĂ© SSH dĂ©diĂ©e** : Utilisez une clĂ© SSH spĂ©cifique pour le dĂ©ploiement (ne rĂ©utilisez pas votre clĂ© personnelle) +2. **Permissions minimales** : L'utilisateur de dĂ©ploiement ne devrait avoir accĂšs qu'au dossier `/opt/borgmatic` +3. **Secrets protĂ©gĂ©s** : Les secrets Gitea sont chiffrĂ©s et ne sont jamais exposĂ©s dans les logs +4. **Restriction de commandes** : Vous pouvez limiter les commandes SSH autorisĂ©es dans `~/.ssh/authorized_keys` + +### Restreindre les Commandes SSH (Optionnel) + +Pour plus de sĂ©curitĂ©, vous pouvez restreindre la clĂ© de dĂ©ploiement Ă  exĂ©cuter uniquement le script de dĂ©ploiement : + +Éditez `~/.ssh/authorized_keys` sur le serveur : + +```bash +command="/opt/borgmatic/scripts/deploy.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-ed25519 AAAAC3... gitea-deploy-borgmatic +``` + +Puis modifiez le workflow pour simplement se connecter (le script s'exĂ©cutera automatiquement). + +## DĂ©pannage + +### Le workflow ne se dĂ©clenche pas + +- VĂ©rifiez que Gitea Actions est activĂ© dans `app.ini` +- VĂ©rifiez qu'un runner est en cours d'exĂ©cution +- Consultez les logs de Gitea + +### Erreur d'authentification SSH + +``` +Permission denied (publickey) +``` + +- VĂ©rifiez que la clĂ© publique est bien dans `~/.ssh/authorized_keys` sur le serveur +- VĂ©rifiez les permissions : `~/.ssh` doit ĂȘtre 700, `authorized_keys` doit ĂȘtre 600 +- VĂ©rifiez que vous avez copiĂ© **toute** la clĂ© privĂ©e dans le secret `SSH_PRIVATE_KEY` + +### Le script ne trouve pas le repository + +``` +cd: /opt/borgmatic: No such file or directory +``` + +- Assurez-vous que le repository est clonĂ© dans `/opt/borgmatic` sur le serveur +- VĂ©rifiez le chemin dans le workflow `.gitea/workflows/deploy.yml` + +### Permission denied lors de make install + +- Le script nĂ©cessite `sudo` pour installer les fichiers dans `/etc/borgmatic` +- Assurez-vous que l'utilisateur de dĂ©ploiement peut exĂ©cuter `make install` avec sudo +- Ou ajoutez `sudo` dans le workflow (nĂ©cessite configuration sudoers) + +## Logs et Monitoring + +- **Logs Gitea Actions** : Consultez l'onglet "Actions" dans votre repository Gitea +- **Logs serveur** : `journalctl -xe` pour voir les logs systĂšme +- **Logs Git** : `cd /opt/borgmatic && git log` pour voir l'historique + +## Alternative : DĂ©ploiement Manuel + +Si vous prĂ©fĂ©rez ne pas utiliser Gitea Actions, vous pouvez : + +1. DĂ©sactiver le workflow en renommant `.gitea/workflows/deploy.yml` en `.gitea/workflows/deploy.yml.disabled` +2. DĂ©ployer manuellement avec : `ssh server 'cd /opt/borgmatic && git pull && make install'` +3. Ou utiliser un simple cron job pour vĂ©rifier les mises Ă  jour + +## RĂ©fĂ©rences + +- [Documentation Gitea Actions](https://docs.gitea.io/en-us/actions/) +- [SSH Action GitHub](https://github.com/appleboy/ssh-action)