Passer au contenu principal

RFC 1 - Classification et réplication des services

Préambule

L'infrastructure de catgrl.org a été construite en ayant en tête deux sites, contenant chacun la totalité des services. Cette situation se ressent sur l'architecture, et ne permet pas facilement de savoir comment héberger un site partiel. Le but de ce document est de classifier les services en fonction des méthodes et besoins de réplication.

Les services sont séparés en 4 catégories :

  • Les services nécessaires
  • Les services d'infrastructure
  • Les services simples
  • Les services complexes

Les serveurs DNS externes sont traités séparément.

1. Services nécessaires

Chaque site DOIT héberger les services suivants :

  • Wireguard, afin de se connecter aux autres sites de l'infrastructure
  • Un serveur DNS interne. Celui-ci est statique, et est entièrement déployé par Ansible (pas un DNS secondaire dépendant d'un autre site)

Afin de simplifier le déploiement de cette couche nécessaire, je propose de les réunir en une seule machine, que je propose d'appeler "catbox", en référence aux noms des routeurs tout en un proposés par les fournisseurs d'accès internet.

La catbox PEUT également héberger les services suivants :

  • Un serveur de backup

2. Services d'infrastructure

Ces services sont à destination des autres services hébergés sur le site. Ils ne sont nécessaires que lorsque le site contient des services les nécessitant.

Si utile, chaque site DEVRAIT héberger les services suivants :

  • Un réplicat PostgreSQL
  • Un Reverse Proxy (nginx)
  • Du monitoring (Prometheus et Grafana)
  • Un Load Balancer interne (haproxy)
  • Un serveur de backup (sur la catbox ou sur un serveur dédié)

3. Services simples

Un service est dit "simple" lorsqu'il est soit entièrement statique (par exemple, le site web externe de l'association), ou n'utilise que le cluster PostgreSQL pour stocker ses données (par exemple Vaultwarden).

Chaque site DEVRAIT héberger une instance de chaque service simple si ses ressources lui permettent.

Aujourd'hui, les services concernés sont les suivants :

  • Site web externe de l'association
  • Interface d'alias
  • LDAP
  • Vaultwarden
  • Webmail

4. Services complexes

Un service est dit "complexe" lorsqu'il n'est pas simple. Deux cas de figure peuvent se poser :

  • Le service est clusterisable. Chaque site DEVRAIT en héberger une instance si ses ressources lui permettent. Les services consernés sont les suivants :
    • Proxmox Mail Gateway
    • LemonLDAP
    • Backend mail
  • Le service n'est pas clusterisable. Ces services seront gérés au cas par cas, avec un seul site à la fois contenant une version active du service. Les services concernées sont les suivants :
    • Forgejo
    • Bookstack

5. DNS externe

Le service de DNS externe est particulier, car il ne peut pas être entièrement géré par ansible avec des instances indépendantes, car les modifications doivent se propager afin de permettre au challenge ACME par DNS de fonctionner. De plus, le DNS utilisant de l'UDP, il n'est pas possible de faire de failover dessus. Je propose donc de les déplacer directement sur les fronts.

Chaque serveur Front DOIT héberger un serveur DNS externe. L'un d'eux est choisi comme serveur principal. Le changement de serveur principal peut être fait à tout moment par Ansible.