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


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