No description
  • Go 84.5%
  • JavaScript 9.7%
  • Go Template 2.2%
  • HTML 1.7%
  • CSS 0.8%
  • Other 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
aporler 35f410bc82 Permet de choisir le pool cible d'une sauvegarde/planification, et ajoute la gestion complète des pools
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>
2026-09-07 01:54:59 +00:00
cmd Attribue une version au serveur et aux agents, et ajoute la page « À propos » 2026-09-06 03:24:54 +00:00
docs Ajoute un service systemd pour lancer le serveur en continu 2026-09-06 03:25:16 +00:00
internal Permet de choisir le pool cible d'une sauvegarde/planification, et ajoute la gestion complète des pools 2026-09-07 01:54:59 +00:00
.env.example Chiffre le transport par défaut et fait épingler le serveur par les agents 2026-09-05 02:20:57 +00:00
.gitignore Corrige une sauvegarde faussement réussie et multiplie le débit par six 2026-09-02 19:58:05 +00:00
compose.yaml Corrige une sauvegarde faussement réussie et multiplie le débit par six 2026-09-02 19:58:05 +00:00
go.mod Ajoute le support des pools de stockage S3-compatibles 2026-09-06 00:14:41 +00:00
go.sum Ajoute le support des pools de stockage S3-compatibles 2026-09-06 00:14:41 +00:00
install-server.sh Reconstruit les binaires agent au démarrage quand la source a bougé 2026-09-05 22:15:58 +00:00
Makefile Ajoute un service systemd pour lancer le serveur en continu 2026-09-06 03:25:16 +00:00
README.md Installe l'agent comme service permanent depuis la commande de la console 2026-09-05 02:32:39 +00:00

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.