# 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