C'est moi qui commande!

C'est moi qui commande!

Table des matières

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

zarev

->.<-
🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.