Jusqu’à mes 14 ans, je ne m’étais jamais vraiment passionné pour l’informatique. Quelques jeux occasionnellement, une retouche photo ou deux, une recherche de temps en temps ou un programme. Mais jamais je n’avais cherché à comprendre ces fondements.

Lorsqu’un camarade a un jour amené en classe la version papier du cours d’openclassroom sur le C++, j’étais sous le charme ! Je pouvais enfin comprendre comment des Hommes faits de chair et de sang pouvaient faire bouger des pixels de lumière ! Le cours étant accessible librement en ligne sous format PDF, je l’ai immédiatement téléchargé. Avec plus de 600 pages, l’entreprise était colossale. Mais, les deux premiers chapitres posaient déjà les bases de la programmation moderne. De là, ma fascination pour la programmation.

Depuis, j’ai maitrisé d’autres langages informatiques (Javascript, objective-C, Swift, Python, Java, HTML/CSS, …). J’ai appris à dompter la console Unix et j’ai développé une compression plus fine des techniques mises en oeuvres (compilation, librairies, APIs, drivers, niveaux d’abstraction …). Tant de concepts des plus utiles, dans un monde où la programmation est un lien inébranlable entre différentes cultures ou disciplines.

Un détail demeurait néanmoins. Je n’avais jamais réellement expérimenté avec la “dark side” de l’internet moderne : les serveurs.

Un serveur polyvalent

La situation initiale

Jusque là, je n’avais uniquement utilisé que des Raspberry Pi (2, 3, 3B, 3B+). Ils sont polyvalents, fiables, peu chers et parfaits pour tester rapidement une idée, mettre en place un petit serveur JavaScript, automatiser sa maison ou servir une page web statique. Mais :

  • leur performance laisse à désirer
  • leurs ports d’extensions sont peu nombreux, lents et peu fiables à grande échelle.
  • les possibilités d’ajouts d’extensions matérielles (accélérations de rendus par exemple), n’existent pas.
  • leur architecture ARM les limite dans leurs compatibilités. Certains programmes de serveur (compilation à distance, ferme de rendu) ne sont compilés que pour x86. Et, compiler manuellement est complexe voir impossible dans certains cas.

Bref, ils ne sont pas adaptés à des projets de grande envergure.

Faire table rase

Le jour est venu où ma passion pour le septième art à pris naissance. Mettre en place une collection personnelle de Blu-ray est complexe, surtout lorsqu’on a l’habitude de changer d’habitation régulièrement. De plus, ne pas pouvoir partager mes coups de cœur avec mes amis m’était pénible.

Je me suis donc rapidement tourné vers des alternatives. Certes, les services de streaming sont maintenant communs, mais leur offre individuelle est limitée. Il faut donc multiplier les abonnements (Netflix, Disney+, Amazon prime, OCS, Molotov, Salto, bientôt HBO max et bien d’autres), et accepter de pouvoir perdre à tout moment n’importe quel contenu. Autant acheter son propre contenu et pouvoir le partager à mes amis au besoin.

J’ai donc opté pour la construction de mon propre serveur Plex. Le service permet d’héberger sur son serveur des fichiers vidéos/audios/photos et d’y accéder n’importe où, les partager avec n’importe qui et y ajouter des extras (analyse du film, sous-titres, version longue). Bref, c’est un formidable outil pour qui aime réellement le cinéma et souhaite en profiter à son maximum. Un film Blu-ray 4K pèse cependant entre 50 et 100 Go, trop pour être stocké sur un seul disque.

Une révision totale de l’architecture

Il me fallait donc voir plus grand qu’un Raspberry Pi, repenser mon serveur et prévoir une architecture flexible permettant des évolutions et ajouts successifs au gré des besoins évoluant.

Du point de vue connection, disposant de la fibre, je n’avais aucun problème. De plus, mon opérateur m’offre de base une IP statique. L’hébergement d’un serveur est donc possible. Je disposais encore d’une ancienne coque d’ordinateur pouvant avec quelques modification abriter jusqu’à 8 disques dur 3.5″, une carte mère au format ATX, suffisant pour une mise en jambe. J’ai donc cherché des pièces d’occasions et attendu des bonnes affaires sur les pièces que je souhaitais. Voici la configuration final de mon serveur :

CPURyzen 2200G
GPUNvidia GTX 1050 Ti
Ram16Go Crucial 2666Mhz
SSD256Go Samsung OEM
Stockage4*6To HGST + WD red 4To2 + 10To WD
alimentationPure Power 10 400W
carte mèreB450M Gigabyte
OSUbuntu 20.04 LTS
baies n°1

Pour moins de 300€ (hors disques durs) le serveur est donc performant. La seule erreur que j’ai commise est d’opter pour un Ryzen 2200G plutôt qu’un 1600 pour un prix équivalent. Initialement, je pensais pouvoir utiliser le module VCE interne au 2200G pour pouvoir convertir en temps réel les films en H265 sur Plex. Cependant Plex ne gère les cartes graphiques AMD que sur Windows. Par la suite, j’ai donc dû ajouter une GTX 1050 Ti.

Le SSD garantit la réactivité du serveur et sa fiabilité. Les disques durs sont montés dans un RAID6 au format btrfs afin d’équilibrer le coût au To et la redondance en cas de casse matérielle. La carte graphique permet la conversion simultanée de 4 flux Blu-ray UHD, assez pour partager mon serveur avec mes amis/famille. Ubuntu server est parfait pour une gestion à distance par SSH et permet l’installation de tous les logiciels serveur. Le processeur suffit à transcoder des flux audios. Le SSD n’a couté que 40€ et suffit amplement.

Un pour tous, tous pour un

Avec un tel serveur sous la main, j’ai décidé de rassembler dessus mes services de redirection de noms de domaines et de créer un véritable site web. Vous lisez ses lignes sur ce dernier. Après avoir installé Apache, WordPress et paramétré correctement plusieurs modules, le serveur accueille maintenant ce site et quelques autres. Il me sert également à recevoir certaines requêtes pour automatiser certaines tâches ou objets connectés. Il sert également de serveur Minecraft et permet de profiter d’un espace commun de partage de culture et de moment de plaisirs.

Evolutions futures

Devant la quantité de médias grandissante, les emplacements disques durs ne suffiront plus. Ainsi, je compte remplacer le setup actuel par un véritable serveur 4U de 24 baies 3.5″ avec backplane SAS permettant une plus grande évolutivité. Il permettra également de mettre en place une alimentation redondante pour éviter toutes corruptions de données.