Si vous voulez vous lancer dans le self-hosting, je parierais la moitié de mon hamster qu'il y a probablement, dans un coin de votre tête, l'idée que c'est chiant à cause des lignes de commande, voir, des nombreuses lignes de commande à connaître pour se lancer dans le self-hosting avec Linux et Docker.
J'ai envie de vous dire non. Et je vais dire non. Et vous direz non vous-même, je l'espère, après la lecture de ce guide du strict nécessaire à connaître.
Je parle bien du strict nécessaire.
Si je vous disais, qu'en réalité, au minima du minima, vous n'auriez besoin de connaitre que 6 commandes (mensonge à 50% vrai), du moins au début.
- Pour se connecter au serveur => ssh utilisateur@ip
- Mettre à jour sa distribution => sudo apt update && sudo apt upgrade -y
- Créer un dossier => sudo mkdir nom_du_dossier
- Se déplacer dans les dossiers => cd & cd ..
- Créer un fichier => sudo nano nom_du_fichier
- Crée et démarre des conteneurs pour tous les services spécifiés dans le fichier (on va résumer ça par "installer l'application' => docker compose up -d
Tout ce qui suit est en adéquation avec le reste du site. C'est à dire dans le cadre de l'utilisation d'un docker-compose sur un serveur Debian ou est installé Docker.
Cet article à pour but de dédramatiser l'utilisation des commandes sous Linux.
En fin d'article je vous propose un complément de commandes qui servent très souvent.
Tout d'abord on va séparer en deux la liste des commandes.
Il y a celles qui vont avoir un impact sur Debian même, le système d'exploitation.
- Pour se connecter:
ssh utilisateur@ip
- Mettre à jour sa distribution:
sudo apt update && sudo apt upgrade -y
- Créer un dossier:
sudo mkdir nom_du_dossier
- Créer un fichier:
sudo nano nom_du_fichier
- Se déplacer dans les dossiers:
cd /nom_du_dossier
ou
cd ..
Et celles qui vont avoir un impact sur Docker.
- Créer et démarrer des conteneurs, on va résumer ça par "installer l'application":
docker compose up -d
Se connecter en SSH
La première commande logique à connaître est probablement celle pour se connecter en SSH à votre serveur.
Dans la majorité de cas, un serveur est livré/installé avec le SSH sur le port 22.
Vu que c'es le port par défaut du protocole SSH, inutile de le préciser dans la commande:
ssh utilisateur@ip
Si le port SSH n'est pas le port 22 (on peut modifier ce port, déjà par sécurité) mais le 1122, précisez le port souhaité comme ceci:
ssh utilisateur@ip -p 1122
- utilisateur: soit vous avez installé le serveur et vous savez donc l'utilisateur que vous avez choisi, ou vous avez un serveur distant et les identifiants ont été communiqués.
- ip: vous indiquez l'IP du serveur.
- -p: -p (p pour port), suivi du port que l'on veut joindre, indique le port précis sur lequel on veut se connecter, le -p n'est nécessaire uniquement que si on n'utilise pas le port 22 par défaut.
Mettre à jour sa distribution
La seconde commande est d'une importance capitale. Elle permet de mettre à jour sa distribution. Négliger la mise à jour est une erreur, selon le niveau de "gravité" de la mise à jour, vous pourriez exposer votre serveur à des dangers superflus, inutilement.
apt update && apt upgrade -y
ou encore:
sudo apt update && sudo apt upgrade -y
Dans ces deux commandes on peut retrouver les éléments suivants:
apt update => recherche les mises à jour disponibles
&& => permet de lier deux commandes, une fois que l'une est terminée, il fait la suivante.
apt dist-upgrade => installe les mises à jour.
-y => dès le moment ou vous validez l'installation des mises à jour, une confirmation vous sera demandée. Cela implique de taper y et faire Enter avec le clavier.
Le -y, (y pour yes) va indiquer que toute la commande peut aller jusqu'au bout sans s’interrompre et demander de confirmation. Il sait déjà que vous êtes d'accord. Il le valide automatiquement pour vous.
sudo => C'est un groupe, et quand un compte utilisateur normal est dedans, le compte utilisateur normal aura le droit d'exécuter des commandes avec des privilèges plus élevés.
De base, un utilisateur normal n'est pas en mesure d'effectuer des opérations plus délicates comme la "simple mise à jour".
La commande sera donc précédée de sudo pour avoir une élévation de privilège.
Pourquoi cette différence pour arriver au même résultat?
Justement parce qu'il existe des droits élevés réservés au super-utilisateur, le compte root. Si vous êtes connecté en tant que root, vous pouvez exécuter n'importe quelle commande sans demander la moindre permission (c'est aussi un bon moyen de faire des belles conneries).
Pour éviter de toujours utiliser le molosse, il existe, pour faire simple, un compte "normal" qui ne peut pas exécuter tout et n'importe quoi. Mais il est possible de l'ajouter dans le groupe sudo afin qu'il puisse exécuter une commande réservée au compte super-utilisateur.
Si vous avez suivi les tutoriels sur ce site pour monter votre serveur, vous avez créé un utilisateur normal que vous avez ajouté au groupe sudo.
Se déplacer dans les dossiers
Pour aller vers un dossier on tape:
cd /srv/appdata/plex
Pour revenir un dossier en arrière on tape:
cd ..
Notez l'espace entre le d et le premier des deux points.
Créer un dossier
Il faudra à un moment donné créer un dossier pour déployer votre application dedans.
Imaginons que vous vouliez installer Jellyfin. Il faudra donc créer un dossier Jellyfin.
La commande pour créer un dossier est: mkdir.
sudo mkdir jellyfin
Voilà, votre dossier est crée.
Créer un fichier
Il faudra également créer un fichier pour créer votre docker-compose, docker-compose qui est un fichier de configuration contenant toutes les informations nécessaires à la création d'un container.
On continue avec l'exemple de Plex. Il faudra créer un docker-compose pour Plex.
La commande pour créer un fichier est: nano.
sudo nano docker-compose.yml
On enregistre le fichier en faisant CTRL + X, on tape sur la touche y et valide avec la touche Enter.
Créer et démarrer des conteneurs
Une fois que vous avez créé le dossier de votre application, que vous avez créé votre docker-compose, il faudra déployer votre application. Rien de plus simple, il faut simplement taper cette commande:
docker compose up -d
Mise en pratique
C'est bien joli de mettre en avant qu'avec peu de commandes finalement, on peut commencer à utiliser Linux & Docker. Maintenant il va falloir le faire.
Imaginons que je veuille installer Jellyfin avec les commandes décrites dans cet artcile.
Se connecter au serveur en SSH
Donc je tape la commande comme je l'ai décrite plus haut, à savoir:
ssh utilisateur@ip
Ce qui donne:
ssh zarev@192.168.1.118
Mettre à jour sa distribution
Donc je tape la commande comme je l'ai décrite plus haut, à savoir:
sudo apt update && sudo apt upgrade -y
Tout a été fait sans autre intervention de ma part: ⚠️
Créer un dossier
Je voudrais créer le dossier appdata, dans lequel je mettrai toutes mes applications. De base il existe le dossier srv dans l'arborescence du système Linux, je vais utiliser ce dossier. C'est un choix comme un autre. Donc je tape la commande comme je l'ai décrite plus haut, à savoir:
sudo mkdir /srv/appdata
Tout s'est donc bien passé vu que je n'ai pas de message d'erreur.
Mais appdata sera le dossier global des applications, on va maintenant créer le dossier jellyfin dedans:
sudo mkdir /srv/appdata/jellyfin
Ce qui donne:
Se déplacer dans les dossiers
On va se déplacer dans les dossiers et se rendre dans le dossier de jellyfin.
Donc je tape la commande comme je l'ai décrite plus haut, à savoir:
cd
Ce qui donne:
cd /srv/appdata/jellyfin
Nous y sommes:
Vous pourriez très bien avoir envie de revenir en arrière et donc remonter le dossier:
cd ..
Si vous voulez remonter de 2 dossiers et ainsi de suite:
cd ../..
Créer un fichier
Maintenant on va créer le docker-compose de Jellyfin, qui n'est qu'un fichier texte au final.
Donc je tape la commande comme je l'ai décrite plus haut, à savoir:
sudo nano docker-compose.yml
Ce qui donne:
Cela va avoir comme effet d'ouvrir une fenêtre ou il n'y a rien dedans. C'est le moment de copier/coller (soit avec CTRL + V ou CTRL + SHIFT + V) le docker-compose que je vous propose ici:
version: "2.1"
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- JELLYFIN_PublishedServerUrl=192.168.0.5 #optional
volumes:
- /srv/appdata/jellyfin/library:/config
- /srv/appdata/jellyfin/tvseries:/data/tvshows
- /srv/appdata/jellyfin/movies:/data/movies
ports:
- 8096:8096
- 8920:8920 #facultatif
- 7359:7359/udp #facultatif
- 1900:1900/udp #facultatif
restart: unless-stopped
Maintenant il faut sortir de là. Il faut enregistrer le fichier en faisant CTRL + X.
On appuye sur la touche Y ou O:
Et on appuie sur la touche Enter pour confirmer, ce qui nous ramène ici:
Créer et démarrer des conteneurs
Il est temps de déployer Jellyfin.
Donc je tape la commande comme je l'ai décrite plus haut, à savoir:
docker compose up -d
C'est en cours de déploiement:
Quand c'est terminé, il vous confirme que Jellyfin est bien démarré:
Sur votre navigateur préféré, en nous rendant sur l'IP locale du serveur et le mort indiqué dans le tutoriel, on voit bien que Jellyfin est lancé:
Commandes supplémentaires
Gardez à l'esprit que ce n'est que le minimum des commandes à connaître.
Voici quelques commandes supplémentaires qui sont très utiles.
Supprimer un fichier:
sudo rm nom_du_fichier
Supprimer un dossier:
sudo rm -rf nom_du_dossier
Lister le contenu d'un dossier avec les dossiers/fichiers cachés:
ls -a
Ce qui donne:
Renommer un fichier ou un dossier
Imaginons qu'on se trouve dans le dossier fruits qui contient le dossier/fichier poire et qu'on veuille renommer en banane:
mv poire banane
Démarrer, redémarrer, stopper un container:
Démarrer un container:
docker start id_du_container
ou
docker start nom_du_container
Redémarrer un container:
docker restart id_du_container
ou
docker restart nom_du_container
Stopper un container:
docker stop id_du_container
ou
docker stop nom_du_container
Afficher quels containers Docker sont actifs:
docker ps
Afficher tous les containers, actifs ou non.
docker ps -a