Serveur
Hébergement
TODOLe serveur est hébergé chez Infomaniak, via un partenariat. La configuration (par exemple réseau) se fait depuis leur site web (ici, login sur le Vaultwarden).
Infrastructure
La configuration de l'infrastructure est sur le repository Clic Infra. Chaque service est hébergé sous la forme d'une stack Docker. Cela permet de facilement d'en ajouter sans se soucier des dépendences, l'architecture, etc. La mise à jour du serveur quand la configuration a été modifié se fait grâce à l'outil Ansible.
Note importante: le reverse-proxy (Caddy) n'est pas dans un container Docker, mais directement installé sur la machine. Voir l'explication plus bas.
Ajouter/Enlever/Modifier un service
Les modifications de l'infrastructure doivent être opérée d'abord sur le repository d'infra, puis appliquée au serveur en utilisant Ansible (voir ci-dessous).
Chaque service est configuré via un fichier docker-compose.yaml (doc), dans un dossier unique au service à la racine du repository. Les services ne communiquent de manière générale jamais entre eux autrement qu'au travers de leurs APIs exposées (e.g. le site web accède à Directus en passant par son url publique, et non via un réseau virtuel dédié). Si un service nécessite une database, elle est instanciée dans la même stack que lui et lui est exclusivement dédiée.
Si le service nécessite d'être accessible via internet, il doit exposer un (plusieurs) port(s), qui seront ensuite exposé à l'extérieur par le reverse-proxy.
Gestion des secrets
Les services peuvent nécessiter des informations privées (ou spécifique au serveur), par exemple un mot de passe admin, ou celui de la boîte mail IT. Ces valeurs sont stockées dans un fichier secrets.yaml (dans /home/debian), et chargées par Ansible lors du déployement. Elles doivent être référencées dans le Playbook playbook/deploy.yaml dans la tâche de vérification et passées en tant que variables d'environnement à la tâche de déploiement des stacks. Elles peuvent ensuite être récupérées dans la configuration de chaque stack avec la syntax ${MY_SECRET}.
Déploiement
Le déploiement se fait en utilisant le Playbook playbook/deploy.yaml, qui va mettre à jour toutes les stacks. /!\ Attention /!\ : les stacks doivent pouvoir être modifiée avec un simple docker stack deploy; il ne faut pas utiliser de config, car ces dernières sont immuables. Il faudrait enlever puis redéployer la stack, ce qui est sous-optimal. On préferera configurer les services via leurs variables d'environnement.
Sauvegardes
Les sauvegardes sont gérées par BorgBackup, ce qui permet d'avoir des backups chiffrées et incrémentales. L'outil [Borgmatic], configuré par le Playbook playbook/deploy.yaml s'occupe de périodiquement générer et uploader des sauvegardes. Sa configuration (également dans le Playbook) doit être mise à jour lorsque qu'un service est ajouté/enlevé/modifié.