- Go 84.5%
- JavaScript 9.7%
- Go Template 2.2%
- HTML 1.7%
- CSS 0.8%
- Other 1.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Une sauvegarde manuelle, une tâche ou une planification peuvent maintenant cibler un pool de stockage précis au lieu de suivre uniquement la résolution par défaut du serveur — le choix remonte de la console au job, puis du job à la session ouverte par l'agent (JobSpec.PoolID, SchedulePolicy.TargetPoolID). Ajoute aussi la modification (nom, compression) et la suppression d'un pool depuis sa fiche : la suppression est refusée si le pool est le pool par défaut, ou s'il est encore ciblé par une sauvegarde ou une planification (contrainte de clé étrangère, classifiée proprement plutôt que de laisser fuiter l'erreur SQL brute). Côté console : chaque sauvegarde affichée (Sauvegardes/Restauration) indique maintenant le pool qui la contient, et supprimer une sauvegarde faisant partie d'une chaîne incrémentale demande explicitement si l'opérateur veut effacer uniquement celle-ci ou toute la chaîne. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
| cmd | ||
| docs | ||
| internal | ||
| .env.example | ||
| .gitignore | ||
| compose.yaml | ||
| go.mod | ||
| go.sum | ||
| install-server.sh | ||
| Makefile | ||
| README.md | ||
AuxiNux Backup
Solution de sauvegarde inspirée de Veeam, compatible Windows, Linux et macOS (Apple Silicon). Ce dépôt contient la fondation backend du MVP : persistance PostgreSQL, authentification utilisateur et contrôle d'accès par rôle, enrôlement sécurisé des agents en un lien à coller, pool de stockage local complet, et une API/CLI/console Web pour les administrer.
Composants
| Binaire | Rôle | Port par défaut |
|---|---|---|
auxinux-backup-server |
Console Web, API /api/v1, gestion des agents/pools/enrôlement, connexion PostgreSQL |
8442 (web+API), 8444 (agents) |
auxinux-backup-agent |
Agent installé sur les machines protégées : enrôlement, heartbeat, détection de capacités | sortant vers 8444 |
auxinux-backup-repository |
Passerelle de pool distant (health-check seulement ce jalon) | 8445 |
auxinux-backup-cli |
Administration en ligne de commande (status, enrollment, agents) |
aucun (client HTTP) |
Voir docs/architecture.md pour le détail des modules internes et docs/configuration.md pour la configuration complète.
Démarrage rapide
Prérequis : Go 1.23+, make, curl. PostgreSQL est nécessaire mais pas obligatoire à l'avance — l'assistant de première configuration peut le détecter, proposer de l'installer et de créer la base (voir plus bas).
# Dépôt public : clone HTTPS, pas besoin de clé SSH.
git clone https://git.auxinux.ca/Auxinux/AuxiNux-Backup.git
# (ou en SSH, port 2222, si vous avez un accès en écriture : git@git.auxinux.ca:Auxinux/AuxiNux-Backup.git)
cd AuxiNux-Backup
# Optionnel : détecte la distribution Linux (apt/dnf) et installe les
# prérequis manquants (curl, make, tar, Go 1.23+), puis construit le projet.
# Ne touche jamais à PostgreSQL ni aux services — voir docs/configuration.md.
sudo ./install-server.sh
# Si les prérequis sont déjà en place :
make build
./bin/auxinux-backup-server
Le serveur est chiffré par défaut : sans certificat configuré, il en génère un auto-signé au premier démarrage et affiche son empreinte, que les agents épinglent (voir docs/configuration.md « Chiffrement du transport »).
Au tout premier lancement, sans AUXINUX_BACKUP_DATABASE_URL définie, un assistant dans le navigateur configure la connexion PostgreSQL (avec offre de création du rôle/base ou d'installation du paquet, toujours avec confirmation explicite), crée le premier compte administrateur, et construit les binaires agent — le terminal affiche l'URL réelle du serveur (IP détectée automatiquement) et un code de configuration à usage unique à entrer dans le navigateur :
Ouvrez https://192.168.1.42:8442 dans un navigateur
Code de configuration : N5GQUWMZ
Voir docs/configuration.md « Assistant de première configuration » (variante terminal disponible via AUXINUX_BACKUP_WIZARD_MODE=terminal). Les démarrages suivants n'ont plus besoin de l'assistant (connexion enregistrée dans .env).
Alternative non-interactive (Docker/Podman pour PostgreSQL, variables d'environnement) :
make dev-up
cp .env.example .env # puis éditer si besoin
export AUXINUX_BACKUP_DATABASE_URL=postgres://auxinux:auxinux-dev-only@127.0.0.1:5432/auxinux_backup?sslmode=disable
export AUXINUX_BACKUP_ADMIN_BOOTSTRAP_EMAIL=admin@example.com
export AUXINUX_BACKUP_ADMIN_BOOTSTRAP_PASSWORD='un mot de passe de 12+ caractères'
export AUXINUX_BACKUP_NO_WIZARD=1
make migrate
make test
make build
./bin/auxinux-backup-server
Ajouter un agent
Depuis la console Web (Machines → « + Ajouter un agent »), après connexion : un jeton est créé et deux commandes prêtes à coller s'affichent (Linux/macOS Apple Silicon, Windows PowerShell), qui téléchargent, installent et enrôlent l'agent en une seule ligne — voir docs/configuration.md « Ajouter un agent depuis la console ». L'assistant de première configuration construit déjà les binaires nécessaires ; sinon make agent-binaries les construit manuellement.
La commande générée épingle le certificat du serveur, vérifie l'empreinte du binaire téléchargé, enrôle la machine, et — lancée avec sudo ou depuis un PowerShell administrateur — installe l'agent comme service permanent qui redémarre avec la machine. Sans droits d'administration, elle le lance pour la session en cours seulement et le dit.
Ou manuellement, avec un binaire déjà en place :
./bin/auxinux-backup-cli login --email admin@example.com
./bin/auxinux-backup-cli enrollment create --ttl 1h --json # copier le champ "token"
AUXINUX_BACKUP_SERVER_URL=https://localhost:8444 \
AUXINUX_BACKUP_ENROLLMENT_TOKEN=<token> \
./bin/auxinux-backup-agent
Voir docs/configuration.md pour la procédure complète (amorçage, gestion des comptes, enrôlement, création de pool local, tests d'intégration).
Commandes CLI
auxinux-backup-cli login [--email ...] [--password ...]
auxinux-backup-cli logout
auxinux-backup-cli status
auxinux-backup-cli enrollment create [--label ...] [--ttl 1h] [--max-uses 1] [--json]
auxinux-backup-cli enrollment list [--json]
auxinux-backup-cli enrollment revoke <id> [--json]
auxinux-backup-cli agents list [--json]
auxinux-backup-cli agents show <id> [--json]
auxinux-backup-cli users create [--email ...] [--role viewer|operator|admin]
auxinux-backup-cli users list [--json]
auxinux-backup-cli users disable|enable <id>
auxinux-backup-cli users set-role <id> <role>
Développement
make fmt # gofmt
make lint # gofmt -l + go vet (+ golangci-lint si installé)
make test # tests unitaires, aucune dépendance réseau/DB
make test-integration # tests PostgreSQL réels, voir docs/configuration.md
make cross-build # linux/amd64, linux/arm64, windows/amd64, darwin/arm64
make agent-binaries # idem, agent seulement — alimente la distribution "Ajouter un agent"
État du projet
Ce jalon fournit une fondation backend testée : persistance PostgreSQL avec migrations versionnées, authentification utilisateur avec rôles (viewer/operator/admin) protégeant toute l'API admin, enrôlement d'agents par jeton à usage limité avec identité durable, pool de stockage local complet (écriture atomique, checksums, protection contre la traversée de chemin), API versionnée avec erreurs structurées et endpoints de santé séparés, CLI, et console Web (connexion, agents/pools/enrôlement/comptes).
Non implémenté (interfaces posées, pas de simulation) : planification/exécution automatique des politiques, sauvegarde/restauration réelle de fichiers, sauvegarde/restauration bare-metal, VSS, snapshots LVM/Btrfs/ZFS, déduplication, pools SMB/NFS/S3/repository distant, intégration Virtua/Docker/LXC/libvirt, mTLS agents↔serveur. Voir docs/architecture.md « Limites de ce jalon » et « Limites de sécurité actuelles » pour le détail complet et la feuille de route.