Wiseflat, un serveur conteneurisé pour vos projets personnels

Wiseflat est un projet permettant d’héberger ses applications web dans des containers LXC sur un (ou plusieurs) Raspberry Pi.

C’est une alternative à docker CE avec du LXC (car en tant qu’adminsys je trouve ça plus pratique d’avoir un accès SSH dans mes containers).

Wiseflat est donc une boite à outils permettant d’installer des microservices “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.

Sommaire

API

J’héberge une API proposant du contenu dédié à la domotique :

  • météo
  • calendrier
  • géolocalisation
  • heartbeat, un service de ping fait sur mon API, si votre serveur ne répond pas vous serez notifié par mail
  • cron, pour planifier des jobs HTTP dans le cloud

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’IP considérées comme malveillantes, à bloquer sur son pare-feu (ou au niveau de son reverse proxy nginx, Traefik ou HAproxy) — ces IPs sont issues des différentes listes communautaires, enrichies avec mes propres mécanismes de défense sur mes serveurs ;
  • ipblocks: des blocs d’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 routable (phising, malware, publicité, tracking, 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 hébergé sur Github. Le projet est fourni avec des playbooks1 permettant :

  • d’ajouter des microservices pré-configurés pour simplifier le déploiement et la prise en main par l’utilisateur (la création manuelle de containers 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 example de Raspberry Pi et de ses petits microservices :

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.

Etant un fan de Node.js, la plupart des microservices que j’ai choisi font tourner des instances nodeJS basées sur Total.js, un super framework.

Futur

Même si je propose des images LXC préconfigurées, je compte partager des playbooks Ansible pour installer des applications webs pratiques tels que :

  • nextcloud (avec sqlite par défaut) ;
  • wallabag et autre lecteur de flux rss ;
  • wordpress (même si j’évite d’installer du mariadb/mysql-server sur mes Raspberry Pi, on parle bien de “microservice”) ;
  • 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 posgresql) ;
  • standard notes ;
  • openvpn server pour que tout un chacun puisse monter des tunnel vpn avec ses copains.

J’aimerais bien mettre du dynamisme dans ce genre d’infrastructure à la manière de Kubernetes, un proxy inverse en frontal comme Traefik qui irait chercher ses domaines dans un key-value store (etcd) et générerait automatiquement les certificats SSL Let’s Encrypt. L’ajout d’un service discovery basé sur du DNS serait aussi un plus, ce qui permettrait d’avoir un (ou plusieurs) petits serveurs pour supporter une infrastructure de production peu chère.

Contribuer

N’importe qui peut participer au projet de différentes manières via Github :

  • faire évoluer le projet Ansible de construction du serveur ;
  • proposer des playbook ansible pour construire des microservices.

  1. un playbook Ansible est une sorte de mégascript qui va automatiser des tâches de manière séquentielle. 

Commentaires :
voir le flux atom
ouvrir dans le navigateur

(Source: LinuxFr.org : les dépêches)
Logo