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.
Installation en local avec Docker
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.
Utilisation:
- Si ce n’est pas déjà fait, faire un fork de PeerTube sur GitHub
- Télécharger l’image Docker depuis le Docker Hub :
docker pull chocobozzz/peertube-dev
- 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. - Ouvrir un shell à l’intérieur du conteneur:
docker exec -it peertube bash
- Configurer git pour pointer sur le fork :
git remote set-url origin https://github.com/<nomd’utilisateur>/PeerTube.git
, puis relancer- 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 -pnpm run dev
depuis le conteneur<html></br></html> Plus d'infos - Ouvrir un navigateur et aller sur
localhost:3000
. L’interface web de PeerTube devrait apparaître. - Vérifier qu’il est possible de se connecter avec l’utilisateur
root
et le mot de passetest
. 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 degit 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)
Installation sur un serveur loué
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é publique).
Lorsque vous allez créer votre serveur, on vous demandera une clé ssh. Il faut renseigner sa clé publique.
(la clé privée) et
idrsa.pub
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.
Nettoyer l'installation
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
Troubleshooting
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.