Files
nixos-infra/README.md
T
xavier 10399460f4 Init Nix files tree structure according to canvas in README.md.
README.md was initialized using Le Chat and needs be reviewed, amended.
2026-04-28 23:06:11 +02:00

16 KiB

🏗️ 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)
│   │   ├── hyperv1/            # Hyperviseur 1
│   │   │   └── configuration.nix
│   │   ├── hyperv2/            # Hyperviseur 2
│   │   │   └── configuration.nix
│   │   ├── dns01/              # Conteneur LXC pour DNS
│   │   │   └── configuration.nix
│   │   ├── gitea01/            # Conteneur LXC pour Gitea
│   │   │   └── configuration.nix
│   │   └── bitwarden/          # Conteneur LXC pour Bitwarden
│   │       └── configuration.nix
│   │
│   └── workstations/           # Stations de travail
│       ├── dev-xavier/         # Station de Xavier
│       │   └── configuration.nix
│       ├── mao-julien/         # Station MAO
│       │   └── configuration.nix
│       └── bureautique/        # Station bureautique
│           └── 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
│   │   ├── bitwarden/
│   │   │   └── 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
│   ├── admin/
│   │   └── 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 Développement,
Bureautique,
MAO,
Administration
marley Station de travail Bureautique

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)

  1. Créer le conteneur :
  • Utiliser create-lxc-nixos.sh pour créer un conteneur à partir du template NixOS.
  • Le script installe la configuration initiale (initial-configuration.nix).
  1. Déployer la configuration finale :
  • Le script deploy.sh est exécuté automatiquement pour appliquer la configuration spécifique au conteneur (ex: hosts/servers/dns01/configuration.nix).
  1. Mettre à jour :
  • git pull dans /etc/nixos-infra + nixos-rebuild switch.

Pour les stations de travail et hyperviseurs

  1. Cloner le dépôt :
 git clone https://github.com/xlagraula/nixos-infra.git /etc/nixos-infra
  1. Lier la configuration :
 ln -s /etc/nixos-infra/hosts/workstations/dev-xavier/configuration.nix /etc/nixos/configuration.nix
  1. Appliquer la configuration :
 sudo nixos-rebuild switch


🔐 Gestion des Secrets

  • Outil : agenix (recommandé) ou sops-nix.
  • Processus :
    1. Chiffrer les secrets avec age :
     echo "mon-secret" | age -r age1... -o secrets/bitwarden/password.age
    
    1. Intégrer dans la configuration :
     age.secrets.bitwarden-password = {
       path = ./secrets/bitwarden/password.age;
       mode = "600";
     };
    
    1. Ne jamais commiter les secrets en clair (ajouter secrets/ à .gitignore).


📅 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.
  • 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.
  • Sauvegardes :
    • Sauvegardez les configurations (/etc/nixos-infra) et les secrets (secrets/).
    • Pour les conteneurs LXC sous Proxmox, utilisez les sauvegardes Proxmox.


📚 Ressources Utiles


Prochaine étape :
Ce canvas peut être placé à la racine de votre dépôt sous le nom README.md ou dans un dossier docs/.
Souhaitez-vous que j'ajoute ou modifie des sections spécifiques (ex: détails sur un service, un exemple de module, ou un guide de déploiement pas à pas) ?