Compare commits
2 Commits
6f3b3888a2
...
25b0a2fcfa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
25b0a2fcfa | ||
|
|
e764d1dc3d |
27
.gitea/workflows/deploy.yml
Normal file
27
.gitea/workflows/deploy.yml
Normal file
@@ -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"
|
||||||
4
Makefile
4
Makefile
@@ -129,7 +129,3 @@ quick-setup: ## Configuration rapide (copie .env.example vers .env)
|
|||||||
echo "$(YELLOW)Le fichier .env existe déjà$(NC)"; \
|
echo "$(YELLOW)Le fichier .env existe déjà$(NC)"; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Alias pratiques
|
|
||||||
backup-now: backup ## Alias pour 'backup'
|
|
||||||
ls: list ## Alias pour 'list'
|
|
||||||
check-health: healthcheck ## Alias pour 'healthcheck'
|
|
||||||
|
|||||||
44
README.md
44
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
|
- **Notifications** via ntfy pour succès/échec
|
||||||
- **Compatible** avec les backups Borg existants
|
- **Compatible** avec les backups Borg existants
|
||||||
- **Sécurisé** : chiffrement, exclusions de fichiers sensibles
|
- **Sécurisé** : chiffrement, exclusions de fichiers sensibles
|
||||||
|
- **Déploiement automatique** via Gitea Actions lors d'un push Git
|
||||||
|
|
||||||
## Dossiers sauvegardés
|
## Dossiers sauvegardés
|
||||||
|
|
||||||
@@ -88,6 +89,49 @@ sudo systemctl enable borgmatic.timer
|
|||||||
sudo systemctl start 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
|
## Configuration
|
||||||
|
|
||||||
### Variables d'environnement (.env)
|
### Variables d'environnement (.env)
|
||||||
|
|||||||
5
TODO.md
5
TODO.md
@@ -5,6 +5,8 @@
|
|||||||
- [ ] Tester le premier backup complet
|
- [ ] Tester le premier backup complet
|
||||||
- [ ] Vérifier que les notifications ntfy fonctionnent
|
- [ ] Vérifier que les notifications ntfy fonctionnent
|
||||||
- [ ] Documenter la passphrase et sauvegarder la clé Borg
|
- [ ] 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
|
## Priorité moyenne
|
||||||
|
|
||||||
@@ -62,7 +64,8 @@
|
|||||||
- [ ] Tests automatisés de la configuration
|
- [ ] Tests automatisés de la configuration
|
||||||
- [ ] Simulation d'échec et vérification des alertes
|
- [ ] Simulation d'échec et vérification des alertes
|
||||||
- [ ] Test de restauration automatisé
|
- [ ] 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
|
## Notes
|
||||||
|
|
||||||
|
|||||||
216
docs/GITEA-ACTIONS.md
Normal file
216
docs/GITEA-ACTIONS.md
Normal file
@@ -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)
|
||||||
Reference in New Issue
Block a user