URL: https://linuxfr.org/news/wiseflat-un-serveur-conteneurise-pour-vos-projets-personnels Title: Wiseflat, un serveur conteneurisé pour vos projets personnels Authors: wiseflat ZeroHeure, patrick_g, palm123 et Davy Defaud Date: 2018年05月16日T13:23:29+02:00 License: CC By-SA Tags: domotique, lxc, sécurité, api, auto-hébergement, wallabag et postgresql Score: 24 [Wiseflat](https://www.wiseflat.com/) est un projet permettant d’héberger ses applications Web dans des conteneurs LXC sur un (ou plusieurs) Raspberry Pi. C’est une alternative à docker CE avec du LXC (car, en tant qu’administrateur système, je trouve ça plus pratique d’avoir un accès SSH dans mes conteneurs). Wiseflat est donc une boîte à outils permettant d’installer des micro‐services clef en main « _production ready_ », afin de se focaliser sur ce qu’on a réellement besoin de faire. Plus de détails dans la suite de la dépêche. ---- [Site Web de Wiseflat](https://www.wiseflat.com) [Wiseflat API](https://api.wiseflat.com) [Le Wiki du projet](https://wiki.wiseflat.com) [Code source](https://github.com/wiseflat/wiseflat-project) [Total.js](https://www.totaljs.com) ---- API === J’héberge une [API](https://api.wiseflat.com) proposant du contenu dédié à la domotique : - météo ; - calendrier ; - géolocalisation ; - _heartbeat_, un service de vérification de joignabilité fait sur mon API, si votre serveur ne répond pas vous serez notifié par courriel ; - _cron_, pour planifier des jobs HTTP dans le _cloud_ ; - etc. Ainsi que du contenu autour de la sécurité et du filtrage réseau pour protéger son réseau local et/ou ses serveurs sur Internet : - **badips** : des listes d’adresses IP considérées comme malveillantes, à bloquer sur son pare‐feu (ou au niveau de son serveur mandataire inversé — reverse proxy — nginx, Traefik ou HAproxy) — ces adresses IP sont issues des différentes listes communautaires, enrichies avec mes propres mécanismes de défense sur mes serveurs ; - **ipblocks** : des blocs d’adresses IP par pays pour restreindre l’accès uniquement à son territoire (je n’ai pas de copain en Chine) ; - **baddomains** : des listes communautaires de nom de domaines dangereux à ajouter à son serveur DNS pour les rendre non routables (filoutage, _malware_, publicité, pistage, etc.). Il reste encore des coquilles, donc n’hésitez pas à me prévenir si les services gérés par l’API ne fonctionnent pas comme il faut. :-) Côté utilisateur ================ L’installation et les mises à jour de votre serveur se font grâce à un projet [Ansible](https://www.ansible.com) hébergé [sur GitHub](https://github.com/wiseflat/wiseflat-project). Le projet est fourni avec des _playbooks[^1]_ permettant : - d’ajouter des micro‐services pré‐configurés pour simplifier le déploiement et la prise en main par l’utilisateur (la création manuelle de conteneurs LXC est bien entendu possible) ; - d’exploiter les données de l’API dans ses scénarios divers et variés de domotique ; - de garantir la sécurité de son réseau local en bloquant les menaces présentes sur Internet. Voici un exemple de Raspberry Pi et de ses petits micro‐services : ``` pi@home-wiseflat:~ $ lxc list +----------------+---------+------------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +----------------+---------+------------------------+------+------------+-----------+ | home-blog | RUNNING | 192.168.1.198 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-cms | RUNNING | 192.168.1.115 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-dnsmasq | RUNNING | 192.168.1.110 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-domoticz | RUNNING | 192.168.1.200 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-homebridge| RUNNING | 192.168.1.246 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-jeedom | RUNNING | 192.168.1.138 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-messenger | RUNNING | 192.168.1.104 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-mqtt | RUNNING | 192.168.1.247 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-nodered | RUNNING | 192.168.1.245 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ | home-xpl | RUNNING | 192.168.1.243 (eth0) | | PERSISTENT | 0 | +----------------+---------+------------------------+------+------------+-----------+ ``` Le serveur dnsmasq est configuré pour récupérer via un _cron_ les listes des domaines dangereux. Il suffit de configurer sur son service DHCP ce serveur DNS pour les résolutions de noms de domaine. Étant un fan de Node.js, la plupart des micro‐services que j’ai choisis font tourner des instances [Node.js](https://fr.wikipedia.org/wiki/Node.js) basées sur [Total.js](https://www.totaljs.com), un super cadriciel. Futur ===== Même si je propose des images LXC préconfigurées, je compte partager des _playbooks_ Ansible pour installer des applications Web pratiques telles que : - Nextcloud (avec SQLite par défaut) ; - wallabag et autres lecteurs de flux RSS ; - WordPress (même si j’évite d’installer mariadb/mysql-server sur mes Raspberry Pi, on parle bien de « micro‐service ») ; - searx, comme alternative à Google ; - Gitea ou Gogs, pour gérer ses projets Git ; - PeerTube (même si c’est en Docker et que ça fonctionne avec PostgreSQL) ; - Standard Notes ; - OpenVPN, pour que tout un chacun puisse monter des tunnels de réseau privé virtuel (VPN) avec ses copains. J’aimerais bien mettre du dynamisme dans ce genre d’infrastructure à la manière de [[Kubernetes]], un serveur mandataire inverse (_reverse proxy_) en frontal, comme [Traefik](https://traefik.io/), qui irait chercher ses domaines dans un [_key‐value store_](http://jargonf.org/wiki/key-value_store) ([etcd](https://coreos.com/etcd/)) et générerait automatiquement les certificats SSL/TLS Let’s Encrypt. L’ajout d’une découverte du service ([_service discovery_](https://en.wikipedia.org/wiki/Service_discovery)) basée sur du DNS serait aussi un plus, ce qui permettrait d’avoir un (ou plusieurs) petits serveurs pour prendre en charge une infrastructure de production peu chère. Contribuer ========== N’importe qui peut participer au projet de différentes manières via [GitHub](https://github.com/wiseflat/wiseflat-project) : - faire évoluer le projet Ansible de construction du serveur ; - proposer des _playbook Ansible_ pour construire des micro‐services. [^1]: un _playbook_ Ansible est une sorte de mégascript qui va automatiser des tâches de manière séquentielle.