talas-group/04_INFRA_DEPLOIEMENT/Architecture_Serveurs/ARCHITECTURE_INFRA.md

281 lines
11 KiB
Markdown
Raw Permalink Normal View History

# 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