Installation de l'environment de développement

Il est possible d’installer PeerTube en production d’une multitude de façons différentes: Docker, YunoHost, installation manuelle…

Mais lorsqu’on veut faire du développement, il faut suivre le guide de développement pour faire une installation manuelle.

Plusieurs approches sont possibles:

  • Installation en local sur un pc GNU/Linux
  • Installation sur un serveur loué

L’installation demande une quantité importante de RAM. Des tests sur des machines avec 1Go et 2 Go ont échoué. Au moins 4 Go sont recommandés.

Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n’importe quel serveur

On utilisera Docker pour créer un conteneur ou tourneront PeerTube et ses dépendances. Ceci offre quelques avantages par rapport à une installation directe:

  • On aura un environnement isolé, donc on évitera des conflits entre paquets
  • Installation reproductible (donc plus facile à déboguer)
  • On peut repartir de zéro en peu de temps

Cependant, il faudra un PC avec assez de ressources.

Installer Docker

Docker existe en version entreprise (EE: Enterprise Edition, payante) et communautaire (CE: Community Edition, gratuite). On utilisera la version communautaire. Vous pouvez trouver des guides d’installation ici:

Recommandation: faire aussi la post-installation (juste les sections “Manage Docker as a non-root user” et “Configure Docker to start on boot”)

Fonctionnement de Docker

Pour créer un conteneur, il nous faut d’abord une image. On peut télécharger des images depuis le Docker Hub, ou les construire (build) en local avec un Dockerfile. De manière simplifiée, un Dockerfile est un fichier texte contenant toutes les commandes nécessaires pour construire une image. On y retrouve notamment des commandes Unix, comme celles qu’on pourrait taper dans un terminal, précédées de méta-commandes Docker. Voici un exemple simplifié de Dockerfile:

FROM ubuntu

RUN apt-get update
RUN apt-get install -y python python-pip wget

Ici, FROM et RUN sont des méta-commandes Docker. FROM indique qu’on part de l’image ubuntu, déjà existante, et RUN permet d’exécuter des commandes “à l’intérieur” de l’image ubuntu.

Image de développement

Une image docker de développement a été réalisée dans le cadre de cette TX, pour remplacer l’ancienne image officielle.

Sources Pull Request

Utilisation:

  1. Si ce n’est pas déjà fait, faire un fork de PeerTube sur GitHub
  2. Télécharger l’image Docker depuis le Docker Hub :
    docker pull chocobozzz/peertube-dev
  3. Lancer le conteneur: docker run -d -i -p 3000:3000 -p 9000:9000 –name peertube chocobozzz/peertube-dev<html></br></html>-d permet de lancer le conteneur en mode détaché (sinon, lorsqu’on quitte le terminal, le conteneur est détruit)<html></br></html>-i permet de garder le STDIN ouvert, même si on est en mode détaché (sinon, le conteneur s’arrête dès qu’on le lance)<html></br></html>-p permet de mapper des ports de la machine hôte à ceux du conteneur.
  4. Ouvrir un shell à l’intérieur du conteneur: docker exec -it peertube bash
  5. Configurer git pour pointer sur le fork : git remote set-url origin https://github.com/<nomd’utilisateur>/PeerTube.git - Exécuter npm run dev - S’il y a des erreurs avec nodemon, exécuter depuis la machine hôte echo fs.inotify.maxuser_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p, puis relancer npm run dev depuis le conteneur<html></br></html> Plus d'infos
  6. Ouvrir un navigateur et aller sur localhost:3000. L’interface web de PeerTube devrait apparaître.
  7. Vérifier qu’il est possible de se connecter avec l’utilisateur root et le mot de passe test. Si ce n’est pas possible, il y a sûrement des soucis avec la base de données.

Notes sur le Dockerfile:

  • Lorsqu’on clone le dépôt PeerTube, la branche par défaut est develop (donc pas besoin de git checkout)
  • nginx est listé dans les dépendances de PeerTube, mais on en a pas besoin pour l’image Docker de dev (il est utilisé pour obtenir un certificat SSL avec Certbot)

Cette solution est simple à mettre en place, et permet de ne pas surcharger son propre PC, de repartir de zéro en peu de temps (si jamais l’installation plante), de faire des sauvegardes (snapshots)… L’inconvénient est qu’elle est payante.

Il existe plusieurs sortes de serveurs:

  • “Bare Metal” : On vous loue une machine physique
  • Virtual Private Server (VPS) : On vous loue une Virtual Machine (VM), à laquelle on assigne une certaine quantité de ressources (espace disque, RAM…)

Il existe aussi plusieurs architectures (notamment X86_64, ARM et ARM64), plusieurs systèmes d’exploitation (Debian, Ubuntu, …) et même des images déjà faites (Wordpress, GitLab, NextCloud…)

Enfin, on peut vous proposer d’avoir une adresse IPv4 + une adresse IPv6, ou juste une adresse IPv6.

Voici quelques recommandations:

Bare Metal ou VPS : Pas d'importance
Architecture : X86_64
Système d'exploitation : Au choix, mais le plus simple à configurer semble Ubuntu 18 (Bionic)
Ressources : IPv4 et au moins 4 Go de RAM

Il vous faut une adresse IPv4 pour pouvoir vous connecter au serveur. Il est intéressant de comprendre pourquoi, mais ce n’est pas l’objet de cette page. Voici quelques liens utiles sur IPv4 vs IPv6: MOOC Objectif IPv6, Lancement mondial de l'IPv6 avec Cisco

Plusieurs sociétés proposent de louer des serveurs, voici deux exemples:

    • Hébergeur co-fondé par des libristes, qui a servi à plusieurs moments la cause du logiciel et de l’internet libre (entre autres financièrement).
    • Gandi fonctionne par crédits : vous achetez des crédits, puis vous les transformez en ressources pour votre serveur.
    • Désavantage: c’est assez cher
    • Hébergeur français pas cher

Clé ssh

Pour se connecter à un serveur, on utilise couramment le protocole SSH (secure shell). Celui-ci chiffre la connexion entre notre PC et notre serveur à l’aide du chiffrement asymétrique. Vous devez donc générer une paire de clés. Sur les distributions GNU/Linux récentes, il suffit d’exécuter ssh-keygen (sans options), et d’appuyer sur “Entrée” pour laisser les choix par défaut. Cette commande va générer deux fichiers dans le dossier ~/.ssh: idrsa (la clé privée) et idrsa.pub (la clé publique). Lorsque vous allez créer votre serveur, on vous demandera une clé ssh. Il faut renseigner sa clé publique.

Une fois que le serveur sera loué, vous pouvez suivre le guide de développement.

Les modifs nécessaires dans les fichiers de config

Le front va tourner sur le port 3000 du nom de domaine du VPS. L’API tourne sous ce nom de domaine donc les requêtes HTTP doivent pointer dessus. Pour ce faire, deux fichiers à modifier :

  • config/defaut.yaml
listen:
  // configurer le hostname qui écoute les requêtes API
  hostname: 'localhost'
  port: 9000

webserver:
  https: false
  // configurer le hostname sur lequel le webserver va faire pointer les requêtes API
  hostname: 'localhost'
  port: 9000
  

Remplacer localhost par le nom de domaine du VPS. Exemple : peertube-clement.picasoft.net.

  • client/src/environments/environment.hmr.ts

Comme on fait tourner l’instance en mode dev, on est en live-reload, grâce à l’outil Hot Module Replacement (HMR) de WebPack. On modifie donc le fichier .hmr :

export const environment = {
  production: false,
  hmr: true,
  apiUrl: 'http://localhost:9000'
}

Remplacer localhost par peertube-clement.picasoft.net. Toutes les requêtes API seront ainsi bien formées avec le nom de domaine souhaité.

Nous avons ajouté ces recommandations à la documentation de PeerTube.

Lorsqu’on teste le code qu’on vient d’écrire, il est possible d’introduire des erreurs dans la base de données qui sont difficiles à corriger.

Heureusement, il existe une commande pour effacer la base de données, les logs, les vidéos… sans tout réinstaller:

npm run danger:clean:dev

Nous avons rencontré plusieurs difficultés lors de l’installation de l’environnement de développement de PeerTube. Après avoir réussi à les résoudre, nous avons contribué à la documentation. Nos contributions sont visibles dans la section Troubleshooting du site joinpeertube.org.

  • txs/contrib/peertube-a18/installation_dev.txt
  • de 127.0.0.1