From 10399460f41873a67cb39baa6d6f5c5c23dfc342 Mon Sep 17 00:00:00 2001 From: Xavier Lagraula Date: Tue, 28 Apr 2026 23:06:11 +0200 Subject: [PATCH] Init Nix files tree structure according to canvas in README.md. README.md was initialized using Le Chat and needs be reviewed, amended. --- .gitignore | 2 + README.md | 333 +++++++++++++++++- nixos-infra.code-workspace | 8 + nixos-infra/README.md | 0 nixos-infra/configuration.nix | 0 .../hosts/servers/dns01/configuration.nix | 0 .../hosts/servers/dns02/configuration.nix | 0 .../hosts/servers/gitea01/configuration.nix | 0 .../hosts/servers/pve01/configuration.nix | 0 .../hosts/servers/pve02/configuration.nix | 0 .../hosts/servers/vault01/configuration.nix | 0 .../workstations/PC-FRIDA/configuration.nix | 0 .../hosts/workstations/gaia/configuration.nix | 0 .../workstations/sting/configuration.nix | 0 .../modules/machine-types/hypervisor.nix | 0 nixos-infra/modules/machine-types/lxc.nix | 0 nixos-infra/modules/machine-types/vm.nix | 0 .../modules/machine-types/workstation.nix | 0 nixos-infra/modules/services/dns/default.nix | 0 nixos-infra/modules/services/dns/options.nix | 0 .../modules/services/gitea/default.nix | 0 .../modules/services/vaultwarden/default.nix | 0 nixos-infra/modules/user-profiles/admin.nix | 0 nixos-infra/modules/user-profiles/dev.nix | 0 nixos-infra/modules/user-profiles/guest.nix | 0 nixos-infra/modules/user-profiles/mao.nix | 0 .../modules/user-profiles/standard.nix | 0 nixos-infra/overlays/custom-pkgs.nix | 0 nixos-infra/scripts/create-lxc-nixos.sh | 0 nixos-infra/scripts/deploy.sh | 0 nixos-infra/scripts/initial-configuration.nix | 0 nixos-infra/secrets/.gitignore | 0 nixos-infra/users/frida/configuration.nix | 0 nixos-infra/users/guest/configuration.nix | 0 nixos-infra/users/root/configuration.nix | 0 nixos-infra/users/xavier/configuration.nix | 0 36 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 nixos-infra.code-workspace create mode 100644 nixos-infra/README.md create mode 100644 nixos-infra/configuration.nix create mode 100644 nixos-infra/hosts/servers/dns01/configuration.nix create mode 100644 nixos-infra/hosts/servers/dns02/configuration.nix create mode 100644 nixos-infra/hosts/servers/gitea01/configuration.nix create mode 100644 nixos-infra/hosts/servers/pve01/configuration.nix create mode 100644 nixos-infra/hosts/servers/pve02/configuration.nix create mode 100644 nixos-infra/hosts/servers/vault01/configuration.nix create mode 100644 nixos-infra/hosts/workstations/PC-FRIDA/configuration.nix create mode 100644 nixos-infra/hosts/workstations/gaia/configuration.nix create mode 100644 nixos-infra/hosts/workstations/sting/configuration.nix create mode 100644 nixos-infra/modules/machine-types/hypervisor.nix create mode 100644 nixos-infra/modules/machine-types/lxc.nix create mode 100644 nixos-infra/modules/machine-types/vm.nix create mode 100644 nixos-infra/modules/machine-types/workstation.nix create mode 100644 nixos-infra/modules/services/dns/default.nix create mode 100644 nixos-infra/modules/services/dns/options.nix create mode 100644 nixos-infra/modules/services/gitea/default.nix create mode 100644 nixos-infra/modules/services/vaultwarden/default.nix create mode 100644 nixos-infra/modules/user-profiles/admin.nix create mode 100644 nixos-infra/modules/user-profiles/dev.nix create mode 100644 nixos-infra/modules/user-profiles/guest.nix create mode 100644 nixos-infra/modules/user-profiles/mao.nix create mode 100644 nixos-infra/modules/user-profiles/standard.nix create mode 100644 nixos-infra/overlays/custom-pkgs.nix create mode 100644 nixos-infra/scripts/create-lxc-nixos.sh create mode 100644 nixos-infra/scripts/deploy.sh create mode 100644 nixos-infra/scripts/initial-configuration.nix create mode 100644 nixos-infra/secrets/.gitignore create mode 100644 nixos-infra/users/frida/configuration.nix create mode 100644 nixos-infra/users/guest/configuration.nix create mode 100644 nixos-infra/users/root/configuration.nix create mode 100644 nixos-infra/users/xavier/configuration.nix diff --git a/.gitignore b/.gitignore index 05f855f..c528b36 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,5 @@ dist # Built Visual Studio Code Extensions *.vsix +# Répertoire des secrets gérés par sops-nix +secrets/* \ No newline at end of file diff --git a/README.md b/README.md index b9d762b..4b86f9f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,333 @@ -# nixos-infra +# 🏗️ **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** + +```bash +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`). +2. **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`). +3. **Mettre à jour** : + - `git pull` dans `/etc/nixos-infra` + `nixos-rebuild switch`. + +### **Pour les stations de travail et hyperviseurs** + +1. **Cloner le dépôt** : + ```bash + git clone https://github.com/xlagraula/nixos-infra.git /etc/nixos-infra + ``` +2. **Lier la configuration** : + ```bash + ln -s /etc/nixos-infra/hosts/workstations/dev-xavier/configuration.nix /etc/nixos/configuration.nix + ``` +3. **Appliquer la configuration** : + ```bash + sudo nixos-rebuild switch + ``` + +--- + +--- + +## **🔐 Gestion des Secrets** + +- **Outil** : `agenix` (recommandé) ou `sops-nix`. +- **Processus** : + 1. Chiffrer les secrets avec `age` : + ```bash + echo "mon-secret" | age -r age1... -o secrets/bitwarden/password.age + ``` + 2. Intégrer dans la configuration : + ```nix + age.secrets.bitwarden-password = { + path = ./secrets/bitwarden/password.age; + mode = "600"; + }; + ``` + 3. **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** + +- [NixOS Manual](https://nixos.org/manual/) +- [Nix Flakes (pour référence future)](https://nixos.wiki/wiki/Flakes) +- [Agenix pour les secrets](https://github.com/ryantm/agenix) +- [Proxmox + LXC Documentation](https://pve.proxmox.com/wiki/Linear_Container) +- [Exemple de dépôt NixOS Infrastructure](https://github.com/NixOS/nixos-infrastructure) + +--- + +**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) ? \ No newline at end of file diff --git a/nixos-infra.code-workspace b/nixos-infra.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/nixos-infra.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/nixos-infra/README.md b/nixos-infra/README.md new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/configuration.nix b/nixos-infra/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/servers/dns01/configuration.nix b/nixos-infra/hosts/servers/dns01/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/servers/dns02/configuration.nix b/nixos-infra/hosts/servers/dns02/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/servers/gitea01/configuration.nix b/nixos-infra/hosts/servers/gitea01/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/servers/pve01/configuration.nix b/nixos-infra/hosts/servers/pve01/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/servers/pve02/configuration.nix b/nixos-infra/hosts/servers/pve02/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/servers/vault01/configuration.nix b/nixos-infra/hosts/servers/vault01/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/workstations/PC-FRIDA/configuration.nix b/nixos-infra/hosts/workstations/PC-FRIDA/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/workstations/gaia/configuration.nix b/nixos-infra/hosts/workstations/gaia/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/hosts/workstations/sting/configuration.nix b/nixos-infra/hosts/workstations/sting/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/machine-types/hypervisor.nix b/nixos-infra/modules/machine-types/hypervisor.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/machine-types/lxc.nix b/nixos-infra/modules/machine-types/lxc.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/machine-types/vm.nix b/nixos-infra/modules/machine-types/vm.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/machine-types/workstation.nix b/nixos-infra/modules/machine-types/workstation.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/services/dns/default.nix b/nixos-infra/modules/services/dns/default.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/services/dns/options.nix b/nixos-infra/modules/services/dns/options.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/services/gitea/default.nix b/nixos-infra/modules/services/gitea/default.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/services/vaultwarden/default.nix b/nixos-infra/modules/services/vaultwarden/default.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/user-profiles/admin.nix b/nixos-infra/modules/user-profiles/admin.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/user-profiles/dev.nix b/nixos-infra/modules/user-profiles/dev.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/user-profiles/guest.nix b/nixos-infra/modules/user-profiles/guest.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/user-profiles/mao.nix b/nixos-infra/modules/user-profiles/mao.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/modules/user-profiles/standard.nix b/nixos-infra/modules/user-profiles/standard.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/overlays/custom-pkgs.nix b/nixos-infra/overlays/custom-pkgs.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/scripts/create-lxc-nixos.sh b/nixos-infra/scripts/create-lxc-nixos.sh new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/scripts/deploy.sh b/nixos-infra/scripts/deploy.sh new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/scripts/initial-configuration.nix b/nixos-infra/scripts/initial-configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/secrets/.gitignore b/nixos-infra/secrets/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/users/frida/configuration.nix b/nixos-infra/users/frida/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/users/guest/configuration.nix b/nixos-infra/users/guest/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/users/root/configuration.nix b/nixos-infra/users/root/configuration.nix new file mode 100644 index 0000000..e69de29 diff --git a/nixos-infra/users/xavier/configuration.nix b/nixos-infra/users/xavier/configuration.nix new file mode 100644 index 0000000..e69de29