Nous installerons successivement les logiciels libres suivants :
Exemples de plugins :
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).
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é :
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.
Source de l'image : blog.hypriot.com
Sous Linux, nous utiliserons la commande dd :
$ 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.
Remarque de François : il n'est pas nécessaire de formater la carte au préalable, la fonction dd recopie une image disque bit par bit en ignorant le contenu précédent.
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 :
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.
$ 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):
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
Faudrait aussi changer le mot de passe de pirate à moins qu'on puisse effacer l'utilisateur pirate, du moins si on ne le supprime pas
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.
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…
https://linuq.org/_media/projets/linuq2.png
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.
(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.
arm32v7
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 :
Odoo (avec Postgres) [ Benoît Vézina : plan ]
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]
MySQL [Benoît Vézina : non débutée]
Piwigo [pas débutée]
Diaspora [pas débutée]
Mastodon [pas débutée]
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/
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
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.
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
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 :
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
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 :
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