10399460f4
README.md was initialized using Le Chat and needs be reviewed, amended.
333 lines
16 KiB
Markdown
333 lines
16 KiB
Markdown
# đïž **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) ? |