33800 Docs

← Retour

Proposition - Réorganisation VMs Infrastructure

Date : 03-01-2026 Status : En attente de validation Impact : Élevé (downtime prévu)


Objectifs

  1. Créer une VM dédiée pour Claude
  2. Séparer Docker/Portainer sur sa propre VM
  3. Virtualiser complètement Windows (plus de passthrough)

Architecture actuelle

PVE (192.168.1.10)
├── VM 201 - win11 (192.168.1.30)
│   ├── scsi0: local-lvm 350G (système)
│   ├── scsi1: Samsung 870 QVO 1TB (passthrough)
│   ├── scsi3: LDLC 500G (passthrough)
│   └── scsi4: Crucial BX500 2TB (passthrough)
│
├── VM 206 - prod-portainer (192.168.1.11)
│   └── scsi0: vm-ssd 100G (Crucial MX500)
│       └── Docker, Portainer, Redis, Supabase, HelloCar...
│
└── Stockage
    ├── stock_36to: RAIDZ2 5x12TB HGST (~33TB)
    └── stock_8to: RAIDZ1 3x4TB Seagate (~7.8TB)

Architecture proposée

PVE (192.168.1.10)
├── VM 201 - win11 (192.168.1.30)
│   ├── scsi0: local-lvm 350G (système)
│   └── scsi1: zvol win_storage 3TB (sur stock_36to)
│       └── Remplace les 3 SSDs passthrough
│
├── VM 2XX - claude (192.168.1.11 ou nouvelle IP)
│   └── scsi0: vm-ssd 50G (Crucial MX500)
│       └── Debian minimal, SSH, Claude sessions
│
├── VM 2XX - docker-prod (nouvelle IP)
│   └── scsi0: vm-ssd 50G (Crucial MX500)
│       └── Docker, Portainer, tous les containers
│
└── Stockage
    ├── stock_36to: RAIDZ2 (~33TB)
    │   └── zvol win_storage 3TB (nouveau)
    └── stock_8to: RAIDZ1 (~7.8TB)
        └── windows_backup (SMB)

Phase 1 : Créer VM docker-prod

1.1 Créer la VM sur PVE

# Sur pve.local
sudo qm create 207 \
  --name docker-prod \
  --memory 8192 \
  --cores 4 \
  --net0 virtio,bridge=vmbr0 \
  --scsihw virtio-scsi-pci \
  --scsi0 vm-ssd:50,format=raw \
  --ide2 local:iso/debian-12.iso,media=cdrom \
  --boot order=scsi0

1.2 Installer Debian 12

1.3 Configuration post-install

# SSH, sudo, mDNS
apt update && apt install -y openssh-server sudo avahi-daemon

# Docker
curl -fsSL https://get.docker.com | sh
usermod -aG docker gouroubleu

# NFS client
apt install -y nfs-common
mkdir -p /mnt/stock_36to
echo "192.168.1.10:/stock_36to /mnt/stock_36to nfs defaults,_netdev 0 0" >> /etc/fstab

# Docker data-root sur NFS
cat > /etc/docker/daemon.json << 'EOF'
{
  "data-root": "/mnt/stock_36to/data/33800-stack/docker/prod/"
}
EOF
systemctl restart docker

1.4 Migrer les containers

Les containers utilisent déjà le NFS pour leurs données, donc :

  1. Arrêter les containers sur prod-portainer
  2. Démarrer Docker sur docker-prod
  3. Les containers retrouvent leurs données
# Sur prod-portainer (ancien)
docker stop $(docker ps -q)

# Sur docker-prod (nouveau)
cd /mnt/stock_36to/data/33800-stack/docker/stacks/
docker compose -f redis-prod/docker-compose.yml up -d
docker compose -f supabase-prod/docker-compose.yml up -d
# etc.

Phase 2 : Convertir prod-portainer en VM Claude

2.1 Nettoyer Docker

# Supprimer Docker (les données sont sur NFS)
systemctl stop docker
apt remove -y docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker

2.2 Renommer la VM

# Sur pve.local
sudo qm set 206 --name claude

2.3 Mettre à jour mDNS

# Sur la VM
sudo hostnamectl set-hostname claude
sudo sed -i 's/prod-portainer/claude/g' /etc/hosts

2.4 Configuration Claude


Phase 3 : Virtualiser Windows

3.1 Sauvegarder les données Windows

# Depuis win11, copier vers W: (stock_8to)
robocopy E:\ W:\backup-games /E /Z /MT:8
robocopy I:\ W:\backup-mini /E /Z /MT:8
# etc.

3.2 Créer zvol pour Windows

# Sur pve.local
sudo zfs create -V 3T stock_36to/win_storage

3.3 Reconfigurer VM win11

# Retirer les disques passthrough
sudo qm set 201 --delete scsi1
sudo qm set 201 --delete scsi3
sudo qm set 201 --delete scsi4

# Ajouter le zvol
sudo qm set 201 --scsi1 /dev/zvol/stock_36to/win_storage

3.4 Dans Windows

  1. Initialiser le nouveau disque (3TB)
  2. Créer partitions selon besoins
  3. Restaurer les données depuis W:

3.5 Libérer les SSDs physiques

Les 3 SSDs (Samsung, LDLC, Crucial BX500) deviennent disponibles pour d'autres usages.


Phase 4 : Mise à jour Nginx

Nouvelles entrées

Service Ancienne IP Nouvelle IP
Portainer 192.168.1.11:9443 192.168.1.12:9443
Redis 192.168.1.11:6379 192.168.1.12:6379
Supabase API 192.168.1.11:8200 192.168.1.12:8200
Supabase Studio 192.168.1.11:8201 192.168.1.12:8201
HelloCar API 192.168.1.11:4510 192.168.1.12:4510
etc. ... ...
# Sur nginx.local - mettre à jour les configs
sudo sed -i 's/192.168.1.11/192.168.1.12/g' /etc/nginx/sites-available/*-prod*
sudo nginx -t && sudo systemctl reload nginx

Phase 5 : Mise à jour documentation


Ordre d'exécution recommandé

Étape Durée estimée Downtime
1. Créer VM docker-prod 30 min Non
2. Migrer containers 15 min Oui (services)
3. Mettre à jour Nginx 5 min Non
4. Convertir prod-portainer → claude 15 min Non
5. Backup données Windows 1-2h Non
6. Créer zvol + reconfigurer win11 30 min Oui (Windows)
7. Restaurer données Windows 1-2h Oui (Windows)
8. Documentation 15 min Non

Downtime total services : ~20 min Downtime Windows : 2-4h (backup + restauration)


Risques et mitigations

Risque Mitigation
Perte données Windows Backup complet sur stock_8to avant migration
Containers ne redémarrent pas Données sur NFS, images rebuildables
Performances zvol vs SSD zvol sur RAIDZ2 = lecture rapide, écriture correcte
IP conflicts Planifier les IPs avant migration

Questions pour validation

  1. IP pour docker-prod : 192.168.1.12 OK ?
  2. IP pour claude : garder 192.168.1.11 ?
  3. Taille zvol Windows : 3TB suffisant ? (actuellement 1TB + 500G + 2TB = 3.5TB mais pas plein)
  4. SSDs libérés : usage prévu ?

Validation

Signature utilisateur : Date :