Description du projet autohébergement maison

  • Benoît Vézina produit la pile logicielle (stack) pour de l'autohébergement sur Raspberry Pi.
  • Utilisation du Dokuwiki de Linuq pour documenter, GitHub de LinuQ pour distribuer sources et gabarits ainsi que Docker Hub pour la distribution des binaires.
  • Benoît s'y consacre intensivement mais a besoin de collaborateurs pour documenter, tester et lui faire des demandes. Le but est d'obtenir de 3 à 5 collaborateurs pas séances.
  • Les collaborateurs sans connaissances techniques pourront principalement effectuer la rédaction de nos démarches. Cette rédaction se fera dans ce Dokuwiki (nous vous montrerons comment faire, au besoin).
  • Un calendrier de dates pour les séances de travail suit, où Benoît reçoit ses collaborateurs chez lui à la campagne (St-Étienne-de-Lauzon).
  • Nul besoin d'être membre de LinuQ pour y participer.

Séances de travail

Benoît se propose pour organiser des séances de travail chez lui :

  • samedi 23 juin Succès LOL
  • samedi 4 août problème avec la dernière version de portainer qui impose une remise en cause de la solution
  • samedi 18 août retour à la version précédente, volumes sur un disque externe, reste un problème avec traefik pour les accès externes
  • samedi 1er septembre Benoît a avancé sur le regroupement de 4 rpi (2 maîtres et 2 esclaves), on peut en débrancher un sans perte de service. Le problème d'accès aux multiples serveurs a finalement été résolu par Benoit le 8 septembre à distance sur l'installation de Daniel chez lui, les 3 services basés sur piwigo, dokuwiki et nextcloud sont accessible
  • La première partie (de 10h jusqu'avant le dîner), sera consacrée à la résolution des problèmes que vous avec rencontré dans ce projet (si vous en avez), à jaser du libre, sinon nous pourrons procéder avec le projet d'autohébergement pour la JLL.
  • Nous prenons un pause à midi et vous êtes invités à apporter votre repas (ou acheter des œufs frais sur le chemin, que Benoît cuisinera).
  • Pour la deuxième partie (de 13h à 16h), nous nous consacrerons au programme proposé pour cette journée (voir les liens ci-dessus).
  • Vous pouvez communiquer avec Benoît au (418) 454-1752 pour réserver votre place ou pour plus d'information.

Contexte de l'autohébergement

Nous savons que nos données personnelles publiées sur les médias sociaux (tel que Facebook ou Dropbox) ne nous appartiennent plus. La reprise en main de notre intimité dans un monde numérique passe par celle de nos données personnelles (qui nous ont bien souvent échappées) est possible mais demande quelques efforts et sacrifices comme pour une alimentation naturelle (manger bio), mais l'enjeu en vaut la chandelle.

Pour ce faire il faut soit contrôler nous même des logiciels dans lesquels nous pouvons avoir confiance, ce que sont les logiciels libres, soit faire affaire avec un fournisseur de services qui respecte une charte éthique (voir par exemple cette belle initiative https://chatons.org/). Il faut alors d'une manière ou une autre en assumer le prix. En effet si c'est gratuit, c'est que c'est vous le produit et le produit que vous donnez en échange d'un service informatique gratuit, c'est votre vie intime.

Plusieurs solutions en logiciels libres existent pour nous permettre de gérer de façon autonome et éthique ces informations.
Ce projet vous expliquera une solution vous permettant d'héberger chez vous (auto-hébergement) vos données grâce à des plugiciels (plugins) déjà développés. Avec un (ou plusieurs) Raspberry Pi 3 (petit ordinateur bon marché, très peu énergivore et qui est aujourd'hui assez puissant pour assumer cette fonction) sur lequel nous installerons différentes couches logicielles pour gérer le tout.
Dans ce site on documente un cheminement vers la cible auto-hébergement, il n'est pas question de ré-inventer la roue, beaucoup de documentation est disponible, nous l’utiliserons systématiquement (en fait en se limitant à celle qui nous a été utile et nous semble essentielle et qui fonctionne, nous vous épargnerons nos errements et essais non productifs).

Nous commençons avec une connaissance minimale, mais nous assumons que l'on est capable d'installer une distribution Gnu/linux toutefois sans expertise de programmation (on apprendra au fur et à mesure ce qu'il faut). En pratique toute personne ouverte à la technologie et consciente qu'il faut réfléchir et expérimenter est capable d'installer et gérer ses propres services, il suffit de le vouloir, et de se faire aider.

Notre résultat sera disponible et donc utilisable directement (dans ce cas il faut s'assurer d'un peu d'aide, on y reviendra), mais il est fortement conseillé de comprendre un minimum ce que l'on fait car il faut partir d'une case blanche : un ordinateur vide mais avec un accès libre aux logiciels. Nous allons procéder par étapes en commençant par le début et ce qui est commun aux divers logiciels envisagés.

Et linux.org est là pour vous soutenir, comme elle a soutenu les auteurs de ce projet.

Conseils au débutant

  • Prendre des notes de ce que l'on fait, le mieux est dans un simple fichier texte, ainsi on peut recommencer et surtout cela est très utile quand on se fait aider et retrouver les mots de passes (on peut installer avec les mots de passe par défaut et les changer quand tou va bien)
  • Lire la doc, c'est toujours mieux quand on comprend, un peu d'anglais est très utile, il y en a énormément, faire attention aux dates, parfois c'est obsolète pour son modèle.
  • Avoir un peu de support : Linuq peut faire ça, s'habituer aux forums et à la recherche de solutions aux problèmes
  • Penser aux copies de sécurité
  • Ne pas avoir peur ; essayer, essayer, essayer
  • Se prendre au jeu c'est aussi amusant que de faire un Soduku ou des mots croisés, voire même un jeu stupide qui ne rapporte rien, ou cliquer sur des like pour voir ce qu'en pense les autres

Nous vous invitons à vous présenter à nos ateliers pour obtenir le support et l'aide requis.

  • Se rappeler qu'en ligne de commande la flêche en haut permet de remonter l'historique
  • Penser au clic sur le bouton droit pour copier une sélection (avec ça on ne retape pas les commandes d'une doc)

Bonne découverte!

Vue d'ensemble du projet

Des services qui résident sur un serveur peut être accessibles uniquement dans un réseau local, ou à distance via internet de façon à les partager entre nos machines ou entre nous (quelques personnes au sein de la famille par exemple) : c'est ce que nous visons.

Concrètement pour pouvoir utiliser le Raspberry Pi pour de l'auto-hébergement, il y a une tonne de solutions. Par contre elle ne se valent pas toutes. La plupart du temps vous trouverez sur le net un ou plusieurs guides expliquant comment déployer le système de gestion de contenu choisi ainsi qu'une application comme Wordpress. Cela fonctionne extrêmement bien. Mais quand vient le temps d'en faire coexister plusieurs, la complexité et les problèmes semblent suivre une progression géométrique similaire. Pour rendre le tout accessible, il faut donc avoir recours à la mise en conteneur avec Docker.

Nous avons retenu quelques services pour commencer. Ce sont des logiciels libres arrivés à maturité :

  • Nextcloud : données personnelles, fichiers, agenda, carnets d'adresses, etc.
  • Dokuwiki : un wiki (vous êtes actuellement sur le Dokuwiki de LinuQ
  • Piwigo : une gallerie de photo

En fait une fois maîtrisé l'installation de ces logiciels, beaucoup seront à notre portée. Une page propre à chaque service prêt à installer est disponible plus loin dans cette page.

Les couches logicielles utilisées

Nous installerons successivement les logiciels libres suivants :

  • Matériel : Raspberry Pi 3 (B ou B+) et carte mémoire de 16 Mo (ou plus)
  • Hypriot : Système d'exploitation hôte (base Debian)
  • Docker Swarm : Orchestrateur (lien entre les containers)
  • Portainer : Administration des conteneurs (Docker containers) par interface web
  • Traefik : Serveur Proxy renversé, s'occupe aussi des certificats SSL Let's Encrypt

Exemples de plugins :

  • DokuWiki : moteur de wiki libre pour créer de la documentation (comme ce site)
  • NextCloud : stockage et partage de vos données, agenda et calendrier
  • WordPress : gestion de contenu de site web pour faire un blog
  • Piwigo : galerie de photo
  • Etc.

La ligne de commande rebutant généralement bien des gens, nous installerons rapidement Portainer, une interface web (donc graphique) de gestion conteneur Docker simple. Pour pouvoir exploiter Docker et cette interface au maximum de leur capacité et ajouter les piles logicielles (stack) en plus des simples conteneurs, nous auront besoin d'installer Dockerswarm. Pour nous éviter l'installation de Docker directement sur le Pi, nous utiliserons Hypriot comme système d'exploitation hôte.

Pour simplifier encore plus l'utilisation, un dépôt sera créé sur GitHub (actuellement xtremxpert/portainer-template) pour pouvoir être utilisé à la place des gabarits standards. Au fur et à mesure des demandes des membres de LinuQ, nous créerons les piles logicielles et les déploierons via le Docker Hub (hub.docker.com). En plus de ces images, ils nous faut répondre à la problématique d'aujourd'hui ; configurer la partie web. Nous créerons donc une pile qui permettra non seulement d'aiguiller le trafic vers les bons services, mais également d'auto-configurer vos nouveaux noms d'hôtes auprès de Cloudflare et de générer un certificat SSL valide via Let's Encrypt. Nous pourrons peut-être même y intégrer un client de mise à jour automatisé des changements d'adresses IP publiques (ddclient).

Préalables utiles

Pour le matériel, nous utilisons un Raspberry Pi. Quand on acquiert le dernier né, le modèle 3 Model B+, il est tout nu mais il faut installer un système d’exploitation, pas de panique c'est facile.
Si vous avez un modèle 3 B, c'est parfait (nous ne recommandons pas l'utilisation des modèles précédents, à moins de n'installer que quelques services, où le modèle 2 peut faire l'affaire).

Donc nous utilisons le modèle 3 B+ qui a un processeur ARM32v7 à 64 bits, mais nous n'utiliserons que les applications roulant sur du 32 bits, d'où le modèle 3 B qui peut aussi être utilisé.

Donc, le matériel utilisé :

  • Raspberry Pi (processeur ARM32v7) 3 Model B ou B+
  • Une bonne carte micro SD rapide de 16 Go (ou plus)
  • Câble d'alimentation
  • Clavier USB et souris USB
  • Moniteur HDMI
  • Un accès à internet

LinuQ prévois faire un achat de groupe pendant l'été ou en septembre 2018. Si vous êtes intéressés, écrivez à info@linuq.org

En plus d'utiliser votre Pi pour ce projet, vous pourrez y installer Raspbian. C'est une distribution GNU/Linux basée sur Debian optimisée pour le Raspberry, une version totalement libre qui donne accès à plus de 50 000 logiciels libres compatibles entre eux. S'ils ne sont pas déjà installés par la distribution (bien qu'il y en ait déjà pas mal) on ira les chercher sur le dépôt pré configuré par l'installation avec apt install (on le fera plusieurs fois).
Il y a deux versions, l'une avec un bureau graphique et plusieurs logiciels préinstallés, l'autre toute nue sans bureau graphique. Pour commencer on va prendre la version complète, un fois à l'aise on pourra prendre une version légère pour monter un serveur.

Un truc super : les cartes SD ne sont pas chères, on peut donc en avoir plusieurs, on peut alors très facilement avoir plusieurs versions du système et des logiciels, il suffit de choisir la carte de l'installer et de brancher le Raspberry.

1) Hypriot


Source de l'image : blog.hypriot.com

  1. Pour débuter il faut récupérer l'image de Hypriot, notre système d'exploitation hôte sur lequel Docker est pré-configuré. La dernière version disponible est la 1.9.0.
  2. Sélectionner le lien hypriotos-rpi-v1.9.0.img.zip pour télécharger l'archive.
  3. Quand le téléchargement du fichier est terminé, aller à la section ci-dessous correspondant au système d'exploitation installé sur l'ordinateur utilisé pour le téléchargement.
  4. La suite de la procédure consistera à décompresser le fichier (archive) reçu et à le copier sur une carte mémoire SD.

Sous Linux

Sous Linux, nous utiliserons la commande dd :

  • Insérer votre carte mémoire dans votre ordinateur
  • Identifiez-la à l'aide de cette commande :
$ lsblk

En fonction de votre type d’adaptateur, celle-ci se présentera sous la forme /dev/sdX ou /dev/mmcblkY (le plus fréquent que j'utiliserai dans les exemples).

Un fois identifiée, nous allons nous assurer que celle-ci soit démontée, puis nous lancerons le transfert de l'image sur la carte SD. Les deux commandes sont :

$ umount /dev/mmcblkY
$ sudo dd if=hypriot-rpi-201???.img of=/dev/mmcblkY bs=1M

Cette opération peux prendre quelques minutes. Une fois complétée, la carte est prête à être utilisée pour démarrer votre Raspberry Pi.

Sous Windows

Pour débuter avec Windows, il faudra télécharger et installer 7 zip pour décompresser l'image d'Hypriot et Win32 Disk Imager pour mettre celle-ci sur la carte SD.

Une fois ces deux logiciels installés, suivre ces étapes :

  • Décompresser l'image avec 7-Zip,
  • Lancer Win32 Disk Imager, choisir le fichier fraîchement décompressé comme fichier image et votre carte SD comme périphérique,
  • Finaliser en lançant l'écriture.
  • N'oubliez pas d'éjecter le périphérique après avoir terminé sa création.
  • Note: cette opération peux prendre quelques minutes. Une fois complétée, la carte est prête à être utilisée pour démarrer votre Raspberry Pi.

Sous Os X

La procédure est similaire à celle sous Linux, sauf que pour identifier notre périphérique, nous utiliserons cette commande :

$ diskutil list

On remarquera maintenant que les disques sont tous présentés comme /dev/diskX.
On va ensuite faire le même genre de commande qu'en Linux, sauf qu'il faut ajouter devant diskX pour la commande dd seulement (pour raw) et utiliser diskutils au lieux de umount

$ diskutil unmountdisk /dev/disk5
$ sudo dd if=hypriotos-rpi-201???.img of=/dev/rdisk5 bs=1m

Cette opération peux prendre quelques minutes.
Une fois complétée, la carte est prête à être utilisée pour démarrer votre Raspberry Pi.

  1. Insérer la carte SD dans votre Pi
  2. Brancher le câble d'alimentation pour le démarrer
  3. Au premier lancement avec cette carte mémoire, attendre la fin du chargement (boot).
  4. Faire un retour de chariot (enter)
  5. “HypriotOS (Debian GNU/Linux 9) black-pearl tty1”
  6. Comme vous pouvez le voir, Hypriot utilise le système d'exploitation Debian.
  7. Hypriot attend votre authentification avec le compte et mot de passe par défaut.
  8. Authentifiez-vous avec le nom d'usager “pirate” et le mot de passe “hypriot”.
  9. Si vous ne pouvez pas utiliser de clavier avec votre Raspberry Pi, il vous faudra identifier l'adresse IP qui lui a été octroyée par votre réseau. Pour la connaître, faire la commande “ifconfig” sur votre Pi ou aller dans le panneau d'administration de votre routeur. Par exemple : 192.168.10.109
  10. Conectez-vous ensuite sur votre Pi en SSH à partir d'un ordinateur sur votre réseau avec la commande ci-dessous :
$ ssh pirate@192.168.10.109

Note: Si le compte en cours utilisé sur votre ordinateur a le même nom que celui que vous utilisez pour vous connecter au Pi, vous n'avez pas à le spécifier (voir image):

  1. Si le message “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!” s'affiche, copier la ligne à l'écran (on suppose dans cette procédure que votre nom d'utilisateur est “jean”) : “ssh-keygen -f ”/home/jean/.ssh/known_hosts“ -R 192.168.10.109


(Connection ssh vers Hypriot)

2) Portainer et Traefik


Avant de poursuivre cette précédure, nous vous recommandons la lecture de la page d'aperçu détaillée du site officiel de Portainer :

On va faire un minimum de ligne de commande avant d'installer Portainer, on commence par se créer un compte utilisateur et lui donner des droits d'administration :

Ajouter un utilisateur ayant votre prénom (saisir un mot de passe, votre “Full Name” et ignorer les autres questions par des retours de chariot “enter”) :

$ sudo adduser jean

Ajouter l'utilisateur au groupe existant “docker” :

$ sudo usermod -aG docker jean

Lui donner les privilèges d'administrateur :

$ sudo usermod -aG sudo jean

Redémarrer votre PI (attendre que Hypriot soit redémarré):

$ sudo reboot

Une fois le Pi redémarré, vous pouvez faire “enter” sur le Pi pour voir l'invite de commande “login:”. Vous pouvez faire les commandes ci-desous sur le Pi, mais je vous recommande d'utiliser une connection SSH et le les lancer de votre ordinateur pour plus de commodité.

Connectez-vous avec votre nouvel utilisateur administrateur (ex: jean) par SSH à partir d'un ordinateur connecté au même réseau que votre Pi:

ssh jean@192.168.10.109

Supprimer le compte générique pirate de mon système (raisons de sécurité) :

$ sudo userdel pirate

Mettre à jour les paquets du Host Debian Hypriot :

sudo apt update && sudo apt dist-upgrade

Pendant que les mises à jour s'effectuent sur le Pi, configurez votre routeur afin de rediriger les ports 443, 22 (et 80 si possible) vers l'adresse que votre routeur a attribuée à votre Pi:

(cliquer sur l'image pour l'agrandir)
Assurez-vous que les cases sont cochées, puis statut à “Enable”.
Sauvegardez la configuration du routeur et quittez sa console d'administration.

:-x Access / VirtualServer / (image)

Nos sources sont hébergées dans le Famagit (GitHub) de LinuQ (voir section “Préalables” ci-dessus) :

Vous pourrez vous inscrire à ce dépôt puisque vous vous êtes créé un compte GitHub précédemment. Ceci vos permettra de contribuer aux sources qui y sont hébergées (avec l'expérience, un jour).

J'exécute ce script qui initialise Dockerswarm, lance la pile de Portainer (incluant le client agent et le Traefik correspondant) avec ces commandes :

$ wget https://framagit.org/linuq/easy-pi-hosting/raw/master/install.sh

Message : “Enregistre : “install.sh”

$ wget https://framagit.org/linuq/easy-pi-hosting/raw/master/docker-compose.yml

Message : “«docker-compose.yml» enregistré”
Avant d'aller plus loin, vous devez connaître la réponse à ces 6 questions que vous devrez saisir dans le script qui suivra:
1- “Host name for Portainer service: ” adresse pour rejoindre l'administration de Portainer (ex: rpi01.votredomaine.ca)
2- “Host name for Traefik service: ” adresse pour rejoindre l'interface de visualisation de Traefix (interface entre le web et tous les Dockers) (ex: traefik01.votredomaine.ca)
3- “Email for Lets'Encrypt recovery: ” votre adresse courriel (ex: joe_bloe@gmail.com) (si vous vous faites pirter votre certificat, vous utiliserez cette adresse pour l'annuler)
4- “Email for your Cloudflare account: ” adresse utilisée quand vous avez créé votre compte chez Cloudflare (ex: joe_bloe@gmail.com)
5- “Cloudflare Global API Key: ” (la clé copiée tantôt au bas de la page Création d'un compte chez Cloudflare)
6- “Domaine name for the Docker network: ” (votredomaine)

Permettre l'exécution du script :

chmod +x install.sh

Lancer le script :

$ ./install.sh

Message :

Automated installation of Portainer/Traefik stack

To be able to complete this installation, you must have before
installed Hypriot on your Raspberry-pi (3 or better recommanded).
You must also have registered an internet domaine name and 
open an account at Cloudflare and transfer your DNS server (FREE) there.

Did you get your internet domain name and your Cloudflare account info? ([y]es or [n]o): 

Répondre “y” (enter)
Répondre aux 6 questions tel que décrit ci-dessus.

Réponse du script :

Did you get your internet domain name and your Cloudflare account info? ([y]es or [n]o): y
Host name for Portainer service: rpi01
Host name for Traefic service: traefik01
Email for Lets'Encrypt recovery: joe_bloe@gmail.com
Email for your Cloudflare account: joe_bloe@gmail.com
Cloudflare Global API Key: 59766315cdd5d7793e08e438e7d5b88945176
Domaine name for the Docker network: (votredomaine)
Swarm initialized: current node (z42z6cirp03hz579z4cn9xtbu) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-0pfq9zijgzbb4t56eqo1q18c5q6r5prlhhr9u02chv8vfed8v4-60i4kvi1wpxcdnqst1l7nj7ii 192.168.10.109:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

w00380tla27fc74kjqx7gtck4
Creating network maestro_agent_network
Creating service maestro_proxy
Creating service maestro_agent
Creating service maestro_portainer
Installation complete, take a coffee and then navigate to your server URL :
HTTPS://
Create you administrative user and then enjoy free hosting your life yourself

Any bugs can be reported here : https://framagit.org/linuq/easy-pi-hosting/issues
French documentation of the projet is here : https://linuq.org/projets/auto-hebergement_maison

Lister les services disponibles :

$ docker service ls
$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                        PORTS
slahlcbtosav        maestro_agent       global              1/1                 portainer/agent:latest       
7zpp5m2khdc9        maestro_portainer   replicated          1/1                 portainer/portainer:latest   *:30001->9000/tcp
dl76rp129dqv        maestro_proxy       replicated          1/1                 traefik:latest               *:80->80/tcp, *:443->443/tcp, *:30000->8080/tcp

Et voilà, Portainer est lancé! :-)
Notez le port alloué à Portainer est 30001.

Maintenant, toujours d'un ordinateur dans le même réseau, ouvrez votre navigateur et donnez-lui votre adresse et le port 30001 :

http://192.168.10.109:30001

Portainer devrait vous assister dans la création de votre compte administrateur…

  • N'utiliez pas “admin” mais saisissez un autre nom (ex: jean)
  • Choisissez un mot de passe de 8 caractères ou plus.
  • Bouton “Create a user” pour vous connecter à l'interface de Portainer
  • Dans votre compte Cloudflare, saisir un A Name : rpi01 / 192.222.228.220 / Automatic
  • La première chose à faire est d'aller dans le menu “Setting”,
  • Désactiver la demande de donation activer (“Disable donation header”)
  • Activez “Use custom logo”, changez le logo par utilisez un des logos de LinuQ, soit le Tux patriote : allez sur la page logo, menu contextuel (bouton droit de la souris) → “Afficher l'image” et copiez l'adresse web (URL) de cette image (sinon copiez son adresse ci-dessous) :
https://linuq.org/_media/projets/linuq2.png
  • Activer l'option “Use custom templates”,

Remplacer l'URL du template par défaut :

https://raw.githubusercontent.com/portainer/templates/master/templates.json

par celle-ci pour un raspberry pi:

https://framagit.org/linuq/easy-pi-hosting-template/raw/master/templates.pi.json

ou par celle-ci pour un ordinateur de type pc ou mac:

https://framagit.org/linuq/easy-pi-hosting-template/raw/master/templates.pc.json

(à changer dans sa forme finale) dans le champs URL.

  • Par sécurité, activez “Disable bind mounts for non-administrators”
  • Par sécurité, activez “Disable privileged for non-administrators”
  • Sauvegarder (bouton “Save settings”)
  • Vous verrez le logo choisi s'afficher en haut à gauche de l'interface Portainer. :-)
  • Un “Endpoint” permettra au serveur de nous diriger vers la bonne machine lorsqu'on cliquera sur les hyperliens qu'il nous proposera. Donc, aller dans le menu “Endpoints”, cliquer sur le noeuds primaire et saisir l'adresse IP 192.168.10.109 dans le champs “Public IP”
  • Valider en cliquant sur le bouton “Update endpoint”
  • Parcourez les menus de l'interface de Portainer afin de vous en familiariser.
  • Vous pouvez vous référer à la page d'aperçu détaillée du site officiel de Portainer Portainer.io (tel que mentionné précédemment).


(Exemple de tableau de bord de Portainer)


(Schéma de Dockerswarm, source: FedYeti.com)

Sur le site Docker Hub, il y a plusieurs images disponibles.

  • Allez sur le site et saisi dans le champ de recherche les mots clés pour afficher les images correspondant au microprocesseur du Raspberry Pi (ARM) Modèle B ou B+, exécutant des applications 32 bits en version 7 :
arm32v7
  • Filtrez ensuite les “Automated” (prêtes) avec la liste déroulante.
  • Parcourez les images prêtes pour Portainer.
  • Si l'image d'un composant que vous souhaitez installer dans Portainer s'y trouve, c'est qu'elle a été configurée et est “prête” à télécharger et à installer. Sinon, nos devons la configurer avant de l'installer (et tant qu'à y être, publier sur ce site pour redistribuer à la communauté, la 4e liberté des Logiciels libres n'oublions pas).

3) Les images d'intérêt

Voici les images actuellement envisagés dans ce projet, les commentaires, leur état d'avancement et la page décrivant les démarches effectuées pour chacune d'elles :

NextCloud

  • Image : arm32v7 stable
  • Avec base de données Postgres
  • Par Benoît Vézina, avec la collaboration de Jean Leblond et Daniel Pascot
  • Version : 0.1
  • Statut : Fonctionnel :-)
  • Description : C'est l'image la plus utilisée qui permet de stocker du contenu accessible aux autres conteneurs. Nous recommandons de l'installer en premier.

Dokuwiki

  • Image : arm32v7 stable
  • Par Benoît Vézina, avec la collaboration de Jean Leblond et Daniel Pascot
  • Version : 0.1
  • Statut : Fonctionnel :-)
  • Description : Simple à installer, cette image vous permet d'héberger votre propre wiki et d'en donner l'accès à vos contacts. Plus nécessaire d'utiliser les services d'hébergement d'un Frama.wiki sur Framasite

Odoo (avec Postgres) [ Benoît Vézina : plan ]

  • Image : arm32v7 stable
  • Par Benoît Vézina, avec la collaboration de Jean Leblond
  • Version : 0.1
  • Statut : Fonctionnel :-)
  • Description : Odoo est un framework pour construire un site web. Il dispose de plusieurs applications qu'on peut y intégrer selon ses besoins. Il est considéré comme un ERP - Enterprise Resource Planning ou PGI - Progiciel de gestion intégré.

PhP [Benoît Vézina : dev]
Une image du gestionnaire de BD PhpMyAdmin sera aussi incluse dans cette section car c'est l'outil d'administration (des instances) de cette base de donnée utilisées par plusieurs images applicatives.

RaspAP [Benoît Vézina : dev]

MariaDB [Benoît Vézina : non débutée]

  • Description : MariaDB est une base de données de licence libre très populaire. C'est un “fork” de MySQL (depuis que ce dernier a été acquis par Sun). Cette base de données sera utilisée pour plusieurs de nos images, telles que :
    • Piwigo (galerie de photos)
    • WordPress (gestionnaire de contenu sous forme de site web)
    • Joomla (gestionnaire de contenu sous forme de site web) (peut aussi utiliser une base de données Postgres)
  • La configuration de MariaDB sera couverte dans une sous-section d'installation des images applicatives qui l'utiliseront.

MySQL [Benoît Vézina : non débutée]

  • Description : MySQL est une base de données de licence libre très populaire. Suite à son acquisition par Sun, 3 “forks” se sont créés ; MariaDB, PerconaDB et MySQL. Il est trop tôt pour prévoir ce qu'il en adviendra, mais cette base de données sera utilisée pour les images suivantes :
    • Piwigo (galerie de photos)
    • WordPress (gestionnaire de contenu sous forme de site web)
    • Joomla (gestionnaire de contenu sous forme de site web) (peut aussi utiiser une base de données Postgres)

Piwigo [pas débutée]

  • Description : Gestion d'une galerie de photos.
  • Avec base de données MySQL.

Diaspora [pas débutée]

  • Description : (à venir) En attendant, consultez la page Exit Facebook section “Alternative à Facebook : Framasphère et Diaspora”.

Mastodon [pas débutée]

  • Description : (à venir) En attendant, consultez la page Exit Facebook section “Alternative à Twitter ou Tumblr : Mastodon”.

https://puredata.info/docs/raspberry-pi/
https://vimeo.com/52265243
https://wiki.labomedia.org/index.php/Pure_Data_vs_RaspberryPi
https://fr.flossmanuals.net/puredata/introduction/
Jean à Daniel: tu connais Sonic Pi pré-installé sur Raspbian? https://sonic-pi.net/


CouchPotato

  • Image : arm32v7 stable & PC stable
  • Par Benoît Vézina, avec la collaboration de Jean Leblond
  • Version : 0.1
  • Statut : En essai
  • Type : Getter
  • Description : Couchpotato permet aux utilisateurs de News Group ou de Torrent de se faire une liste de souhait de films à télécharger. CouchPotato se chargera de rechercher directement sur les serveurs indexeurs de fichiers NZB ou Torrent et une fois les fichiers trouvés, les envoyer à votre plateforme de téléchargement préférée. Déploie une pile complexe de Getter de contenu.
  • Slogan : “Téléchargez des films automatiquement, facilement et de la meilleure qualité dès qu'ils sont disponibles.”
  • Site officiel : CouchPotato
  • Note : LinuQ rend à votre disposition cette page explicant comment installer cette pile logicielle sur votre serveur Ubuntu 18.04. Il est de la responsabilité de chaque utilisateur de vérifier la légalité de cette application avant d'en faire usage. LinuQ se dégage de toute responsabilité quand à votre utilisation.

4) Alternative à Hypriot

On peut aussi créer notre propre fichier image comme alternative à Hypriot :

version: '3.4'

services:
  agent:
    image: portainer/agent
    environment:
      # REQUIRED: Should be equal to the service name prefixed by "tasks." when
      # deployed inside an overlay network
      AGENT_CLUSTER_ADDR: tasks.agent
      # AGENT_PORT: 9001
      # LOG_LEVEL: debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - agent_network
    deploy:
      mode: global
      labels:
        - "traefik.enable=false"

  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    networks:
      - agent_network
      - proxied_network
    ports:
      - "9000"
    volumes:
      - portainer_data:/data
    deploy:
      labels:
        - "traefik.docker.network=proxied"
        - "traefik.backend=portainer"
        - "traefik.frontend.rule=Host:$PORTAINER_HOSTNAME"
        - "traefik.port=9000"
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

  proxy:
    image: traefik
    networks:
      - proxied_network
    environment:
      - CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL}
      - CLOUDFLARE_API_KEY=${INPUT_CLOUDFLARE_APIKEY}
    ports:
      - "8080"
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "sslcerts:/etc/acme/"
    deploy:
      labels:
        - "traefik.frontend.rule=Host:${TRAEFIK_HOSTNAME}"
        - "traefik.port=8080"
        - "traefik.backend=traefik"
        - "traefik.frontend.entryPoints=http"
        - "traefik.enable=true"
        - "traefik.protocol=http"
      placement:
        constraints:
          - node.role == manager
    command:
      - "--api"
      - "--debug"
      - "--entrypoints=Name:http Address::80 Redirect.EntryPoint:https"
      - "--entrypoints=Name:https Address::443 TLS"
      - "--defaultentrypoints=http,https"
      - "--acme"
      - "--acme.dnschallenge=true"
      - "--acme.dnschallenge.provider=cloudflare"
      - "--acme.entryPoint=https"
      - "--acme.onHostRule=true"
      - "--acme.storage=/etc/acme/acme.json"
      - "--acme.onDemand=false"
      - "--acme.email=${LETSENCRYPT_EMAIL}"
      - "--docker"
      - "--docker.swarmMode"
      - "--docker.domain=${DOCKER_DOMAIN}"
      - "--docker.watch"

networks:
  proxied_network:
    external:
      name: proxied_network

  agent_network:
    driver: overlay

volumes:
  portainer_data:
    driver: local
  sslcerts:
    driver: local

5) Construction d'une image

La page construction d'une image explique comment installer un gestionnaire de machine virtuelle, monter une image Ubuntu 18.04 LTS, charger une image amd64 et la convertir en ARM32.

6) Alternative au Pi : un serveur Linux

On peut profiter des avantages de l’autohébergement de nos services à la maison sans toutefois disposer d'un Raspberry Pi. La solution consiste en l'installation d'un système d'exploitation serveur (sur un portable ou un poste de table -une tour-), dont le processeur permet la virtualisation), de l'ajout de Docker et d'y installer ensuite les services désirés.
* Autohébergement maison sur un serveur Linux

7) Astuces

  • Compte par défaut : pi
  • Mot de passe initial : raspberry
  • on peut le trouver dans l'administrateur de son routeur
  • avec la commande hostname -I
  • avec la commande ifconfig dans le raspberry

pi@raspberrypi:~ $ ifconfig

      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
      inet 192.168.0.140  netmask 255.255.255.0  broadcast 192.168.0.255
      inet6 fe80::dcce:19df:6791:1436  prefixlen 64  scopeid 0x20<link>
      ether b8:27:eb:b5:7d:28  txqueuelen 1000  (Ethernet)
      RX packets 20272  bytes 4579886 (4.3 MiB)
      RX errors 0  dropped 4  overruns 0  frame 0
      TX packets 268  bytes 39798 (38.8 KiB)
      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      lo: flags=73<UP,LOOPBACK,RUNNING> 4 mtu 65536
      inet 127.0.0.1  netmask 255.0.0.0
      inet6 ::1  prefixlen 128  scopeid 0x10<host>
      loop  txqueuelen 1000  (Boucle locale)
      RX packets 36  bytes 2160 (2.1 KiB)
      RX errors 0  dropped 0  overruns 0  frame 0
      TX packets 36  bytes 2160 (2.1 KiB)
      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
      inet 192.168.0.165  netmask 255.255.255.0  broadcast 192.168.0.255
      inet6 fe80::20ee:7f61:2fea:6473  prefixlen 64  scopeid 0x20<link>
      ether b8:27:eb:e0:28:7d  txqueuelen 1000  (Ethernet)
      RX packets 6713  bytes 3898049 (3.7 MiB)
      RX errors 0  dropped 1  overruns 0  frame 0
      TX packets 205  bytes 28694 (28.0 KiB)
      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
       

On voit ici qu'il y a 3 connexions eth0 est la connection filaire et l'adresse IP est 192.168.0.140, l0 est l'adresse du localhost IP est 127.0.0.1 (en tapant cette adresse dans le fureteur on se connecte sur le raspberry lui-même) et l'adresse wlan0 du wifi qui est ici 192.168.0.165. il est possible d'avoir plusieurs connexions, ici le wifi du rasperry est activé et en même temps il est braché filaire, chaque branchement a sa propre adresse ainsi un ping (pour vérifier si l'adresse est accessible) peut être envoyé pour chaque adresse depuis un autre ordinateur connecté au même réseau local ;

dpt@dpt-Dell-System-XPS-L322X ~ $ ping 192.168.0.165
PING 192.168.0.165 (192.168.0.165) 56(84) bytes of data.
64 bytes from 192.168.0.165: icmp_seq=1 ttl=64 time=1.64 ms
64 bytes from 192.168.0.165: icmp_seq=2 ttl=64 time=1.74 ms
64 bytes from 192.168.0.165: icmp_seq=3 ttl=64 time=1.76 ms

dpt@dpt-Dell-System-XPS-L322X ~ $ ping 192.168.0.140
PING 192.168.0.140 (192.168.0.140) 56(84) bytes of data.
64 bytes from 192.168.0.140: icmp_seq=1 ttl=64 time=1.62 ms
64 bytes from 192.168.0.140: icmp_seq=2 ttl=64 time=64.5 ms
64 bytes from 192.168.0.140: icmp_seq=3 ttl=64 time=42.2 ms

Q : Vous avez oublié votre mot de passe d'administration de Nextcloud, n'avez pas configuré la messagerie afin de pouvoir le récupérer et aimeriez le réinitialiser.
R :

  • Ouvrez un Terminal sur votre Pi.
  • Affichez les services de Docker : docker ps
  • Repérez la ligne correspondante à :
    • IMAGE = “nextcloud:xx”
    • COMMAND = ”/entrypoint.sh apac…”
    • NAMES = “nextcloud_nextcloud.1.9hmfo25uzy4p1u1zodbva64xy” (valeur différente pour vous)
  • C'est l'information de la colonne “NAMES” dont vous aurez besoin dans la commande suivante.

  • Saisir : docker exec -it nextcloud_nextcloud.1.9hmfo25uzy4p1u1zodbva64xy bash (remplacez la valeur “NAME” avec la valeur que vous obtenez)
  • Vous serez alors en “sudo” dans le dossier de Nextcloud où on eut réinitialiser le mot de passe avec cet invite : root@7cdbb827244e:/var/www/html#
  • Visualisez le nom du stockage de Nextcloud : ls -al
  • Vous voyez que c'est “www-data”

  • Effacez l'écran : clear
  • Installez “sudo” : apt update && apt install sudo
  • Saisir : sudo -u www-data php ./occ user:resetpassword votrecompte (remplacez “votrecompte” par le compte administrateur que vous avez utilisé lors de l'installation de l'image Nextcloud)
  • Saisir un nouveau mot de passe (saisir 2 fois)
  • Message “Successfully reset password for votrecompte”
  • Sauvegardez ce nouveau mot de passe dans KeePass. ;-)

8) Vidéos maison du projet

Cette section présente des vidéos créés par les collaborateurs du projet Héberges ta vie.
Répertoire des vidéos de Benoît Vézina

  • Obtenir un nom de domaine :
    • Démonstration de création de nom de domaine chez Freenom.com qui offre des noms avec extension .tk .jq .ga gratuitement pour une durée de 3 mois.
    • Montre l'exemple avec lapatente.tk lié à l'adresse courriel lapatente@gmail.com
    • L'étape suivante du prochain vidéo sera de faire déplacer votre nom de domaine de votre fournisseur (Freenom, Namesilo ou autre) vers un serveur de nom de domaine personnalisé (custom nameserver) supporté par notre projet, comme Cloudflare (ou Gandi si vous avez acheté votre nom de domaine à cet endroit).
  • Délégation du DNS à Cloudflare :
    • Démonstration de création de compte chez Cloudflare lié à l'adresse courriel lapatente@gmail.com
    • Ajout du site www.lapatente.tk (plan gratuit)
    • Saisie des noms de domaine Cloudflare qui répondront quand vos utilisateurs visiteront www.lapatente.tk
    • Ce changement peut prendre jusqu'à 24 hrs pour la prise en charge de votre nom de domaine
    • L'étape suivante du prochain vidéo sera d'associer l'adresse IP de notre Raspberry Pi (sur notre réseau local à la maison) à notre nom de domaine.
  • Création d'hôtes chez Cloudflare :
    • Démonstration de configuration d'un nom de domaine chez Cloudflare
    • Les “A NAME” versus les “CNAME”
    • Ajout de odoo, nextcloud, admin (Potainer l'orchestrateur de containers), et traefik (visualisation du trafic)

9) Références utiles

Portainer.io : Site officiel de Portainer (voir section “DETAILED OVERVIEW” du bouton “LIVE DEMO”)
Docker Hub : Site officiel de Docker Hub (voir lien “Explore” pour découvrir les Repositories officiels disponibles).
Docker Community : Communauté Docker (pour s'impliquer avec des enthousiastes de Docker qui partagent une passion pour les containers virtuels, les microservices et les appications distribuées).
blog.hypriot.com :

  • Blog officiel de Hypriot (communauté grandissante autour de Docker sur des périphériques ARM -comme le Raspberry Pi-).
  • Images pour Raspberry Pi prêtes à l'utilisation

Tutoriels Dockers for beginners : Configuration initiale, exécuter votre premier container, Webapps avec Docker, déployer une App avec Swarm).
blog de Yohann Ciurlik : Blog d'un utilisateur (dernière mise à jour en octobre 2017) présente Portainer, une interface pour gérer vos containers Docker et clusters Swarm
https://raspbian-france.fr/ : Tutoriels de grande qualité surtout si vous préférez le français à une autre langue

  • projets/auto-hebergement_maison.txt
  • Dernière modification: 2018/09/19 21:08
  • par dpascot