talas-group/04_INFRA_DEPLOIEMENT/Docker_Incus/README.md
senke 66471934af Initial commit: Talas Group project management & documentation
Knowledge base of ~80+ markdown files across 14 domains (00-13),
Logseq graph, hardware design files (KiCAD), infrastructure configs,
and talas-wiki static site.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 20:10:41 +02:00

96 lines
3.8 KiB
Markdown

# Conteneurisation — Docker & Incus
Ce dossier contient les fichiers de conteneurisation pour les services Talas.
## Stratégie de conteneurisation
Talas utilise **deux technologies complémentaires** selon le cas d'usage :
| Technologie | Usage | Pourquoi |
|-------------|-------|----------|
| **Docker** | Services applicatifs (bases de données, queues, outils) | Images standardisées, écosystème riche, docker-compose |
| **Incus** | Machines complètes nécessitant un OS complet | Isolation système, ZFS backing natif, meilleur pour les workloads persistants |
## Services Docker déployés
### Développement (`docker-compose.yml`)
| Service | Image | Port exposé | Usage |
|---------|-------|-------------|-------|
| `postgres` | PostgreSQL 16 | 15432 | Base de données principale |
| `redis` | Redis 7 | 16379 | Sessions, cache, rate limiting |
| `rabbitmq` | RabbitMQ 3 | 15672 / 25672 | Message broker (événements async) |
| `clamav` | ClamAV 1.4 | 13310 | Scan antivirus des uploads |
| `minio` | MinIO | 19000 | Stockage objet S3-compatible |
| `elasticsearch` | Elasticsearch | 19200 | Recherche full-text |
### Production (`docker-compose.prod.yml`)
Mêmes services avec en plus :
- **Volumes persistants** (données sur pools ZFS)
- **Limites de ressources** CPU/RAM par conteneur
- **Health checks** sur tous les services
- **Restart policy** : `unless-stopped`
- **Isolation réseau** (réseaux Docker dédiés)
- **Logging** centralisé vers Filebeat
### Images applicatives
| Service | Dockerfile dev | Dockerfile prod | Base prod |
|---------|---------------|-----------------|-----------|
| Backend Go | `veza-backend-api/Dockerfile` | `Dockerfile.production` | `scratch` (~15 Mo) |
| Stream Rust | `veza-stream-server/Dockerfile` | `Dockerfile.production` | `debian:bookworm-slim` (~100 Mo) |
| Frontend React | `apps/web/Dockerfile` | `Dockerfile.production` | `nginx:latest` (~30 Mo) |
## Incus
Incus (fork de LXD) est utilisé pour les workloads nécessitant un OS complet :
**Configuration :**
- Pool de stockage ZFS backing (`zfs create pool/incus`)
- Profils par type de workload
- Gestion des permissions via groupe `incus-admin`
- subuid/subgid configurés pour l'isolation
**Commandes courantes :**
```bash
incus launch images:debian/12 mon-conteneur # Créer
incus list # Lister
incus exec mon-conteneur -- bash # Shell
incus project create prod # Projet
incus project switch prod # Changer
```
Installation documentée dans `04_INFRA_DEPLOIEMENT/Notes_Operations/install_incus.txt`.
## Stockage et persistance
| Type de données | Stratégie | Backing |
|-----------------|-----------|---------|
| PostgreSQL (WAL + data) | Volume Docker sur **SSD** | ZFS mirror |
| Redis (RDB + AOF) | Volume Docker sur **SSD** | ZFS mirror |
| MinIO (audio, fichiers) | Volume Docker sur **HDD** | ZFS mirror pool (1.8 To) |
| Elasticsearch (indices) | Volume Docker sur **HDD 15K** | ZFS mirror |
| Backups PITR | Volume dédié sur **HDD** | ZFS snapshots |
## Rôles Ansible associés
| Rôle | Description |
|------|-------------|
| `docker` | Installation et configuration Docker |
| `minio` | Configuration MinIO S3 |
## Contenu de ce dossier
- `docker-compose.yml` : stack développement
- `docker-compose.prod.yml` : stack production
- `docker-compose.dev.yml` : services dev uniquement
- `Dockerfiles/` : fichiers Docker par service
- `incus-profiles/` : profils Incus par workload
- `volumes/` : scripts de montage et backup
## Voir aussi
- [[04_INFRA_DEPLOIEMENT/Architecture_Serveurs/ARCHITECTURE_INFRA]] — Allocation stockage et topologie
- [[04_INFRA_DEPLOIEMENT/CI_CD/PROCEDURES_DEPLOIEMENT]] — Procédures de déploiement
- [[03_APPS_&_SERVICES/CONFIGURATION_ENVIRONNEMENT]] — Variables d'environnement Docker