Skip to content

đŸ—ïž Architecture ​

Cette page dĂ©crit comment les serveurs se rĂ©partissent les services, comment une requĂȘte atteint un service et comment les utilisateurs s’authentifient. Le matĂ©riel est dĂ©taillĂ© dans l’inventaire, l’adressage dans la page RĂ©seau.

đŸ–„ïž HĂŽtes et rĂŽles ​

HĂŽteNatureRĂŽle
LuxembourgMachine virtuelle Oracle Cloud, adresse publiqueServices qui doivent rester joignables mĂȘme si le site principal est coupĂ© (VPN NetBird, page d’état, supervision), traduction (Tolgee) et quelques services du domaine distinct dera.page
BruxellesServeur TrueNAS du site principalLa majorité des services : données, médias, domotique, identité (Zitadel), messagerie Matrix, outils internes
PristinaMachine virtuelle DebianCible de sauvegarde : reçoit une réplication ZFS de Bruxelles
ParisOrdinateur de bureauPoste de travail, et seconde cible de réplication de Bruxelles

Sur Bruxelles, les services viennent de deux sources : les applications du catalogue TrueNAS (TrueNAS Apps), installées depuis son interface, et les piles Docker Compose déployées par Ansible depuis le dépÎt Infrastructure. Sur Luxembourg, tout est déployé par Ansible. Le déploiement détaille ce fonctionnement.

Ce site et le portfolio sont hébergés à part, sur GitHub Pages (voir Ce site).

đŸ›Łïž Parcours d’une requĂȘte ​

Chaque hĂŽte a son propre Traefik, seul conteneur Ă  publier les ports web (80 et 443). Traefik termine le TLS, applique les protections communes, puis transmet la requĂȘte au conteneur du service par un rĂ©seau Docker.

  • Services publics : leur nom DNS pointe vers l’adresse publique de l’hĂŽte (voir DNS). Bruxelles est joint par la connexion fibre du site principal, Luxembourg directement.
  • Sites derriĂšre Cloudflare : minitrainstore.fr et guenola-sahut.fr passent par le proxy de Cloudflare ; Traefik n’accepte pour ces sites que les connexions venant de Cloudflare (voir SĂ©curitĂ©).
  • Services privĂ©s : leur nom DNS pointe vers une adresse du rĂ©seau local, et leur route Traefik n’accepte que le rĂ©seau local et le VPN (voir SĂ©curitĂ©). Depuis l’extĂ©rieur, on y accĂšde par le VPN.
  • Trafic interne : certains services sont joints sans passer par Internet, par exemple la supervision qui interroge Traefik sur un point d’entrĂ©e rĂ©servĂ© au rĂ©seau Docker (voir Supervision).

🔐 VPN NetBird ​

NetBird relie les appareils et les serveurs dans un rĂ©seau maillĂ© chiffrĂ© (WireGuard). Son serveur de gestion, de signalisation et de relais tourne sur Luxembourg, joignable publiquement pour que les appareils puissent s’y connecter ; il a son propre fournisseur d’identitĂ© intĂ©grĂ©. Une fois connectĂ©, un appareil atteint les services privĂ©s des deux hĂŽtes comme s’il Ă©tait sur le rĂ©seau local. Les serveurs l’utilisent aussi entre eux, par exemple pour la supervision de Bruxelles depuis Luxembourg. La plage d’adresses du VPN est donnĂ©e dans la page RĂ©seau.

💬 FĂ©dĂ©ration Matrix ​

Le serveur Matrix (Synapse) de anneraud.fr tourne sur Bruxelles. Les identifiants sont de la forme @nom:anneraud.fr : le domaine nu anneraud.fr publie la dĂ©lĂ©gation Matrix (/.well-known/matrix) et transmet les requĂȘtes de fĂ©dĂ©ration Ă  Synapse, sur le port 443 ; le reste du domaine nu redirige vers www.anneraud.fr. L’API d’administration de Synapse n’est accessible que depuis le rĂ©seau local ou le VPN.

đŸȘȘ Authentification unique ​

Zitadel, Ă  l’adresse authentification.anneraud.fr, est le fournisseur d’identitĂ© de l’infrastructure. Les services s’y raccordent en OpenID Connect (OIDC) : l’utilisateur se connecte une fois sur Zitadel, puis accĂšde aux services qui lui sont ouverts.

Les applications OIDC ne sont pas créées à la main : elles sont décrites dans opentofu/zitadel/applications.auto.tfvars et créées par OpenTofu avec le fournisseur officiel de Zitadel.

  • Chaque application dĂ©clare ses adresses de retour, ses rĂŽles et son mode d’authentification : PKCE par dĂ©faut, secret client seulement quand le service l’exige.
  • Un service dĂ©ployĂ© par Ansible provisionne son application au moment de son dĂ©ploiement (rĂŽle zitadel_applications), puis reçoit l’identifiant client dans sa configuration. Pour les services gĂ©rĂ©s hors d’Ansible, un playbook dĂ©diĂ© crĂ©e les applications et indique oĂč reporter le rĂ©sultat.
  • Les rĂŽles attribuĂ©s dans Zitadel dĂ©cident des droits dans le service (exemple : la supervision).
  • L’état d’OpenTofu est chiffrĂ© (chiffrement natif d’OpenTofu) et conservĂ© avec les autres secrets, hors du dĂ©pĂŽt public.

La supervision est la premiĂšre application raccordĂ©e de cette façon ; l’outil de dĂ©ploiement Semaphore doit suivre (voir la feuille de route).