# 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
Fibre Orange 1 Gbps + 5G backup"] WG["WireGuard VPN"] Internet --> WG subgraph R720_1["R720 #1 — PRODUCTION"] HAProxy["HAProxy
TLS + Coraza WAF"] Backend["Veza Backend Go x2"] Stream["Veza Stream Rust x2"] Frontend["Veza Frontend React x2"] PG1["PostgreSQL primary
⚡ SSD"] Redis["Redis
⚡ 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
HDD 15K"] ES["Elasticsearch"] ClamAV["ClamAV"] Prom["Prometheus + Grafana"] Alert["Alertmanager"] Zabbix["Zabbix"] PITR["Backups PITR
HDD 1.8 To"] Kibana["Kibana"] end WG --> HAProxy R720_1 <-->|"10 GbE
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