Architecture Homelab & Systèmes
Déploiement, sécurisation et administration d'un serveur Linux de production. Une démarche d'ingénierie personnelle pour maîtriser les écosystèmes IT (Docker, API, Plan de Reprise d'Activité, Zero Trust) et créer la passerelle indispensable entre la Logistique Opérationnelle et la DSI.
1. Le Rôle du Logisticien : Créer la passerelle avec l'IT
Aujourd'hui, la Logistique et la Supply Chain ne consistent plus seulement à déplacer des palettes, mais à faire transiter de la donnée en temps réel. Lors des grands déploiements logiciels (WMS, ERP, Trackers IoT), j'ai constaté que le taux d'échec ou de retard des projets n'est presque jamais dû à la logistique pure, mais à un profond fossé de communication entre le terrain et la Direction des Systèmes d'Information (DSI).
Les opérationnels demandent des flux métiers complexes sans comprendre les contraintes techniques, et l'IT impose des restrictions de cybersécurité souvent incomprises par le terrain. Mon objectif avec ce Homelab n'est pas de devenir développeur ou SysAdmin de métier, mais de maîtriser parfaitement cette complexité "sous le capot".
En construisant, sécurisant et maintenant ma propre infrastructure serveur de A à Z (Réseaux virtuels, Reverse Proxy, Bases de données relationnelles, API), je suis en mesure, en tant que Chef de Projet, d'anticiper les verrous d'infrastructure, de challenger techniquement les prestataires, et de concevoir des architectures de flux réalistes dès la phase de cahier des charges.
2. Topologie Réseau et Architecture IT
La robustesse d'un système d'information repose sur son cloisonnement. L'intégralité du serveur est déployée via une architecture conteneurisée (Docker). Cela permet d'isoler les bases de données des applications web (Front-end) via des réseaux virtuels stricts.
J'ai modélisé ci-dessous la cartographie exacte des flux de mon infrastructure.
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#f8fafc', 'edgeLabelBackground':'#ffffff', 'tertiaryColor': '#fff'}}}%%
graph TD
%% --- Styles ---
classDef public fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
classDef vpn fill:#e0f2f1,stroke:#00695c,stroke-width:2px,stroke-dasharray: 5 5;
classDef firewall fill:#ffccbc,stroke:#bf360c,stroke-width:3px;
classDef traefik fill:#fff9c4,stroke:#fbc02d,stroke-width:2px;
classDef service fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;
classDef monitor fill:#dcedc8,stroke:#33691e,stroke-width:2px;
classDef infra fill:#cfd8dc,stroke:#455a64,stroke-width:2px;
%% --- Acteurs ---
PublicUser((Utilisateur Public)):::public
Admin((Admin via VPN)):::vpn
%% --- Pare-Feu & Host ---
subgraph SecHost [Sécurité Host]
FW_Public[Firewall Ports 80 443 Mail]:::firewall
FW_VPN[Interface Tailscale]:::firewall
CS_Agent[CrowdSec Agent]:::service
end
%% --- Infra & Réseau ---
subgraph InfraRes [Infrastructure Réseau]
Traefik[Traefik Proxy]:::traefik
AdGuard[AdGuard Home DNS]:::infra
end
%% --- Apps Publiques ---
subgraph AppPub [Docker Apps Publiques]
NC[Nextcloud AIO]:::service
Web[Site Web]:::service
MC_UI[Mailcow UI]:::service
end
%% --- Apps Privées ---
subgraph AppPriv [Docker Apps Privées]
VW[Vaultwarden]:::service
end
%% --- Monitoring ---
subgraph MonStack [Monitoring Stack]
cAd[cAdvisor]:::monitor
NodeExp[Node Exporter]:::monitor
PromVM[Prometheus VictoriaMetrics]:::monitor
Grafana[Grafana Tailscale Only]:::monitor
end
%% --- Flux Public ---
PublicUser --> FW_Public
FW_Public --> Traefik
Traefik --> NC
Traefik --> Web
Traefik --> MC_UI
%% --- Flux Admin (Tailscale) ---
Admin -.-> FW_VPN
FW_VPN -.->|HTTP:3000| Grafana
FW_VPN -.->|HTTP:Port| VW
FW_VPN -.->|HTTP:80/3000| AdGuard
FW_VPN -.->|SSH| CS_Agent
%% --- Flux Interne / Monitoring ---
cAd --> PromVM
NodeExp --> PromVM
PromVM --> Grafana
%% --- Flux DNS (Logique) ---
AdGuard -.->|DNS 53 UDP| Traefik
AdGuard -.->|DNS 53 UDP| NC
%% --- Logs Security ---
Traefik -.-> CS_Agent
NC -.-> CS_Agent
3. Gestion de la Donnée : De la DB SQL à l'API REST
Comprendre l'interaction entre une base de données et une interface métier est crucial. Dans la logistique de demain, les systèmes monolithiques disparaissent au profit d'architectures "Headless" ou micro-services communiquant par API.
La Maîtrise des API avec Directus
Pour manipuler la donnée de façon moderne, j'ai déployé Directus, une plateforme Data (BaaS - Backend as a Service). Directus vient se brancher au-dessus de mes bases de données relationnelles SQL brutes (PostgreSQL, MariaDB) et les transforme instantanément en API REST et GraphQL hautement sécurisées.
Cela me permet de simuler de véritables flux ERP/WMS : l'application n'accède jamais directement à la table SQL, elle interroge une URL (API) avec un jeton d'authentification (Token). C'est exactement l'architecture utilisée aujourd'hui par les solutions SaaS logistiques de pointe.
4. Cybersécurité : "Zero Trust" et Surveillance Active (SIEM)
L'approche "Zero Trust" part du principe qu'aucun trafic, pas même interne, ne doit être approuvé par défaut. Face à l'augmentation des cyberattaques (qui ciblent de plus en plus la Supply Chain pour paralyser les flux physiques), la sécurité de ce serveur est draconienne :
- VPN Management (Tailscale) : Le pare-feu (UFW) ferme purement et simplement le port 22 (SSH) au public. L'administration profonde du serveur ne peut se faire qu'au travers d'un tunnel WireGuard via l'IP virtuelle Tailscale.
- Intrusion Prevention System (CrowdSec) : Outil de défense collaborative remplaçant l'historique Fail2Ban. CrowdSec analyse les logs du Reverse Proxy (Traefik) en temps réel. S'il détecte des comportements malveillants (scans de ports, bruteforce), il communique avec le pare-feu Linux pour bannir l'IP au niveau réseau (L3).
- Surveillance Active et SIEM (Wazuh) : Pour la détection de menaces complexes, l'intégrité des fichiers (FIM) et la conformité réglementaire, j'ai déployé l'agent Wazuh. Il surveille les anomalies comportementales au niveau de l'OS (rootkits, escalades de privilèges) et consolide les données de sécurité, me donnant une vision digne d'un SOC (Security Operations Center).
| Domaine / Service (Anonymisé) | Réseau Interne Docker | Politique SSO (Authelia) |
|---|---|---|
| vault.[domaine].net (Vaultwarden) | proxy / database | Restricted (MFA + VPN Only) |
| api.[domaine].net (Directus Admin) | proxy / pg-data | Two-Factor (2FA) |
| cloud.[domaine].net (Nextcloud) | nextcloud-aio | Bypass (MFA Géré en natif) |
| Trafic Inconnu / Root | - | Deny (Bloqué par défaut) |
5. Plan de Reprise d'Activité (PRA) & Règle du 3-2-1
Dans le monde de la Supply Chain, perdre la base de données d'un WMS pendant 2 heures signifie paralyser un entrepôt entier, bloquer les camions à quai et subir des pertes financières colossales. La conception d'un Plan de Reprise d'Activité (PRA) robuste est donc primordiale.
Sur mon infrastructure, j'applique la norme industrielle de la Règle du 3-2-1 (3 copies des données, sur 2 supports différents, dont 1 hors site/hors ligne). Les sauvegardes sont automatisées la nuit via des tâches CRON, chiffrées, dédupliquées via BorgBackup, puis externalisées.
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#f8fafc', 'edgeLabelBackground':'#ffffff', 'tertiaryColor': '#fff'}}}%%
graph TD
%% --- SOURCES ---
S3[("Nuage Wasabi S3
")]
VPS_APP["Serveur VPS
(Nextcloud + Mails)"]
%% --- SCRIPTS ET TIMING ---
subgraph Ordonnanceur_CRON
T1["02h00 : Nextcloud AIO
(DB & Config)"]
T2["02h15 : Script S3
(Les 800 Go)"]
T3["05h00 : Script Borg
(Mailcow & /opt)"]
T4["06h00 : Sync USB
(3-2-1 Offline)"]
end
%% --- FLUX DE DONNEES ---
T1 -->|Interne AIO| NAS_AIO
T2 -->|Rclone Sync| NAS_TEMP
NAS_TEMP -->|Archivage Borg| NAS_S3
S3 -.-> T2
T3 -->|Dump Natif| NAS_MAIL
T3 -->|Borg Create| NAS_OPT
VPS_APP -.-> T3
%% Sauvegarde finale vers USB
NAS_11_TO ==>|HyperBackup| USB
T4 -.-> USB
%% --- DESTINATIONS ---
subgraph NAS_11_TO [NAS SYNOLOGY - 11 To]
direction TB
NAS_AIO[("📦 Repo Borg : AIO")]
NAS_S3[("📦 Repo Borg : S3")]
NAS_OPT[("📦 Repo Borg : /opt")]
NAS_MAIL["📂 Dossier : Mails Bruts"]
NAS_TEMP["📂 Dossier : Miroir S3"]
end
USB[("💾 Disque USB Externe
(Copie Locale)")]
%% --- STYLES ---
style S3 fill:#bbdefb,stroke:#1976d2
style NAS_11_TO fill:#f5f5f5,stroke:#333
style Ordonnanceur_CRON fill:#fff9c4,stroke:#fbc02d
style NAS_AIO fill:#c8e6c9,stroke:#2e7d32
style NAS_S3 fill:#c8e6c9,stroke:#2e7d32
style NAS_OPT fill:#c8e6c9,stroke:#2e7d32
style USB fill:#ffccbc,stroke:#e64a19,stroke-width:2px
6. Écosystème Logiciel (Self-Hosting)
L'hébergement de mes propres services (Self-Hosting) via des fichiers docker-compose.yml m'assure une souveraineté totale sur mes données. L'approche "Infrastructure as Code" (IaC) me permet de recréer ce serveur sur n'importe quel hyperviseur en quelques minutes.
Directus & BDDs
Data / APITransformation de bases SQL (Postgres, MariaDB) en API REST dynamiques. Gestion des relations et webhooks complexes.
Wazuh & CrowdSec
SecOps / SIEMPlateforme unifiée de détection des menaces (XDR), analyse d'intégrité des fichiers système et bannissement dynamique (IPS).
Nextcloud AIO
ProductivitéSuite collaborative souveraine, partage de fichiers volumineux. Sauvegardes chiffrées quotidiennes vers un Object Storage (Wasabi S3).
Vaultwarden
Sécurité CritiqueGestionnaire de mots de passe chiffré de bout en bout, hébergé derrière le réseau virtuel Tailscale.
Stack Observabilité
MonitoringSurveillance des ressources avec Uptime-Kuma, Prometheus, VictoriaMetrics et tableaux de bord Grafana temps réel.
N8N
AutomatisationOutil d'automatisation de workflows (équivalent Zapier). Connexion d'APIs et routage d'alertes vers des messageries (NTFY, Slack).