Table des matières
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
Un Raspberry Pi
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.
Autres préalables
- La création d'une compte Framagit afin de vous connecter au Framagit de LinuQ
- Les étapes de ce projet sont documentées dans les sections ci-dessous. Nous les décrivons de façon à ce quelles puissent être compréhensibles par le grand public. Donc il n'est pas nécessaire de s'y connaître, mais simplement d'y être intéressé et de vouloir y contribuer selon vos disponibilités.
1) Hypriot
Source de l'image : blog.hypriot.com
Téléchargement de l'image de Hypriot
- 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. mais faut-il prendre la 1.8.0 pour la config actuelle à vérifier ?
- Aller sur la page GitHub du projet Hypriot.
- Sélectionner le lien hypriotos-rpi-v1.9.0.img.zip pour télécharger l'archive.
- 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.
- La suite de la procédure consistera à décompresser le fichier (archive) reçu et à le copier sur une carte mémoire SD.
Préparation de la carte mémoire
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
- Aide : aide 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.
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.
Démarrage de Hypriot sur le Pi
- Insérer la carte SD dans votre Pi
- Brancher le câble d'alimentation pour le démarrer
- Au premier lancement avec cette carte mémoire, attendre la fin du chargement (boot).
- Faire un retour de chariot (enter)
- “HypriotOS (Debian GNU/Linux 9) black-pearl tty1”
- Comme vous pouvez le voir, Hypriot utilise le système d'exploitation Debian.
- Hypriot attend votre authentification avec le compte et mot de passe par défaut.
- Authentifiez-vous avec le nom d'usager “pirate” et le mot de passe “hypriot”.
- 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
- 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):
- 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
2) Portainer et Traefik
Présentation de Portainer
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 :
- Aller sur Portainer.io
- Cliquer sur le bouton “LIVE DEMO”
- Lire la section “DETAILED OVERVIEW”.
- On trouve ici une documentation de l'interface https://www.spawnrider.net/2017/10/19/portainer-une-interface-pour-gerer-vos-containers-docker/
- On trouve ici une documentation technique https://portainer.readthedocs.io/en/stable/
Installation de Portainer (préalables)
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
Initialisation de Dockerswarm et lancement de la pile Portainer (incluant client agent et Traefik)
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…
- 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”
Tour de Portainer
- 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)
Liste des gabarits Portainer
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
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
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
RaspAP [Benoît Vézina : dev]
MariaDB
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
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
Piwigo [pas débutée]
- Description : Gestion d'une galerie de photos.
- Avec base de données MySQL.
Diaspora
Diaspora [pas débutée]
- Description : (à venir) En attendant, consultez la page Exit Facebook section “Alternative à Facebook : Framasphère et Diaspora”.
Mastodon
Mastodon [pas débutée]
- Description : (à venir) En attendant, consultez la page Exit Facebook section “Alternative à Twitter ou Tumblr : Mastodon”.
Pure Data
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 et mot de passe par défaut du Raspberry Pi
- Compte par défaut : pi
- Mot de passe initial : raspberry
Trouver l'adresse IP de son Raspberry Pi
- 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
- Connexion ssh ; quand on veut se connecter au rasperry en mode ligne de commande depuis un autre ordinateur
- Tout est expliqué ici https://raspbian-france.fr/controlez-raspberry-pi-ssh-ordinateur/
Mot de passe d'administration NextCloud oublié
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