Changement de hardware pour mon serveur principal
La situation actuelle
Fervent défenseur du "self-hosting", j'avais commencé à héberger mon site et services perso sur une tour dans ma chambre étudiante il y a maintenant 5 ans de cela.
C'est toujours la même machine qui héberge mes services mais elle a été déplacée dans mon ancienne chambre, chez mes parents.
Il y a plusieurs problèmes.
Tout d'abord, la connection internet du foyer est irrégulière voire carrément instable. Impossible de travailler correctement en ssh
dessus : la latence est beaucoup trop élevée et la liaison ne tient pas. J'ai pensé à essayer mosh qui est fait pour ce genre de situations mais faute de temps, j'ai tout simplement arrêté de travailler quotidiennement dessus.
Ensuite, dû aux travaux récurrents dans la maison, le serveur subit plusieurs fois par an des coupures de courant. La solution est d'acheter un onduleur mais il pouvait arriver que les coupures durent plusieurs heures et dépasser 30mn au vu du wattage de la tour est couteux.
Finalement, certains services que j'héberge demandent à être accessible en permanence avec une faible latence : je pense notamment au serveur prosody qui gère de plus en plus ma communication instantanée. Un VPS peut plus facilement m'assurer ça.
VPS vs self-host
J'aimerais vraiment pouvoir self-host mais il y a plusieurs contraintes qui sont difficiles à adresser :
- une disponibilité de 99.99%, soit 1h de downtime par an, ce qui est difficile à atteindre. Je ne peux pas non plus choisir quand le service sera hors-ligne et cela arrive souvent en journée (coupures de courant et/ou connection irrégulière).
- une latence faible (~ 50ms). Impossible à assurer sur beaucoup de connection particulières.
- ip fixe : impossible chez certains fournisseurs d'accès à internet.
- non blocage de ports : orange bloque le port 25 et j'en aurai éventuellement besoin pour héberger mes mails.
Face à ça, les problèmes des VPS sont :
- confiance réduite : il faut partir du principe que vous n'êtes pas le maitre à bord, vos données ne sont pas complètement confidentielles.
- prix : ça coûte un peu plus cher (probablement pas beaucoup plus, on oublie souvent le coût de l'electricité).
- capacité de stockage plus réduite
- Il faut parfois subir les précédents occupants de l'ip en cas d'hébergement de ses mails.
La meilleure solution est comme toujours hybride. Mais une majorité de mes services allaient devoir déménager pour un VPS.
Amélioration de l'existant
Je ne voulais pas simplement bouger mes conteneurs. Je voulais en profiter pour revoir en profondeur la façon dont j'hébergeais ces services.
L'ancien serveur tourne sur Archlinux. Ce n'est pas en soi un problème mais je voulais passer sur une solution stable et éprouvée dans le monde des serveurs : CentOS. Une stabilité sans égale dans le monde de linux allait me permettre de construire des fondations solides.
Ensuite, je voulais revoir la gestion des services. Il m'était clair que tout service serait conteneurisé, il me fallait trouver une solution pour les déployer facilement en leur procurant des certificats TLS à la volée.
J'ai commencé à écrire ma propre solution à l'aide d'un nginx en proxy dont la configuration était mise à jour par un script python qui récupérait les informations sur les conteneurs depuis /var/run/docker.sock
et en utilisant acme.sh pour la gestion des certificats. Malheureusement, c'était assez bordélique et peu souple. Je me suis donc tourné vers Traefik, un reverse-proxy pour conteneurs écrit en go. Traefik s'est révélé merveilleux, exactement la solution à mon problème. Je peux maintenant lancer un conteneur, lui attribuer un sous-domaine et générer le certificat associé en une seule commande.
J'ai tout de même été obligé de créer mon propre conteneur pour récupérer les certificats en fichiers .crt
car Traefik garde tout dans un fichier json
.
Il fallait ensuite déployer tout ce beau monde. Ansible est venu à la rescousse : en quelques fichiers YAML faciles à maintenir, je pouvais sécuriser le serveur CentOS, lui donner une ip fixe et déployer tous les conteneurs. Encore mieux : j'ai maintenant un environnement totalement reproduisible !
J'en ai profité pour ajouter quelques services comme Privatebin, Etherpad, Radicale, Lutim... Et pour revoir mon moteur de blog pour le rendre totalement statique.
Les sauvegardes, manque cruel de l'ancienne disposition, sont assurées via Restic et Backblaze. J'ai essayé de minimiser l'intervention directe nécessaire. Je pourrai tester tranquillement l'ajout d'un service en lançant un serveur de test et relancer l'intégralité depuis un état connu en moins d'une demie-heure.
Des services protégant au maximum mes données
Le problème principal du VPS étant la confidentialité des données présentes dessus, j'ai décidé de déployer majoritairement des services chiffrés bout-à-bout. C'est le cas de privatebin, firefox_syncserver, Lutim, Cryptpad, XMPP (via OMEMO)...
Cela ne donne pas une assurance absolue (évidemment) mais participe énormément à rendre la situation supportable.
Que reste-t-il à faire ?
J'aimerais bien finir mon conteneur mon héberger mes repos git sur mon propre serveur. Ce n'est pas instantané car j'aimerais maintenir la synchro avec github.
J'aimerais aussi héberger mes mails et un serveur DNS ce qui va demander quelques soirées de travail en plus.
Plus tard, pourquoi pas passer sur un cluster de serveurs gérés par etcd ou un autre protocole pour assurer une disponibilité de 100% ?
Tant de choses à apprendre et à faire !