Il y a quoi sur mon serveur ?

Revue 2022 des applications et des VMs que j'héberge sur mon serveur DIY à la maison.

Il y a quoi sur mon serveur ?

Bonjour,

En bon geek, on se pose tous la question : mais tu héberges quoi sur ton serveur et comment ? Je vois cette question passée sur reddit régulièrement et j'aime bien lire ces sujets. On y voit passer de tout et n'importe quoi (il y a beaucoup de gens sur reddit qui donnent des conseils en pensant bien faire mais qui n'y connaissent rien et font n'importe quoi, ça fait de la peur avec des frissons). Petit rappel avant de commencer la visite guidée, l'auto hébergement en 2022 c'est devenu simple (vraiment à la portée de tout le monde si le sujet vous intéresse et que vous connaissez les bases de l'informatique) avec Proxmox et Docker. Par contre, n'exposez aucun service sur internet si vous ne savez pas ce que vous faites et la façon dont vous le faites. Quand je vois des gens qui font du NAT de leur port SSH ouvert directement sur internet, ça me donne envie de pleurer pour eux (autant dire que leur machine est une porte ouverte pour n'importe quel script kiddy...). Il faut savoir être humble et commencer doucement (/mode vieux con ON, mais c'est vrai que les gens n'ont plus le temps d'attendre maintenant, même pour un hobby, /mode vieux con OFF).


Matériel : il n'a pas changé depuis le début, j'utilise toujours un vieux i7 (gen4) avec 16Go de RAM, une carte SATA pour rajouter des disques pour me permettre de faire du stockage, une carte réseau pour me permettre faire routeur le tout sur une carte micro ITX dans un petit boitier qui rentre parfaitement sous ma télé. La bonne surprise c'est que malgré l'encombrement, il est parfaitement refroidi, et il n'y a pas un brin de poussière dedans (il n'y a pourtant pas de filtre sur l'entrée d'air). La seule chose que j'ai changé c'est cette saloperie de SSD de Sandisk qui a tenu moins d'un an (non mais sérieux, jamais vu ça...) que j'ai remplacé par un Samsung. Le SSD héberge proxmox et mes VMs. Pour le stockage de données, j'utilise du Western Digital Red. Au top, je n'ai jamais eu de problème, je dois avoir certains disques qui tournent quasi h24 depuis 2013.

La seule limitation avec cette configuration c'est la RAM. 16Go c'est trop limite. Ma prochaine configuration aura à l'avenir 32Go de RAM extensible jusqu'à 64Go. Au niveau du CPU, c'est simple il est utilisé en moyenne entre 7-10% et ne tourne en pointe que quand il fait du transcodage pour les films de vacances et même la, ça dépasse rarement 70-80%. D'où l'intérêt si vous pouvez récupérer du "bon" vieux matériel, ça fait largement l'affaire.


VMs: Pour les VMs, j'utilise Proxmox. Avec Proxmox c'est un jeu d'enfant de créer des machines virtuelles en quelques minutes. Je ne vois pas aujourd'hui l'intérêt d'installer votre serveur en bare metal. C'est insulter l'avenir et même si vous n'utilisez qu'une seule VM à l'instant x, le fait de pouvoir évoluer vers autre chose facilement et sans prise de tête est à garder en mémoire. Sans compter qu'avec Proxmox, les backups sont largement simplifiés et redémarrer après un down matériel se fera en quelques minutes. J'ai connu l'informatique grand publique à ces débuts sous DOS, je suis toujours étonné de la stabilité des solutions d'aujourd'hui. C'est simple, Proxmox ne plante jamais. Non mais vraiment jamais ! Et pourtant j'en ai fait des erreurs sur mon serveur. Une solution open-source, gratuite, stable et qui permet d'évoluer à volonté, pourquoi chercher autre chose ?

Au niveau des VMs, ça a pas mal évolué au cours du temps sur la façon de les "supporter". A noter qu'absolument toutes mes applications tournent sous docker. Je n'utilise aucun script et je ne fais pas d'installation old school en ligne de commandes.

VM ou LXC

Sur les forums la plupart des gens vont vous conseiller d'utiliser LXC car ça consomme moins de ressources vu que le kernel utilisé sera celui de Proxmox et pas de votre système d'exploitation dans votre VM. Bon, ça c'est la théorie mais dans la pratique j'ai vu un gain sur la RAM, sur le CPU ça ne change rien du tout. Le gain de RAM doit être dans les 10% mais je n'en suis pas vraiment sur car c'est difficile de comparer car quand on alloue de la RAM à une VM elle va l'utiliser et mettre en cache plus de choses que si vous passer directement par Proxmox. Ca a peut être une utilité sur les systèmes anémiques mais le gain de performance est pour moi anecdotique.

Par contre niveau sécurité il n'y a pas débat. D'ailleurs les devs de Proxmox conseillent d'utiliser uniquement des VMs car justement le kernel est séparé. Une VM peut être compromise sans que toutes les autres le soient. Avec LXC c'est mort.

Si vous voulez que votre application soit exposée à internet, la question ne se pose même pas: VM.

J'ai vu aussi que beaucoup de gens font 1 LXC = 1 application docker. Euhhh c'est quoi l'intérêt ?? A part s'ennuyer niveau maintenance / gestion au quotidien je ne vois pas la logique.

La base c'est OPNsense que j'utilise comme routeur/firewall. Pour moi un indispensable pour se lancer dans l'auto hébergement et si vous voulez exposer des services sur le net. Il vous faut pour cela une solution de sécurité de niveau professionnelle mais facile à prendre en main.


Pour le site web j'utilise maintenant Ghost avec Umami comme solution pour les statistiques. Ce sont des solutions simples qui respectent la vie privée (et sans cookie). A noter que cette VM est totalement déconnecté de mon LAN, c'est d'ailleurs une "bonne pratique" pour les services exposés à internet. Votre LAN doit être totalement à part de ces services. Et ça c'est OPNsense qui permet de le gérer facilement via les VLAN (Virtual LAN). Au niveau des ressources, c'est bien sur dépendant de votre trafic, j'ai mis 2Go de RAM mais je pense que ça tourne sans problème avec 1Go.

Pour la gestion des DNS j'utilise actuellement 2VMs, une avec Adguard et l'autre avec Pihole. Pourquoi deux ? Bah parceque je n'arrive pas à me décider entre les deux solutions... Je peux me dire que ça me permet d'avoir de la redondance comme ça. Hum ! La résolution des DNS ce fait avec Unbound directement dans OPNsense (plugin). Ca fonctionne parfaitement, je ne vois pas l'intérêt d'utiliser un DNS externe sachant que ça ne consomme quasiment aucune ressource (les VMs utilisent 512Mo de RAM mais uniquement parcequ'on ne peut pas mettre moins dans Proxmox.

Tip pour proxmox

Ah tiens d'ailleurs un petit tip concernant Proxmox. Mettez dans chaque VM le maximum pour votre CPU, ne vous amusez pas à limiter le nombre de coeurs. Sinon vous allez vous retrouver à saturer un coeur et vous allez avoir des ralentissements inutiles et votre ventilateur de votre CPU va tourner à fond tout le temps. On est plus en 2000 et il faut garder l'avantage que nos CPU sont multi-threads. C'est une des erreurs que je vois dans la quasi totalité des guides alors que ça ne fait aucun sens.

Pour le stockage des données, j'utilise OpenMediaVault qui est basé sur Debian. L'interface graphique est moche mais simple et la prise en main se fait ultra rapidement vu qu'il n'y a que l'essentiel et pas de fioritures inutiles. J'ai alloué 8Go de RAM sur cette VM qui est clairement la plus gourmande (logique vu que c'est elle qui gère mes films de vacances). Ca remplace parfaitement mon Synology.

Système d'exploitation pour vos VMs

Jusqu'à début Juillet, j'utilisais comme tout le monde Ubuntu et Debian comme base pour mes dockers et mes VMs. Aucun souci, ça tourne parfaitement, c'est ultra stable et les mises à jours sont régulières. Mais un soir j'ai eu une idée de génie (l'auto-satisfaction c'est priceless et bon pour la santé :) ). L'immense majorité des containers dockers tournent sous Alpine car c'est l'un des systèmes linux qui est le plus léger qui existe. Je me suis dit, pourquoi ne pas tester pour mes VMs en remplacement de Debian ou Ubuntu ? OH MY FUCKING GOD ! C'est génial. Le gain de performance est énorme, les VMs démarrent en quelques secondes et au niveau de la consommation de RAM c'est incroyable. J'ai depuis tout basculé sous Alpine et j'adore. A noter qu'en terme de sécurité en plus c'est mieux car il n'y a que les services que vous installez qui sont présents. Moins de services = moins de risque.

J'ai une dernière VM sur laquelle j'ai basculé mon reverse-proxy, la sécurité et la gestion globale de mes dockers. Ca me permet d'isoler un peu plus mes containers qui sont exposés sur le net.


Containers: je n'utilise aucun container exotique mais ils répondent tous à un besoin spécifique. Je m'amuse régulièrement à en tester des nouveaux parceque c'est simple mais ma configuration de base a peu évoluée ces dernières années.

Portainer: la base ! Il permet la gestion via une interface graphique de vos containers. Je lance toujours mes composes via la ligne de commande mais pour tout le reste, Portainer. Vous pouvez avoir une gestion centralisée via les portainers agents.

Traefik: le meilleur reverse proxy (en plus crée par un français) pour vos dockers. Il est compliqué à prendre en main car la configuration est longue. Il faut du temps pour en comprendre la philosophie mais une fois que c'est fait c'est génial car tout est automatisé une fois qu'il tourne et il est dynamique. Vous pouvez rajouter des applications à la volée via les labels ou un fichier externe.

Doozle: il permet d'avoir accès aux logs de vos containers directement. Très pratique pour le debugging. Vous avez la même chose avec Portainer mais vous avez moins de clics à faire ici. Il n'est pas indispensable mais quand vous faites des tests, l'avoir sous la main c'est très pratique.

Watchtower: il permet la mise à jour de façon automatique de vos containers. Alors oui c'est déconseillé en production mais pour la sécurité c'est beaucoup mieux même si une ou deux fois par an, ça risque de casser quelque chose avec une mise à jour qui est plantée. Quand ça arrive, ce n'est pas la mort.

Authelia: container qui permet de rajouter une couche de sécurité (2FA) pour les containers que vous exposez sur internet. Indispensable.

Docker-socket-proxy: container qui permet de gérer les droits pour votre socket docker et diminuer la surface d'attaque. Pas indispensable mais un gros plus pour la sécurité.

cf-ddns & cf-companion: si vous utilisez Cloudflare, ces deux containers permettent de mettre à jour automatiquement votre IP et de déclarer les CNAME (via les labels de Traefik). Indispensable avec Cloudflare.

Uptime-kuma: je me suis rendu compte avec le temps que je n'ai pas besoin de super dashboard de la mort pour surveiller mes containers mais de quelques choses de simple qui me permet d'envoyer des notifications si certains services sont down. Uptime-kuma apporte cette solution.

Gotify: container que j'ai lié justement avec Uptime-kuma pour recevoir les alertes (et aussi les alertes de Watchtower pour les mises à jour des containers) sur mon téléphone. Pas indispensable mais ultra pratique.

Vaultwarden (aka Bitwarden): LE logiciel pour la gestion de vos mots de passe. Il y a une application android, des extensions pour les navigateurs, c'est clairement devenu un indispensable pour moi. J'utilisais Keepass avant mais ça ne fonctionne qu'en local. Le fait de pouvoir synchroniser vos mots de passe quelque soit la plateforme, c'est priceless. Un indispensable.

Homer: je veux avoir accès à mes applications de façon rapide et simple. En gros, une page web avec des liens statiques. Et bah homer c'est ça. Le css est super simple, propre et la configuration se fait en quelques minutes. Je l'utilise depuis un an et je ne peux plus m'en passer.

Linkding: un container qui permet de gérer vos favoris. Pas indispensable mais très pratique. Ca permet en plus de pouvoir utiliser n'importe quel navigateur.


Media center: mon "NAS" me sert de media/download center. La plupart des gens utilisent les applications *.arr (Sonarr, Radarr, etc...) pour leur média center. J'ai testé mais je ne suis pas du tout emballé, je trouve les solutions très lourdes (gourmandes en terme de ressources) et il y a quelques limitations techniques qui sont étonnantes. Les devs de ces applications font des choix parfois bizarres. Si votre choix ce porte sur ces applications, il n'y a aucun risque vu que 99% des guides sur le sujet sont à propos de ces applications.

Sickchill: container qui permet de télécharger vos séries du week-end. Il fonctionne parfaitement, je l'utilise depuis des années et je ne vois donc pas l'intérêt de passer sur Sonarr.

Couchpotato: l'image est "deprecated" et il n'est donc plus maintenu. Je peux donc difficilement vous le conseiller. Il permettait de télécharger des films de vacances et de les classer. Moi je m'en sert uniquement pour la partie "post process" c'est donc pour ça que je le garde.

Plex: lecteur pour vos médias. Il a l'avantage d'avoir des applications sur les différents systèmes d'exploitation et peut lire n'importe quel format. Il est très décrié par la communauté d'auto hébergement sur reddit (on peut limite parler de haine) car le login se fait via le site de plex et pas uniquement chez vous. Et il y'a une remontée des infos de votre serveur. Sauf que la remontée des infos se bloque avec Adguard / Pihole en quelques secondes et qu'un login externe bah c'est la même chose si vous utilisez par exemple Google Authenticator. Donc j'ai du mal à comprendre le pourquoi du comment de ce rejet. Pour info, l'alternative actuelle s'appelle Jellyfin mais clairement le projet n'est pas mature comparé à plex.

Tautulli: container qui permet d'avoir les statistiques de votre plex. Totalement inutile donc mais c'est toujours amusant.

Transmission: pour le téléchargement des torrents de linux. Ultra léger et simple, certainement la meilleure solution. Ne vous ennuyez pas avec d'autres logiciels pour les torrents qui sont over compliqués pour rien. Il y a des plugins pour les navigateurs, c'est un plus.

Jdownloader: container qui permet de télécharger directement des fichiers. Il fonctionne via un plugin sur les navigateurs. La partie graphique est ultra datée et lourde (en plus en 720p uniquement) mais il n'y a pas d'alternative actuellement.

Gluetun: rhaaa génial, une de mes dernières découverte. Je l'utilise depuis quelques mois, je ne comprends pas comment je ne l'ai pas découvert avant. Ce container va créer un tunnel par lequel vous allez faire transitez les applications que vous souhaitez. Au hasard vos applications de download. Et le tunnel il sera lié à votre VPN. En résumé, Gluetun c'est votre VPN et vous choisissez quel container va l'utiliser.

Calibre-web: bon, on ne va pas se mentir, ce container ne me sert à rien. Il permet de partager votre bibliothèque basée sur Calibre (quelle merde ce calibre btw, dommage qu'il n'y ait pas aujourd'hui une autre solution aussi complète). Mais je suis tellement fier de ma bibliothèque d'ebooks que je le garde (j'adore lire).

Filebrowser: je l'utilise pour partager des fichiers. C'est l'équivalent du feu dl.free.fr. Il permet de partager les fichiers avec un lien sécurisé, QR code possible et sur un temps donné.

Nextcloud: je l'utilise uniquement pour le backup des photos de mon téléphone. j'aimerais bien trouver une autre solution car Nextcloud est beaucoup trop lourd juste pour ça. Pour le moment je n'ai trouvé aucune alternative qui fonctionne.

Syncthing: pour le backup d'une partie de mes données. Indispensable.

Conclusion: Ca fait un post bien plus long que ce que j'avais prévu au début. J'espère qu'il vous permettra de faire le tri dans la jungle des applications et pour vos choix lorsque vous débutez dans l'auto hébergement.

@+