Init Nix files tree structure according to canvas in README.md.

README.md was initialized using Le Chat and needs be reviewed, amended.
This commit is contained in:
2026-04-28 23:06:11 +02:00
parent 7aa8aea393
commit 10399460f4
36 changed files with 342 additions and 1 deletions
+2
View File
@@ -158,3 +158,5 @@ dist
# Built Visual Studio Code Extensions
*.vsix
# Répertoire des secrets gérés par sops-nix
secrets/*
+332 -1
View File
@@ -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) ?
+8
View File
@@ -0,0 +1,8 @@
{
"folders": [
{
"path": "."
}
],
"settings": {}
}
View File
View File
View File
View File