Réinstallation — clochette
Informations de Référence
Section intitulée « Informations de Référence »| Paramètre | Valeur |
|---|---|
| IP publique | 51.159.34.135 |
| Passerelle | 51.159.34.1 |
| DNS | 51.159.47.28, 51.159.47.26 |
| Disque | /dev/sda (BIOS/MBR, pas d’EFI) |
| Architecture | x86_64, Intel KVM |
| SSH public | Fermé — accessible uniquement via Tailscale (100.64.0.0/10) |
Pré-Requis
Section intitulée « Pré-Requis »Avant de démarrer :
- Accès à la console série Scaleway (ou KVM panel)
- Connexion réseau disponible depuis le serveur
- Dépôt
nixosaccessible (GitHub ou USB) - Clé age de exampleHost disponible (pour re-chiffrer les secrets après install) Voir Sauvegarde & Restauration des Secrets
- Sauvegarde Borg vérifiée et récente
BORG_PASSPHRASE=... borg list ssh://backup@storage2.friloux.me/~/clochette.friloux.me - DNS d’urgence noté : si Traefik ne redémarre pas, les domaines sont inaccessibles
Étape 1 — Accès au Mode Rescue Scaleway
Section intitulée « Étape 1 — Accès au Mode Rescue Scaleway »Depuis le panel Scaleway :
- Aller dans Instances → clochette → Actions → Démarrer en mode rescue
- Sélectionner une image rescue (Debian ou Ubuntu)
- Copier le mot de passe rescue affiché
- Se connecter en SSH (en mode rescue, SSH public est ouvert) :
ssh root@51.159.34.135Étape 2 — Partitionnement du Disque
Section intitulée « Étape 2 — Partitionnement du Disque »# Vérifier le disque disponiblelsblk
# Partitionner (MBR/BIOS)parted /dev/sda --script mklabel msdosparted /dev/sda --script mkpart primary ext2 1MiB 513MiB # /bootparted /dev/sda --script mkpart primary linux-swap 513MiB 4609MiB # swapparted /dev/sda --script mkpart primary ext4 4609MiB 100% # /Formater :
mkfs.ext2 -L boot /dev/sda1mkswap -L swap /dev/sda2mkfs.ext4 -L root /dev/sda3Noter les UUIDs — ils seront nécessaires pour mettre à jour hardware-configuration.nix :
blkid /dev/sda1 /dev/sda2 /dev/sda3Exemple de sortie :
/dev/sda1: LABEL="boot" UUID="AAAA-BBBB-..." TYPE="ext2"/dev/sda2: LABEL="swap" UUID="CCCC-DDDD-..." TYPE="swap"/dev/sda3: LABEL="root" UUID="EEEE-FFFF-..." TYPE="ext4"Étape 3 — Monter les Partitions
Section intitulée « Étape 3 — Monter les Partitions »mount /dev/sda3 /mntmkdir /mnt/bootmount /dev/sda1 /mnt/bootswapon /dev/sda2Étape 4 — Récupérer le Dépôt et Mettre à Jour les UUIDs
Section intitulée « Étape 4 — Récupérer le Dépôt et Mettre à Jour les UUIDs »# Installer git dans le rescue (si absent)apt-get install -y git nix # ou utiliser le nix du rescue
git clone https://github.com/gfriloux/nixos /tmp/nixoscd /tmp/nixosMettre à jour systems/x86_64-linux/clochette/hardware-configuration.nix avec les nouveaux UUIDs :
nano systems/x86_64-linux/clochette/hardware-configuration.nixRemplacer les trois UUIDs :
fileSystems."/" = { device = "/dev/disk/by-uuid/NOUVEAU-UUID-ROOT"; # UUID de /dev/sda3 fsType = "ext4";};
fileSystems."/boot" = { device = "/dev/disk/by-uuid/NOUVEAU-UUID-BOOT"; # UUID de /dev/sda1 fsType = "ext2";};
swapDevices = [ { device = "/dev/disk/by-uuid/NOUVEAU-UUID-SWAP"; } # UUID de /dev/sda2];Committer la modification :
git config user.email "guillaume@friloux.me"git config user.name "Guillaume Friloux"git add systems/x86_64-linux/clochette/hardware-configuration.nixgit commit -m "chore(clochette): update disk UUIDs after reinstall"Étape 5 — Installation NixOS
Section intitulée « Étape 5 — Installation NixOS »# Depuis le rescue, avec nix disponiblesudo nixos-install \ --flake /tmp/nixos#clochette \ --no-root-passwd \ --root /mntL’installation télécharge les paquets et configure le système. Si une erreur réseau interrompt le téléchargement, relancer la même commande.
Étape 6 — Premier Démarrage
Section intitulée « Étape 6 — Premier Démarrage »rebootLe serveur redémarre sur le système NixOS fraîchement installé.
Accès post-reboot : SSH public est fermé par la configuration (openFirewall = false,
règle firewall limitée à 100.64.0.0/10). Utiliser la console série Scaleway pour
les étapes suivantes jusqu’à ce que Tailscale soit opérationnel.
Étape 7 — Ré-enrôlement Tailscale (Console Série)
Section intitulée « Étape 7 — Ré-enrôlement Tailscale (Console Série) »Depuis la console série Scaleway :
sudo tailscale upUn lien d’authentification s’affiche. L’ouvrir dans un navigateur, approuver la machine.
Vérifier l’accès :
tailscale status# clochette doit apparaître avec une adresse 100.x.x.xDepuis exampleHost, vérifier la connectivité :
tailscale ping clochettessh guillaume@clochette.friloux.meÉtape 8 — Mise à Jour de la Clé Age dans sops
Section intitulée « Étape 8 — Mise à Jour de la Clé Age dans sops »La nouvelle installation a généré une nouvelle clé SSH host, donc une nouvelle clé age. Sans cette mise à jour, sops ne pourra plus déchiffrer les secrets depuis clochette.
Depuis clochette (maintenant accessible via SSH Tailscale) :
# Obtenir la nouvelle clé age dérivée de la clé SSH hostnix run nixpkgs#ssh-to-age -- -i /etc/ssh/ssh_host_ed25519_key.pubDepuis exampleHost, mettre à jour .sops.yaml avec la nouvelle clé publique :
cd ~/Apps/github/gfriloux/nixos # ou chemin habituel du dépôtnano .sops.yaml# Remplacer la valeur de &server_clochette par la nouvelle clé ageRe-chiffrer secrets/clochette.yaml avec la nouvelle clé :
sops updatekeys secrets/clochette.yaml# Confirmer avec 'y'Vérifier que le fichier est bien mis à jour :
sops -d secrets/clochette.yaml # doit s'exécuter sans erreurCommitter et pousser :
git add .sops.yaml secrets/clochette.yamlgit commit -m "chore(secrets): rotate clochette age key after reinstall"git pushÉtape 9 — Déploiement Complet depuis exampleHost
Section intitulée « Étape 9 — Déploiement Complet depuis exampleHost »just install_clochette --ask-sudo-passwordCette commande déploie la configuration complète, démarre tous les containers et active la surveillance de santé Docker.
Étape 10 — Restauration des Données depuis Borg
Section intitulée « Étape 10 — Restauration des Données depuis Borg »Si les données des services doivent être restaurées (cas d’une vraie perte) :
# Se connecter en tant que root sur clochettessh guillaume@clochette.friloux.mesudo -i
# Lister les archives disponiblesBORG_PASSPHRASE=$(cat /run/secrets/services/borg/passphrase) \BORG_RSH="ssh -i /run/secrets/services/borg/key/private" \borg list ssh://backup@storage2.friloux.me/~/clochette.friloux.meExemple de sortie :
clochette-2025-05-16T03:00:01 Fri, 2025-05-16 03:00:05 [...]clochette-2025-05-15T03:00:01 Thu, 2025-05-15 03:00:04 [...]Restaurer l’archive la plus récente :
# Arrêter les containers avant restaurationsystemctl stop docker-immich-server docker-immich-postgres
# Restaurer (depuis /)cd /BORG_PASSPHRASE=$(cat /run/secrets/services/borg/passphrase) \BORG_RSH="ssh -i /run/secrets/services/borg/key/private" \borg extract --progress \ ssh://backup@storage2.friloux.me/~/clochette.friloux.me::clochette-2025-05-16T03:00:01
# Redémarrer les servicessystemctl start docker-immich-server docker-immich-postgresÉtape 11 — Vérification Finale
Section intitulée « Étape 11 — Vérification Finale »# Tous les containers sont en cours d'exécution et sainsdocker ps --format "table {{.Names}}\t{{.Status}}"
# Santé de chaque containerdocker inspect --format='{{.Name}} → {{.State.Health.Status}}' \ traefik crowdsec immich-server immich-postgres immich-redis
# Certificats Traefik — Let's Encrypt actifdocker exec traefik traefik healthcheck
# Logs récents sans erreur critiquejournalctl -u docker-traefik --since "10 minutes ago" | tail -20
# Backup Borg — dernier statutsystemctl status borgbackup-job-remoteVérification externe : accéder depuis un navigateur à :
https://photos.friloux.me(Immich)