**//Fait//** ====== Autohébergement maison de Hypriot avec Portainer et Docker sur 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 ordinateur personnel (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. ===== Le matériel de votre ordinateur est-il compatible ? ===== {{:projets:auto-hebergement_maison:intel-virtualisation-1.png?direct&400|}} D'abord, vous devez vous assurer que le processeur de votre ordinateur (portable ou tour) supporte la virtualisation. L'idée est d'aller vérifier sur le site du constructeur de votre processeur si le processeur de l'ordinateur à installer supporte la virtualisation. Si vous ne savez pas le type de processeur, cherchez-le sur le site de votre fabricant. Quand vous savez le modèle de votre processeur et son constructeur, vérifiez. __Exemple:__ Vous avez une tour HP Pavilion MediaCenter m8187c achetée en 2007 qui ne demande qu'à se rendre utile à nouveau. - Je vais sur le site de [[https://support.hp.com/ca-en/document/c01080608|HP]] - À la section "Processor" je constate qu'il s'agit d'un **Core 2 Duo E750** ce qui signifie qu'il comporte 2 coeurs mais surtout que c'est le modèle **E6750** fabriqué par **Intel** - Puisque c'est un vieux modèle, il risque d'être difficile à trouver sur le site (canadien français) du fabricant [[https://www.intel.ca/content/www/ca/fr/homepage.html?_ga=2.103160772.59942515.1530481420-1122348083.1530481420|Intel]]. - Donc simplement, sur Google, je cherche : **intel e6750 specs** qui m'amène à la page des [[https://ark.intel.com/fr/products/30784/Intel-Core2-Duo-Processor-E6750-4M-Cache-2_66-GHz-1333-MHz-FSB|spécifications de mon processeur Intel E6750]] - Ensuite je cherche la spécification **technologie de virtualisation** et je constate que c'est à **oui**, donc je peut utiliser cet ordinateur pour y installer __Docker qui nécessite la virtualisation__. :-P ===== Téléchargement de l'image d'Ubuntu Server 18.04 LTS ===== {{:projets:auto-hebergement_maison:ubuntu-server-download-1.png?direct&400|}} - [[https://www.ubuntu.com/download/server|Télécharger Ubuntu Server 18.04 LTS]] qui est la version la plus récente supportée jusqu'en avril 2023. - À partir du fichier **ubuntu-18.04-live-server-amd64.iso** sur un poste de travail Linux, ouvrir ce fichier avec **Brasero** (ou autre logiciel de votre choix). - Si l'application n'est pas déjà sur votre poste Linux, vous pouvez l'installer à partir de votre "gestionnaire de logiciels". ===== Graver l'image ISO sur un disque DVD ===== Hé oui, je suis de la vieille école qui n'utilise pas encore les clés USB pour graver ses images. :-? - Démarrez Brasero, "Graver une image", sélectionner l'image téléchargée ainsi que votre graveur de DVD, puis "Graver" (prend environ 3 min) - Après la gravure, "Fermer" et fermer l'application Brasero. {{:projets:auto-hebergement_maison:brasero-burn-image-1.png?direct&400|}} ===== Installer Ubuntu Server 18.04 sur votre ordinateur ===== - Copier les informations que vous souhaitez conserver du système actuellement installé, le cas échéant. - Insérer le DVD, redémarrer l'ordinateur et sélectionnez la touche du clavier pour démarrer sur le DVD (souvent F10 = Setup, F8 ou F3). - Brancher à Internet. - Suivre les étapes d'installation (le club LinuQ est là pour vous assister, au besoin, lors d'une de ses activités). ===== Configuration initiale de votre serveur ===== {{:projets:auto-hebergement_maison:ubuntu-18.04-lts-bionic-beaver1.png?direct&400|}} - Aller à la page [[https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04|Initial Server Setup with Ubuntu 18.04]] - Suivez toutes les étapes (encore une fois, le club LinuQ est là pour vous assister, au besoin, lors d'une de ses activités) ; - Étape 1 - Connexion root - Étape 2 - Créer un nouvel utilisateur - Étape 3 - Donner à cet utilisateur les privilèges d'administration (root) - Étape 4 - Ajouter une clé publique d'authentification (et copie de la clé publique SSH à l'utilisateur xxx avec l'option 1 (sshcopy-id) - Étape 5 - Désactiver l'authentification par mot de passe (recommandé) - Étape 6 - Essais de connexion - Étape 7 - Installer un pare-feu de base (//UFW firewall//) Vous avez maintenant une base solide pour votre serveur. Vous pouvez maintenant installer n'importe quel logiciel désiré sur votre serveur. ===== Installation de l'application Docker sur votre serveur Ubuntu 18.04 ===== {{:projets:auto-hebergement_maison:docker-ubuntu-server-1.png?direct&400|}} * Source : [[https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04|How To Install and Use Docker on Ubuntu 18.04]] Docker est une application qui simplifie et accélère l'exécution des processus applicatifs dans des conteneurs, qui sont comme des machines virtuelles, seulement plus portables, plus respectueux des ressources et plus dépendants du système d'exploitation hôte. Pour une introduction détaillée aux différents composants d'un conteneur Docker, consultez [[https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components|The Docker Ecosystem : An Introduction to Common Components (L'écosystème Docker : une introduction aux composants communs)]]. * Nous installerons Docker sur une installation existante de Ubuntu 18.04. * Assurez-vous d'avoir créé un compte super-utilisateur avec les privilèges de //sudo// (fait aux étapes 2 & 3 de la section [[#configuration_initiale_du_serveur|Configuration initiale du serveur]] précédente). * Toutes les commandes de ce tutoriel devraient être exécutées avec un compte non administrateur. Si des accès //root// sont requis, ils seront précédées par **sudo**. * Nous travaillerons à partir d'un poste de travail utilisant une connexion SSH sécurisée vers le serveur Ubuntu. Vous pourrez alors au besoin, lors du prochain arrêt, le déplacer, retirer l'écran et le clavier (le laisser branché à Internet) car nous n'y accéderons que de cette façon. * Se connecter * Si "* System restart required *" s'affiche, faire **sudo reboot** ou **sudo init 6** * Pour seulement arrêter le serveur, faire **sudo halt** ou **sudo init 0** * Nous allons mettre à jour les paquets de Ubuntu (un message comme "54 packages can be updated. 3 updates are security updates." s'est probablement affiché à la connexion): * **sudo apt update** * **sudo apt upgrade** * Attendre la fin des mises à jour (env 5 min, voir la barre de progression) - Aller à la page [[https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04|How To Install and Use Docker on Ubuntu 16.04 ]] - Suivez toutes les étapes (identiques pour la version 18.04) (avons-nous besoin de le répéter, le club LinuQ est là pour vous assister, au besoin, lors d'une de ses activités) ; - **Étape 1 - Installation de Docker** * L'installation de Docker vous donne désormais non seulement le service Docker (daemon) mais aussi l'utilitaire de ligne de commande docker ou le client Docker. Nous allons explorer comment utiliser la commande docker plus tard dans ce tutoriel. - **Étape 2 - Exécution de la commande Docker sans privilège sudo** * Le reste de ce tutoriel suppose que vous exécutez la commande docker en tant qu'utilisateur dans le groupe d'utilisateurs docker. Si vous choisissez de ne pas le faire, veuillez ajouter **sudo** aux commandes. - **Étape 3 - Utilisation de la commande Docker** * Les conteneurs Docker sont exécutés à partir d'images Docker. Par défaut, on extrait ces images de Docker Hub, un dépôt Docker géré par Docker, la société à l'origine du projet Docker. N'importe qui peut créer et héberger ses images Docker sur Docker Hub, donc la plupart des applications et distributions Linux dont vous aurez besoin pour exécuter les conteneurs Docker contiennent des images hébergées sur Docker Hub. - **Étape 4 - Utilisation des images Docker** * Les conteneurs Docker sont lancés (exécutés) à partir d'images Docker. Par défaut, on extrait ces images de Docker Hub, un dépôt Docker géré par Docker, la société à l'origine du projet Docker. N'importe qui peut créer et héberger ses images Docker sur Docker Hub, donc la plupart des applications et distributions Linux dont vous aurez besoin pour lancer les conteneurs Docker contiennent des images hébergées sur Docker Hub. * Comme vous le verrez plus tard dans ce tutoriel, les images que vous utilisez pour lancer des conteneurs peuvent être modifiées et utilisées pour générer de nouvelles images, qui peuvent ensuite être publiées (//push//, est le terme technique) vers Docker Hub ou d'autres dépôts Docker. - **Étape 5 - Lancer un conteneur Docker** * Les conteneurs sont très utiles, interactifs (similaires à des machines virtuelles) mais plus économes au niveau des ressources utilisées (//resource-friendly//). * Lisez cette section pour information seulement. Nous n'installerons pas le container Ubuntu maintenant, puisque nous utiliserons les images montées dans le Framagit de LinuQ plus tard. - **Étape 6 - Modifier un conteneur et le sauvegarder sous une nouvelle image Docker** * Lorsque vous démarrez une image Docker, vous pouvez créer, modifier et supprimer des fichiers comme vous le feriez avec une machine virtuelle. Les modifications que vous apportez s'appliqueront uniquement à ce conteneur. Vous pouvez le démarrer et l'arrêter, mais une fois que vous l'avez détruit avec la commande **docker rm**, les changements seront définitivement perdus. * Cette section montre comment enregistrer l'état d'un conteneur en tant que nouvelle image Docker. * Lisez cette section pour information seulement. * On y mentionne que les images peuvent également être construites à partir de ce qu'on appelle un **Dockerfile** (processus qui dépasse la portée de cet article). - **Étape 7 - Lister les conteneurs Docker** * Après avoir utilisé Docker pendant un certain temps, vous aurez de nombreux conteneurs actifs (en cours d'exécution) et inactifs sur votre ordinateur. * Lisez cette section pour information seulement. * Pour voir les conteneurs actifs : **docker ps** * Pour voir tous les conteneurs (actifs et inactifs) : **docker ps -a** * Pour voir le dernier conteneur créé : **docker ps -l** * Pour arrêter un conteneur en exécution ou actif : **docker stop //container-id//** (le contaider-id s'affiche avec **docker ps**) - **Étape 8 - Publier des images Docker dans un Registre Docker (Repository Docker)** * La prochaine étape logique après la création d'une nouvelle image à partir d'une image existante consiste à la partager avec certains de vos amis, le monde entier sur Docker Hub ou un autre registre Docker auquel vous avez accès. Pour pousser une image vers Docker Hub ou tout autre registre Docker, vous devez y avoir un compte. * Cette section vous montre comment transférer une image Docker vers Docker Hub. * Lisez cette section pour information seulement. * On donne aussi un lien pour savoir [[https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04|comment créer votre propre registre Docker privé]] - **Conclusion** * Docker contient beaucoup plus que ce qui a été donné dans cette page, mais cela devrait suffire à vous aider à travailler avec Ubuntu 18.04. Comme la plupart des projets open source, Docker est construit à partir d'une base de code en développement rapide, alors prenez l'habitude de visiter la page du blog du projet ([[https://blog.docker.com/|docker blog]]) pour les dernières informations. * Consultez également les [[https://www.digitalocean.com/community/tags/docker?type=tutorials|autres didacticiels Docker]] dans la communauté DO. * La prochaine étape consiste en l'installation de Dockerswarm, Portainer et Traefik. Vous pourrez ensuite installer des images Docker pour PC selon vos besoins. ===== Initialisation de Dockerswarm et lancement de la pile Portainer (incluant client agent et Traefik) ===== * Dans cette section, nous supposons que vous avez lu, voir expérimenté, les étapes d'installation de Dockerswarm et de Portainer sur un Raspberry Pi. Nous référerons donc à cette section [[auto-heber:hypriot#initialisation_de_dockerswarm_et_lancement_de_la_pile_portainer_incluant_client_agent_et_traefik|Initialisation de Dockerswarm et lancement de la pile Portainer (incluant client agent et Traefik)]] comme source et décrirons les différences pour une installation sur un serveur Ubuntu 18.04. Connectez-vous à votre serveur (via son adresse IP) avec un compte utilisateur administrateur par SSH à partir d'un ordinateur connecté au même réseau que votre serveur, par exemple : $ ssh mon_compte@192.168.10.103 S'assurer que les paquets d'Ubuntu sont à jour sur votre serveur : sudo apt update && sudo apt upgrade S'assurer d'avoir configuré votre routeur afin de rediriger les ports 443, 22 (et 80 si possible) vers l'adresse que votre routeur a attribuée à votre serveur : ^Name ^Protocol ^LAN Server | ^Virtual Server HTTP |TCP 80/80 |192.168.10.103 | ^Virtual Server HTTPS |TCP 443/443 |192.168.10.103 | ^SSH |TCP 22/22 |192.168.10.103 | 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 [[auto-heber:rpi:cloudflare|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 3000130000. Maintenant, toujours d'un ordinateur dans le même réseau, ouvrez votre navigateur et donnez-lui votre adresse et le port 30000 : http://192.168.10.103:30000 Portainer devrait vous assister dans la création de votre compte administrateur... {{:projets:portainer-login.png?direct&400|}} * 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 * Dans Portainer, la première chose à faire est d'aller dans le menu "Setting"... * Désactiver la demande de donation activer ("Disable donation header" "Hide external contributions") * Activez "Use custom logo", changez le logo par utilisez un des logos de LinuQ, soit le Tux patriote : allez sur la page [[site: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 (**attention différente du Pi car contient .pc.json**) : https://raw.githubusercontent.com/portainer/templates/master/templates.json par celle-ci : 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.103** dans le champs "Public IP" * Valider en cliquant sur le bouton "Update endpoint" * La prochaine étape sera de choisir une image Docker pour PC répondant un besoin et de l'installer. Nous avons installé l'image "CouchPotato". ===== Installation de l'image Docker CouchPotato sur votre serveur Ubuntu 18.04 ===== {{:projets:auto-hebergement_maison:couchpotato-1.jpg?direct&400|}} * Voir la section [[auto-heber:hypriot#couchpotato|Les images d'intérêt - CouchPotato]] (section interrompue ici) [[auto-heber:accueil|retour projet auto hébergement]]