talas-group/04_INFRA_DEPLOIEMENT/Architecture_Serveurs/ARCHITECTURE_INFRA.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

280 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Architecture Infrastructure Talas
> Topologie des serveurs, réseau, stockage et services.
> Infrastructure 100% self-hosted — aucune dépendance cloud.
> Source : [[12_DOCUMENTATION/ANALYSE_PROJET_MARS_2026]] §5
> Dernière mise à jour : 27 mars 2026.
---
## Vue d'ensemble
```
Internet (fibre Orange 1 Gbps + 5G backup)
|
[WireGuard VPN]
|
┌───────────────┴───────────────┐
| |
R720 #1 (PRODUCTION) R720 #2 (DATA + BACKUP)
──────────────────── ─────────────────────────
HAProxy (reverse proxy MinIO (stockage audio/fichiers)
+ TLS + Coraza WAF) PostgreSQL replica (HDD 15K)
Veza Backend (Go) x2 Elasticsearch
Veza Stream Server (Rust) x2 ClamAV (antivirus)
Veza Frontend (React) x2 Prometheus + Grafana
PostgreSQL primary (SSD) Alertmanager
Redis (SSD) Zabbix
RabbitMQ Backups PITR
Hyperswitch (paiements) Kibana
| |
└──────── 10 GbE ───────────────┘
(réplication PG, accès MinIO,
transferts de backup)
```
Flux réseau entrant :
```
Internet → Fibre Orange → WireGuard/port forward → HAProxy (TLS + WAF) → services
```
### Diagramme Mermaid (pour rendu web / Logseq)
```mermaid
graph TB
Internet["🌐 Internet<br/>Fibre Orange 1 Gbps + 5G backup"]
WG["WireGuard VPN"]
Internet --> WG
subgraph R720_1["R720 #1 — PRODUCTION"]
HAProxy["HAProxy<br/>TLS + Coraza WAF"]
Backend["Veza Backend Go x2"]
Stream["Veza Stream Rust x2"]
Frontend["Veza Frontend React x2"]
PG1["PostgreSQL primary<br/>⚡ SSD"]
Redis["Redis<br/>⚡ SSD"]
RMQ["RabbitMQ"]
HS["Hyperswitch"]
HAProxy --> Backend
HAProxy --> Stream
HAProxy --> Frontend
Backend --> PG1
Backend --> Redis
Backend --> RMQ
Stream --> RMQ
end
subgraph R720_2["R720 #2 — DATA + BACKUP"]
MinIO["MinIO S3"]
PG2["PostgreSQL replica<br/>HDD 15K"]
ES["Elasticsearch"]
ClamAV["ClamAV"]
Prom["Prometheus + Grafana"]
Alert["Alertmanager"]
Zabbix["Zabbix"]
PITR["Backups PITR<br/>HDD 1.8 To"]
Kibana["Kibana"]
end
WG --> HAProxy
R720_1 <-->|"10 GbE<br/>réplication PG, MinIO, backups"| R720_2
PG1 -->|"réplication"| PG2
Backend -->|"stockage fichiers"| MinIO
Backend -->|"scan uploads"| ClamAV
Backend -->|"recherche"| ES
```
Pas de Cloudflare, pas de Tailscale, pas de tiers. Cohérent avec les valeurs Talas (indépendance, transparence, contrôle total).
---
## Matériel
### Serveurs : 2x Dell PowerEdge R720
| Spécification | Par serveur | Total |
|---------------|-------------|-------|
| CPU | 2x Intel Xeon E5-2670 @ 2.60 GHz (8C/16T) | 32 cœurs / 64 threads |
| RAM | 16x 24 Go DDR3 1600 MHz = 384 Go | 768 Go |
| Baies disques | 16 baies 2.5" | 32 baies |
| Réseau | Carte PCIe 10 GbE | Liaison 10 GbE inter-serveurs |
Architecture Sandy Bridge-EP (2012). Performant mais consommation élevée (~400W par serveur en charge).
### Stockage
| Type | Capacités disponibles | Performance | Usage |
|------|-----------------------|-------------|-------|
| SSD (réserve) | Jusqu'à 1 To (anciens) | Excellent en IOPS aléatoires | PostgreSQL primary, Redis |
| HDD 15K RPM 2.5" | 146 Go, 300 Go, 600 Go, 900 Go, 1.8 To | Meilleur HDD pour I/O séquentielles | Système, replicas, stockage |
~100 disques d'occasion disponibles. Taux de panne estimé : 10-15%/an → ZFS mirror obligatoire, SMART monitoring (`smartctl -a`) systématique.
### Réseau
| Composant | Débit | Usage |
|-----------|-------|-------|
| Fibre Orange | 1 Gbps descendant | Trafic Internet |
| 5G backup | Variable | Failover |
| 10 GbE inter-serveurs | 10 Gbps | Réplication PG, MinIO, backups |
| LAN | 1-2.5 Gbps | Équipements locaux |
---
## R720 #1 — Production
Services applicatifs et bases de données primaires.
| Service | Rôle | Stockage |
|---------|------|----------|
| **HAProxy** | Reverse proxy, terminaison TLS (Let's Encrypt), Coraza WAF | HDD (logs) |
| **Veza Backend** (Go) x2 | API REST, 500+ endpoints, blue-green deployment | — |
| **Veza Stream Server** (Rust) x2 | Streaming HLS adaptatif, WebSocket, transcoding | — |
| **Veza Frontend** (React) x2 | SPA servie par Nginx | — |
| **PostgreSQL primary** | Base de données principale, 60+ tables | **SSD** (IOPS critiques) |
| **Redis** | Sessions, cache HTTP, rate limiting, CSRF tokens | **SSD** (persistance rapide) |
| **RabbitMQ** | Message broker (événements track.uploaded, etc.) | HDD |
| **Hyperswitch** | Orchestrateur de paiements | HDD |
Blue-green deployment : deux instances de chaque service applicatif. HAProxy bascule entre les deux lors des mises à jour (zéro downtime).
---
## R720 #2 — Data + Backup
Stockage, réplication, monitoring et sauvegardes.
| Service | Rôle | Stockage |
|---------|------|----------|
| **MinIO** | Stockage objet S3-compatible (audio, avatars, exports) | HDD 1.8 To (pool ZFS mirror) |
| **PostgreSQL replica** | Réplique en lecture de la base primaire | HDD 15K 600-900 Go |
| **Elasticsearch** | Recherche full-text (pistes, users, playlists) | HDD 15K 600-900 Go |
| **ClamAV** | Scan antivirus des fichiers uploadés | HDD |
| **Prometheus** | Collecte de métriques (scrape /metrics) | HDD |
| **Grafana** | Dashboards de monitoring | HDD |
| **Alertmanager** | Routage d'alertes | HDD |
| **Zabbix** | Monitoring d'infrastructure (alertes → Matrix, Jira) | HDD |
| **Kibana** | Visualisation des logs Elasticsearch | HDD |
| **Backups PITR** | Archives WAL PostgreSQL, snapshots ZFS | HDD 1.8 To |
---
## Allocation stockage
| Type de disque | Serveur | Usage | Justification |
|----------------|---------|-------|---------------|
| SSD (priorité) | R720 #1 | PostgreSQL primary + WAL | IOPS aléatoires critiques pour les requêtes |
| SSD | R720 #1 | Redis (RDB + AOF) | Persistance rapide, accès aléatoire |
| HDD 15K (146-300 Go) | R720 #1 | Système, logs, swap | I/O séquentielles, pas critique |
| HDD 15K (600-900 Go) | R720 #2 | PostgreSQL replica, Elasticsearch | Bonnes IOPS pour du HDD, lectures séquentielles |
| HDD (1.8 To) | R720 #2 | MinIO (pool ZFS mirror) | Volume > performance, stockage audio |
| HDD (1.8 To) | R720 #2 | Backups PITR, snapshots ZFS | Volume, écritures séquentielles |
---
## Stockage ZFS — Mirror vdevs
Choix retenu : **pools en mirror** (paires de 2 disques), pas RAIDZ2.
| Critère | Mirror (retenu) | RAIDZ2 (alternative) |
|---------|-----------------|----------------------|
| Tolérance panne | 1 disque par paire | 2 disques par vdev |
| Performance lecture | Excellente (striped mirrors) | Bonne |
| Performance écriture | Bonne | Moyenne (calcul parité) |
| Perte capacité | 50% | ~33% |
| Temps de resilver | **Rapide** (1 disque à copier) | Lent (tout le vdev) |
| Adapté aux disques d'occasion | **Oui** (resilver rapide = moins de stress) | Risque (resilver long) |
Avec ~100 disques d'occasion et un taux de panne de 10-15%/an, le mirror est clairement supérieur : le resilver rapide limite la fenêtre de vulnérabilité.
---
## Sécurité réseau
### Couche d'accès
| Composant | Rôle |
|-----------|------|
| **WireGuard** | VPN d'accès aux serveurs. Exposition sécurisée des services sur Internet. |
| **HAProxy** | Point d'entrée unique. Terminaison TLS. Routage vers les services. |
| **Coraza WAF** | Filtrage applicatif (OWASP CRS). Protection contre SQLi, XSS, path traversal. |
| **Let's Encrypt** | Certificats TLS automatiques via certbot. |
### Couche d'administration
| Composant | Rôle |
|-----------|------|
| **JumpServer** | Bastion SSH/RDP. Interface web, audit vidéo, RBAC, MFA. Point d'accès unique pour l'administration. |
| **Hashicorp Vault** | Gestion des secrets (clés SSH, tokens, mots de passe). |
### Monitoring et logs
| Composant | Rôle |
|-----------|------|
| **ELK Stack** | Filebeat → Elasticsearch → Kibana. Centralisation et analyse des logs. |
| **Zabbix** | Monitoring infrastructure (CPU, RAM, disques, réseau). Alertes multi-canal. |
| **Prometheus + Grafana** | Métriques applicatives (endpoints /metrics des services Veza). |
| **Alertmanager** | Routage d'alertes Prometheus vers les canaux configurés. |
---
## Automatisation
### Ansible (46+ rôles)
Rôles regroupés par fonction :
| Catégorie | Rôles |
|-----------|-------|
| **Base système** | docker, crontab, rsyslog, ssh-keygen-and-store |
| **Bases de données** | postgres_client, pg-wal-pull |
| **Reverse proxy** | haproxy (+ Coraza WAF) |
| **Stockage** | minio, zfs |
| **Monitoring** | zabbix_server, filebeat, elasticsearch, prometheus |
| **Sécurité** | jumpserver, vault |
| **Communication** | element-web (Matrix) |
| **CI/CD** | gerrit, git_generic_deploy_files |
| **Conteneurs** | incus, docker |
### Conteneurisation
- **Docker** : services applicatifs (PostgreSQL, Redis, RabbitMQ, ClamAV, MinIO, Elasticsearch)
- **Incus** : machines complètes quand Docker n'est pas adapté (ZFS pool backing)
- **CI/CD prévu** : Woodpecker CI (self-hosted, compatible Gitea/Forgejo)
---
## Coûts d'exploitation
| Poste | Calcul | Coût mensuel |
|-------|--------|-------------|
| Électricité serveurs | 2x R720 ~400W chacun = 800W | |
| Équipement réseau | Switch, routeur ~50W | |
| **Total puissance** | **~850W en continu** | |
| Consommation mensuelle | 850W × 24h × 30j = 612 kWh | |
| Électricité | 612 kWh × 0.22 EUR/kWh | **~135 EUR** |
| Internet fibre Orange + 5G | | **~40-50 EUR** |
| Nom de domaine | ~12 EUR/an | **~1 EUR** |
| **TOTAL** | | **~180 EUR/mois** |
### Comparaison cloud équivalent
| Poste cloud | Coût estimé |
|-------------|-------------|
| 2 serveurs dédiés 384 Go RAM (Hetzner) | 400-600 EUR/mois |
| Managed PostgreSQL + Redis + Elasticsearch (AWS) | 500-800 EUR/mois |
| S3 + monitoring + CI | 100-200 EUR/mois |
| **Total cloud** | **800-1500+ EUR/mois** |
**Économie self-hosted : 620-1320 EUR/mois**, soit 7 500-15 800 EUR/an.
---
## Voir aussi
- [[04_INFRA_DEPLOIEMENT/CI_CD/PROCEDURES_DEPLOIEMENT]] — Procédures de déploiement dev→staging→prod
- [[03_APPS_&_SERVICES/ARCHITECTURE_VEZA]] — Architecture applicative Veza
- [[03_APPS_&_SERVICES/CONFIGURATION_ENVIRONNEMENT]] — Variables d'environnement et Docker
- [[00_META/Glossaire/GLOSSAIRE_TALAS]] — Glossaire des termes techniques
- [[12_DOCUMENTATION/ANALYSE_PROJET_MARS_2026]] — Analyse complète dont ce document est issu