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)
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