Publié par Oliver sur 06.09.202106.09.2021
L’auto-hébergement de logiciels et de données importants sur votre propre serveur domestique présente de nombreux avantages, mais peut être une tâche ardue pour commencer. Je gère mon propre serveur depuis quelques années maintenant et je décrirai ici les choix en matière de matériel et de logiciels. Ce sera un guide complet sur la façon de configurer votre propre petit serveur.
Pourquoi devriez-vous créer votre propre serveur ?
Dans certains cas, vous ne devriez pas. Certains services très coûteux, spécialisés ou difficiles à configurer (comme le courrier électronique) pourraient en fait être mieux avec un fournisseur externe. Si vous n’utilisez que très rarement vos services ou si vous n’êtes pas du tout disposé à approfondir certaines des connaissances nécessaires à l’hébergement, ce n’est peut-être pas non plus le bon endroit pour vous.
N’ayez cependant pas peur, l’hébergement de logiciels par vous-même n’a jamais été aussi simple qu’aujourd’hui et il présente de nombreux avantages. Peut-être que le plus important, cela vous rend un peu plus indépendant. Les géants de la technologie n’ont pas un moment aussi facile pour obtenir vos données et un problème dans le cloud ou avec votre fournisseur d’accès à Internet ne vous empêche pas d’accéder à vos données et services (localement).
À une époque où les services contrôlent des parties de plus en plus importantes de votre vie (comme un système de maison intelligente), ce contrôle et cette indépendance peuvent être inestimables. À long terme, cela peut même être plus rentable à long terme. Bien sûr, l’achat de matériel est un investissement, mais l’hébergement de téraoctets de données dans le cloud vous coûtera également beaucoup, pour toujours.
Enfin et surtout, cela peut être un projet très amusant qui vous aide à en apprendre beaucoup sur la technologie et vous êtes toujours libre d’essayer de nouveaux logiciels. Il y a tellement de logiciels libres open source & là-bas!
Que voulez-vous avec votre serveur?
Avant de construire quoi que ce soit, il est important de se demander: qu’est-ce que je prévois de faire avec ce serveur? Si vous cherchez simplement à héberger quelques petits services localement sans beaucoup de données, le résultat sera très différent d’un serveur de stockage complet.
Si vous avez juste besoin de services locaux, je recommande dans la plupart des cas d’obtenir un Raspberry Pi plus récent et éventuellement un SSD externe pour les données. Ils sont bon marché, économes en énergie et faciles à installer. J’ai décrit en profondeur mon petit serveur et concentrateur de maison intelligente basé sur le Raspberry Pi 4 dans cet article. L’ajout d’un SSD pour le stockage de petites données est également assez facile.
Si vous recherchez une solution plus puissante ou si vous avez besoin de stocker beaucoup de données, je vous recommande d’utiliser une plate-forme différente. Certaines personnes utilisent un NAS ou un ancien matériel de serveur (qui peut très bien fonctionner), mais je recommande un matériel client normal en mettant l’accent sur certaines caractéristiques spéciales.
- Assurez-vous d’avoir une bonne connexion réseau (1Gbit / s ou peut-être même 10)
- Utilisez des composants économes en énergie et selon l’endroit où vous souhaitez placer le serveur silencieux
- Obtenez un PROCESSEUR suffisamment puissant tout en ne gaspillant pas d’énergie au ralenti
- Habituellement, vous n’avez pas besoin de carte graphique
- Obtenez suffisamment de RAM , cela peut être très important pour votre serveur
- Obtenez une carte mère et un boîtier pouvant contenir suffisamment de disques durs & SSD pour le stockage et ayant un bon refroidissement
- Obtenez des supports de stockage de qualité. J’ai beaucoup utilisé la série WD red (soyez prudent avec les versions SMR) et j’ai également entendu de bonnes choses sur la série Seagate Ironwolf
- Assurez-vous que vos composants sont correctement refroidis et que tout est suffisamment bien connecté. Vous voudrez que cela soit construit & oubliez
- Obtenez un adaptateur secteur de qualité!
- J’éviterais personnellement les contrôleurs RAID matériels
Si vous cherchez à construire un serveur domestique, envisagez d’acheter via ces liens d’affiliation pour soutenir le blog
Série Western Digital Red Plus
Série Seagate IronWolf
Raspberry Pi 4 8GB pour un serveur plus petit
L’éditeur allemand Heise a d’excellents articles sur la construction de votre propre serveur. Vous pouvez également trouver de nombreux articles internationaux à ce sujet. Mon apprentissage personnel après la construction de plusieurs versions du serveur est de toujours planifier ce dont vous avez besoin maintenant et dans un avenir très proche. Ne construisez pas pour quelque chose dont vous pourriez avoir besoin dans 10 ans. D’ici là, il y aura un meilleur matériel disponible. La seule exception à cela pourrait être le stockage. C’est toujours une bonne idée d’avoir quelques ports SATA à gauche afin que vous puissiez ajouter plus de stockage plus tard.
La pile logicielle
Il existe de nombreux logiciels conçus pour les serveurs et chaque choix dépendra de vos préférences et de votre cas d’utilisation. Ce qui suit est mon opinion personnelle après quelques années de travail sur ce problème pendant mon temps libre.
Commençons tout d’abord par ce que je n’utiliserais pas sur un serveur: Windows. Les mises à niveau sont difficiles, beaucoup de logiciels ne sont pas correctement pris en charge et cela coûte cher. Optez plutôt pour une solution Unix / Linux. Il existe des solutions complètes pour cela comme FreeNAS, OpenMediaVault ou Unraid, mais Unraid coûte de l’argent et les autres solutions limitent également ce que vous pouvez faire. Ils pourraient être un bon choix pour vous, mais j’ai décidé de faire du bricolage et de construire ma propre solution basée sur une technologie éprouvée.
Mon serveur domestique fonctionne sur un système d’exploitation de serveur Ubuntu minimal (une version LTS) avec accès SSH pour l’administration. J’utilise le système de fichiers ZFS pour regrouper les disques dans un pool de Big Data tout en fournissant des fonctionnalités telles que des caches, des instantanés, des RAID et des sauvegardes simples. Dans ce pool, j’ai créé plusieurs systèmes de fichiers pour différents cas d’utilisation, certains d’entre eux étant disponibles via le réseau pour d’autres clients. Sur le serveur exécute un démon Docker et j’utilise plusieurs fichiers docker-compose pour héberger un ensemble de services comme openHAB, Grafana, Bitwarden / Vaultwarden et Nextcloud. Un proxy inverse (Traefik pour le moment) permet d’accéder à certains services de n’importe où sur le web.
Les sauvegardes externes sont effectuées via des lecteurs supplémentaires connectés via USB et régulièrement pivotés. Quelques scripts et un moniteur de disponibilité vérifient régulièrement si tout fonctionne toujours correctement et envoient des alarmes autrement. L’installation est la plupart du temps automatisée et peut être re-effectuée sur du nouveau matériel rapidement (si les données sont toujours disponibles bien sûr).
Comment configurer le serveur – installation automatisée
Avant de configurer réellement le serveur, j’ai décidé d’automatiser ce processus. Cela le rend plus facile, plus rapide, moins sujet aux erreurs et agit également comme une sorte de documentation. Avoir une plate-forme de base qui peut être configurée de manière fiable rapidement et facilement est un grand avantage. De cette façon, tout le reste, les données et les services réels, peuvent être configurés indépendamment de ce système. Si je veux passer à autre chose, cela devrait être relativement facile.
Pour l’automatisation, j’ai choisi Ansible. Ansible est un logiciel qui vous permet d’écrire ce qu’on appelle des playbooks: des scripts courts qui définissent les étapes à suivre pour configurer votre serveur. Ces playbooks peuvent ensuite être invoqués avec une commande simple et automatiseront toutes les étapes manuelles nécessaires au processus de configuration. J’ai appris Ansible moi-même lors de la configuration du serveur, donc je suis sûr que les playbooks pourraient être meilleurs, mais je les partagerai, ainsi que tout le reste nécessaire à la configuration du serveur, via GitHub dans les parties suivantes de cette série.
J’ai exécuté ces scripts dans une machine virtuelle plusieurs fois avant l’installation réelle pour m’assurer que tout fonctionne comme prévu. Depuis lors, j’ai ajouté quelques nouvelles fonctionnalités et retravaillé des parties de celles existantes. L’installation réelle sur le serveur était assez simple.
Vous devez d’abord installer votre système d’exploitation Linux préféré. J’ai choisi Ubuntu Server LTS et l’ai installé via une clé USB. Le système est installé sur un SSD pour des temps de démarrage plus rapides. Après l’installation, j’ai seulement configuré le réseau (je recommande une adresse IP statique), activé SSH et déplacé le serveur à sa position physique finale. Désormais, aucun écran / clavier / souris n’est nécessaire, il peut être géré via le réseau (sauf si quelque chose ne va pas).
Les étapes suivantes sont également simples: téléchargez les scripts dont vous avez besoin, installez Ansible et exécutez les playbooks.
sudo apt install git ansiblegit clone https://github.com/OliverHi/zfs-homeserver.gitcd zfs-homeserver/ansibleansible-playbook setup_playbook.yml -K
Cela exécutera un playbook appelé setup_playbook.yml qui va configurer le serveur. Bien sûr, vous pouvez utiliser n’importe quel playbook Ansible ici, mais le mien est assez simple et ressemble à ceci.
--- - name: "Setting up the home server" hosts: localhost connection: local # become root user, which is needed for most tasks become: yes become_user: root vars_files: - vars/main_vars.yml tasks: - name: Install the needed packages apt: name: - samba - software-properties-common #- linux-headers - dkms - zfsutils-linux - samba-vfs-modules - zfs-auto-snapshot state: latest cache_valid_time: 3600 - import_tasks: tasks/setupZFStask.yml - import_tasks: tasks/setupUsersTask.yml - import_tasks: tasks/setupFoldersTask.yml - import_tasks: tasks/setupSambaTask.yml - import_tasks: tasks/setupDocker.yml # and more tasks if needed
Fondamentalement, il fonctionne sur le serveur local, s’exécute en tant que root et utilise des variables que j’ai définies dans un main_vars séparé.fichier yml. Il commencera par installer quelques paquets dont j’ai besoin pour ma configuration, puis parcourra un ensemble de tâches que j’ai écrites pour les différentes parties de la pile logicielle. Il configurera le système de fichiers ZFS, créera des utilisateurs et des dossiers, configurera Docker et d’autres. Vous pouvez toujours les personnaliser à votre goût.
Dans les articles suivants de cette série, je vais expliquer comment j’ai configuré le système de fichiers, les utilisateurs, les partages samba ainsi que Docker et le proxy inverse Traefik. Dans chaque partie, j’ajouterai également les fichiers Ansible nécessaires pour les installer automatiquement. Tout le code sera disponible sur mon compte GitHub.
Le prochain article sur la configuration de ZFS et d’un système de sauvegarde se trouve ici.