Aller au contenu

Réinstallation — clochette

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)

Avant de démarrer :

  • Accès à la console série Scaleway (ou KVM panel)
  • Connexion réseau disponible depuis le serveur
  • Dépôt nixos accessible (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

Depuis le panel Scaleway :

  1. Aller dans Instances → clochette → Actions → Démarrer en mode rescue
  2. Sélectionner une image rescue (Debian ou Ubuntu)
  3. Copier le mot de passe rescue affiché
  4. Se connecter en SSH (en mode rescue, SSH public est ouvert) :
Terminal window
ssh root@51.159.34.135
Terminal window
# Vérifier le disque disponible
lsblk
# Partitionner (MBR/BIOS)
parted /dev/sda --script mklabel msdos
parted /dev/sda --script mkpart primary ext2 1MiB 513MiB # /boot
parted /dev/sda --script mkpart primary linux-swap 513MiB 4609MiB # swap
parted /dev/sda --script mkpart primary ext4 4609MiB 100% # /

Formater :

Terminal window
mkfs.ext2 -L boot /dev/sda1
mkswap -L swap /dev/sda2
mkfs.ext4 -L root /dev/sda3

Noter les UUIDs — ils seront nécessaires pour mettre à jour hardware-configuration.nix :

Terminal window
blkid /dev/sda1 /dev/sda2 /dev/sda3

Exemple 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"
Terminal window
mount /dev/sda3 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
swapon /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 »
Terminal window
# 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/nixos
cd /tmp/nixos

Mettre à jour systems/x86_64-linux/clochette/hardware-configuration.nix avec les nouveaux UUIDs :

Terminal window
nano systems/x86_64-linux/clochette/hardware-configuration.nix

Remplacer 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 :

Terminal window
git config user.email "guillaume@friloux.me"
git config user.name "Guillaume Friloux"
git add systems/x86_64-linux/clochette/hardware-configuration.nix
git commit -m "chore(clochette): update disk UUIDs after reinstall"
Terminal window
# Depuis le rescue, avec nix disponible
sudo nixos-install \
--flake /tmp/nixos#clochette \
--no-root-passwd \
--root /mnt

L’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.

Terminal window
reboot

Le 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 :

Terminal window
sudo tailscale up

Un lien d’authentification s’affiche. L’ouvrir dans un navigateur, approuver la machine.

Vérifier l’accès :

Terminal window
tailscale status
# clochette doit apparaître avec une adresse 100.x.x.x

Depuis exampleHost, vérifier la connectivité :

Terminal window
tailscale ping clochette
ssh 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) :

Terminal window
# Obtenir la nouvelle clé age dérivée de la clé SSH host
nix run nixpkgs#ssh-to-age -- -i /etc/ssh/ssh_host_ed25519_key.pub

Depuis exampleHost, mettre à jour .sops.yaml avec la nouvelle clé publique :

Terminal window
cd ~/Apps/github/gfriloux/nixos # ou chemin habituel du dépôt
nano .sops.yaml
# Remplacer la valeur de &server_clochette par la nouvelle clé age

Re-chiffrer secrets/clochette.yaml avec la nouvelle clé :

Terminal window
sops updatekeys secrets/clochette.yaml
# Confirmer avec 'y'

Vérifier que le fichier est bien mis à jour :

Terminal window
sops -d secrets/clochette.yaml # doit s'exécuter sans erreur

Committer et pousser :

Terminal window
git add .sops.yaml secrets/clochette.yaml
git 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 »
Terminal window
just install_clochette --ask-sudo-password

Cette 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) :

Terminal window
# Se connecter en tant que root sur clochette
ssh guillaume@clochette.friloux.me
sudo -i
# Lister les archives disponibles
BORG_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.me

Exemple 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 :

Terminal window
# Arrêter les containers avant restauration
systemctl 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 services
systemctl start docker-immich-server docker-immich-postgres
Terminal window
# Tous les containers sont en cours d'exécution et sains
docker ps --format "table {{.Names}}\t{{.Status}}"
# Santé de chaque container
docker inspect --format='{{.Name}} → {{.State.Health.Status}}' \
traefik crowdsec immich-server immich-postgres immich-redis
# Certificats Traefik — Let's Encrypt actif
docker exec traefik traefik healthcheck
# Logs récents sans erreur critique
journalctl -u docker-traefik --since "10 minutes ago" | tail -20
# Backup Borg — dernier statut
systemctl status borgbackup-job-remote

Vérification externe : accéder depuis un navigateur à :

  • https://photos.friloux.me (Immich)