0ad90d81d616b3be33b184cf4e90201f1509d589
🏗️ NixOS Infrastructure Project Canvas
Projet de gestion centralisée des configurations NixOS pour l'infrastructure de Xavier Lagraula
📌 Contexte et Objectifs
Contexte
- Portée : Gestion centralisée des configurations NixOS pour une infrastructure complète (hyperviseurs, stations de travail, conteneurs LXC, services).
- Environnement :
- Un hyperviseur Proxmox actuellement, un deuxième à venir.
- Plusieurs stations de travail (ex:
dev-xavier,mao-julien,bureautique). - Conteneurs LXC (sur Proxmox) pour les services d'infrastructure (DNS, Gitea, Bitwarden, etc.) et applicatifs.
- 2 utilisateurs principaux (Xavier, Frida) + utilisateurs système (
root,admin,guest).
- Matériel : ThinkCentre m710q (16 Go RAM, i3) avec KDE 6.3.
Objectifs
| Objectif | Description | Priorité |
|---|---|---|
| Centraliser les configurations | Un dépôt Git unique pour toutes les machines. | ⭐⭐⭐ |
| Modularité | Modules réutilisables pour les services, types de machines, et profils utilisateurs. | ⭐⭐⭐ |
| Automatisation | Scripts pour déployer les configurations sur les machines et conteneurs. | ⭐⭐⭐ |
| Sécurité | Gestion des secrets avec sops-nix. |
⭐⭐ |
| Portabilité | Modules autonomes via callPackage. |
⭐⭐ |
| Maintenance | Documentation claire et processus de mise à jour simplifiés. | ⭐ |
🔍 Décisions Clés
| Décision | Justification | Impact |
|---|---|---|
| Pas de flakes | Simplifier la prise en main et éviter une courbe d'apprentissage abrupte. | Configuration via configuration.nix + callPackage. |
| Structure modulaire | Séparer les configurations par type de machine et service. | Arborescence claire et maintenable. |
**callPackage pour les modules** |
Rendre les modules autonomes, portables et réutilisables. | Chaque module est un paquetage Nix indépendant. |
**Séparation user-profiles/ et users/** |
Distinguer les rôles génériques (ex: admin) des utilisateurs concrets (ex: xavier). |
Flexibilité pour appliquer des profils à plusieurs utilisateurs. |
**Script deploy.sh** |
Automatiser le déploiement sur les machines existantes. | Clone/mise à jour du dépôt + nixos-rebuild switch. |
**Script create-lxc-nixos.sh** |
Automatiser la création de conteneurs LXC sous Proxmox. | Conteneur prêt à l'emploi avec configuration initiale. |
Configuration initiale (initial-configuration.nix) |
Préparer un conteneur LXC pour qu'il puisse se mettre à jour via Git. | Conteneurs auto-suffisants. |
**Gestion des secrets avec agenix** |
Chiffrer les secrets (mots de passe, clés) pour un stockage sécurisé. | Sécurité renforcée pour les données sensibles. |
Conteneurs LXC non privilégés (--unprivileged 0) |
NixOS a besoin de privilèges pour fonctionner correctement. | Conteneurs fonctionnels avec NixOS. |
| Support IPv4, IPv6, VLANs | La cible finale est IPv6 first, voire IPv6 only. | Gestion du plan IP à concevoir. |
📂 Arborescences de Fichiers
Structure du dépôt Git
nixos-infra/
├── configuration.nix # Point d'entrée principal
├── README.md
│
├── hosts/ # Configurations par machine
│ ├── servers/ # Serveurs (hyperviseurs, VMs, LXCs)
│ │ ├── pve01/ # Hyperviseur 1
│ │ │ └── configuration.nix
│ │ ├── pve02/ # Hyperviseur 2
│ │ │ └── configuration.nix
│ │ ├── dns01/ # Conteneur LXC pour DNS (master)
│ │ │ └── configuration.nix
│ │ ├── dns02/ # Conteneur LXC pour DNS (slave)
│ │ │ └── configuration.nix
│ │ ├── gitea01/ # Conteneur LXC pour Gitea
│ │ │ └── configuration.nix
│ │ └── vaultwarden/ # Conteneur LXC pour Vaultwarden
│ │ └── configuration.nix
│ │ └── rp01/ # Conteneur LXC reverse proxy
│ │ └── configuration.nix
│ │
│ └── workstations/ # Stations de travail
│ ├── sting/ # Station de Xavier (admin, dev, mao)
│ │ └── configuration.nix
│ ├── PC-FRIDA/ # Station de Frida (bureautique)
│ │ └── configuration.nix
│ └── gaia/ # Portable de Xavier (MAO)
│ └── configuration.nix
│
├── modules/ # Modules autonomes
│ ├── machine-types/ # Types de machines
│ │ ├── hypervisor.nix # Module pour hyperviseurs
│ │ ├── vm.nix # Module pour VMs
│ │ ├── lxc.nix # Module pour conteneurs LXC
│ │ └── workstation.nix # Module pour stations de travail
│ │
│ ├── services/ # Services
│ │ ├── dns/
│ │ │ ├── default.nix # Implémentation
│ │ │ └── options.nix # Options exposées
│ │ ├── gitea/
│ │ │ └── default.nix
│ │ ├── password-manager/
│ │ │ └── default.nix
│ │ ├── reverse-proxy/
│ │ │ └── default.nix
│ │ └── ...
│ │
│ └── user-profiles/ # Profils utilisateurs (rôles)
│ ├── admin.nix # Profil administrateur
│ ├── dev.nix # Profil développeur
│ ├── mao.nix # Profil MAO
│ └── standard.nix # Profil standard
│
├── users/ # Utilisateurs concrets
│ ├── root/
│ │ └── configuration.nix
│ ├── xavier/
│ │ └── configuration.nix
│ ├── frida/
│ │ └── configuration.nix
│ └── guest/
│ └── configuration.nix
│
├── scripts/ # Scripts utilitaires
│ ├── deploy.sh # Déploiement pour machines existantes
│ ├── create-lxc-nixos.sh # Création de conteneurs LXC sous Proxmox
│ └── initial-configuration.nix # Configuration initiale pour nouveaux conteneurs
│
├── secrets/ # Secrets (exclus de Git)
│ └── .gitignore
│
└── overlays/ # Overlays pour paquets personnalisés
└── custom-pkgs.nix
🖥️ Profils de Machines et Services
Profils de Machines
| Profil | Description | Fichier | Utilisation |
|---|---|---|---|
hypervisor |
Configuration commune aux hyperviseurs (KVM, libvirtd, etc.). | modules/machine-types/hypervisor.nix |
Hyperviseurs Proxmox. |
vm |
Configuration commune aux machines virtuelles. | modules/machine-types/vm.nix |
VMs sous Proxmox. |
lxc |
Configuration commune aux conteneurs LXC. | modules/machine-types/lxc.nix |
Conteneurs LXC sous Proxmox. |
workstation |
Configuration commune aux stations de travail. | modules/machine-types/workstation.nix |
Stations de développement, MAO, bureautique. |
Profils Utilisateurs
| Profil | Description | Fichier |
|---|---|---|
admin |
Accès administrateur (sudo, gestion des services). | modules/user-profiles/admin.nix |
dev |
Environnement de développement (outils, permissions). | modules/user-profiles/dev.nix |
mao |
Configuration pour la musique assistée par ordinateur. | modules/user-profiles/mao.nix |
standard |
Profil utilisateur standard (accès basique). | modules/user-profiles/standard.nix |
📋 Tableaux de Référence
1. Liste des Machines
| Nom | Type de Machine | Services | IPv4 | Token IPv6 |
|---|---|---|---|---|
| pve01 | Hyperviseur | Proxmox | ||
| pve02 | Hyperviseur | Proxmox | ||
| dns01 | Conteneur LXC | DNS | ||
| gitea01 | Conteneur LXC | Gitea | ||
| vault01 | Conteneur LXC | Vaultwarden | ||
| sting | Station de travail | |||
| marley | Station de travail |
2. Liste des profils utilisateurs
| Nom | Rôle |
|---|---|
admin |
Superutilisateur |
dev |
Développeur |
standard |
Web & bureautique |
guest |
Invité |
3. Liste des Utilisateurs
| Nom | Rôle | Accès SSH |
|---|---|---|
| root | Superutilisateur | ❌ |
| xavier | Utilisateur principal | ✅ |
| frida | Utilisateur | ✅ |
| guest | Invité | ❌ |
3. Liaisons Utilisateur/Machine/Profil
| Utilisateur | Machine | Profils Appliqués | Rôle |
|---|---|---|---|
| root | Toutes | - | Superutilisateur |
| xavier | Toutes | admin |
Développement + administration |
| xavier | sting | admin, dev |
Gestion des hyperviseurs |
| frida | marley | standard |
Développement |
| guest | aucune | guest |
Utilisateur invité |
🔄 Workflow de Déploiement
Pour les conteneurs LXC (Proxmox)
- Créer le conteneur :
- Utiliser
create-lxc-nixos.shpour créer un conteneur à partir du template NixOS. - Le script installe la configuration initiale (
initial-configuration.nix).
- Déployer la configuration finale :
- Le script
deploy.shest exécuté automatiquement pour appliquer la configuration spécifique au conteneur (ex:hosts/servers/dns01/configuration.nix).
- Mettre à jour :
git pulldans/etc/nixos-infra+nixos-rebuild switch.
Pour les stations de travail et hyperviseurs
- Cloner le dépôt :
git clone https://github.com/xlagraula/nixos-infra.git /etc/nixos-infra
- Lier la configuration :
ln -s /etc/nixos-infra/hosts/workstations/dev-xavier/configuration.nix /etc/nixos/configuration.nix
- Appliquer la configuration :
sudo nixos-rebuild switch
🔐 Gestion des Secrets
- Outil :
agenix(recommandé) ousops-nix. - Processus :
- Chiffrer les secrets avec
age:
echo "mon-secret" | age -r age1... -o secrets/bitwarden/password.age- Intégrer dans la configuration :
age.secrets.bitwarden-password = { path = ./secrets/bitwarden/password.age; mode = "600"; };- Ne jamais commiter les secrets en clair (ajouter
secrets/à.gitignore).
- Chiffrer les secrets avec
📅 Feuille de Route
| Étape | Description | Statut | Priorité |
|---|---|---|---|
| Tester le template LXC NixOS | Vérifier que le template fonctionne sous Proxmox. | ⬜ | ⭐⭐⭐ |
Finaliser create-lxc-nixos.sh |
Tester la création d'un conteneur LXC. | ⬜ | ⭐⭐⭐ |
| Écrire le module DNS | Module pour le service DNS (Bind). | ⬜ | ⭐⭐⭐ |
Configurer agenix |
Chiffrer les premiers secrets. | ⬜ | ⭐⭐ |
| Documenter le processus | README.md pour expliquer le déploiement. |
⬜ | ⭐⭐ |
| Automatiser avec Ansible | Playbook pour créer plusieurs conteneurs. | ⬜ | ⭐ |
| Intégrer un CI/CD | Tester les configurations avant déploiement. | ⬜ | ⭐ |
💡 Notes et Bonnes Pratiques
- Nommage :
- Utilisez des noms explicites pour les machines (ex:
dns01,gitea01). - Pour les conteneurs LXC, préférez des noms courts et descriptifs.
- Utilisez des noms explicites pour les machines (ex:
- Sécurité :
- Désactivez l'accès root en SSH une fois le déploiement terminé.
- Utilisez des clés SSH pour l'authentification.
- Maintenance :
- Mettez à jour régulièrement
nixpkgs(nix-channel --update). - Documentez les changements dans le
CHANGELOG.md.
- Mettez à jour régulièrement
- Sauvegardes :
- Sauvegardez les configurations (
/etc/nixos-infra) et les secrets (secrets/). - Pour les conteneurs LXC sous Proxmox, utilisez les sauvegardes Proxmox.
- Sauvegardez les configurations (
📚 Ressources Utiles
- NixOS Manual
- Nix Flakes (pour référence future)
- Agenix pour les secrets
- Proxmox + LXC Documentation
- Exemple de dépôt NixOS Infrastructure
Languages
Nix
63.6%
Shell
36.4%