====== Installation de l'environment de développement ======
Il est possible d'installer PeerTube en [[https://en.wikipedia.org/wiki/Deployment_environment#Production|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 [[https://github.com/Chocobozzz/PeerTube/blob/develop/.github/CONTRIBUTING.md#develop|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 ====
//[[https://www.docker.com/|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:
* [[https://docs.docker.com/install/linux/docker-ce/centos/|CentOS]]
* [[https://docs.docker.com/install/linux/docker-ce/debian/|Debian]]
* [[https://docs.docker.com/install/linux/docker-ce/fedora/|Fedora]]
* [[https://docs.docker.com/install/linux/docker-ce/ubuntu/|Ubuntu]]
Recommandation: faire aussi la [[https://docs.docker.com/install/linux/linux-postinstall/#chkconfig|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 [[https://hub.docker.com/|Docker Hub]], ou les construire (//build//) en local avec un [[https://docs.docker.com/engine/reference/builder/|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.
[[ https://github.com/Chocobozzz/PeerTube/tree/develop/support/docker/dev | Sources ]]
[[ https://github.com/Chocobozzz/PeerTube/pull/1173 | Pull Request]]
Utilisation:
- Si ce n'est pas déjà fait, [[txs:contrib:peertube-a18:github_tips#copier_le_repo_du_mainteneur_sur_son_propre_githuble_fork|faire un fork de PeerTube sur GitHub]]
- Télécharger l'image Docker depuis le [[ https://hub.docker.com/r/chocobozzz/peertube-dev/ | 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''''-d'' permet de lancer le conteneur en mode détaché (sinon, lorsqu'on quitte le terminal, le conteneur est détruit)''-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)''-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//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.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p'', puis relancer ''npm run dev'' **depuis le conteneur** [[https://stackoverflow.com/questions/34662574/node-js-getting-error-nodemon-internal-watch-failed-watch-enospc#34664097|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 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 [[https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/dependencies.md|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: [[https://www.youtube.com/watch?v=woJdMOcWGTk|MOOC Objectif IPv6]], [[https://www.youtube.com/watch?v=ZEOt-eP4jsc|Lancement mondial de l'IPv6 avec Cisco]]
Plusieurs sociétés proposent de louer des serveurs, voici deux exemples:
* [[https://www.gandi.net/en/cloud|Gandi]]
* 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
* [[https://www.scaleway.com/|Scaleway]]
* 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 [[https://school.picasoft.net/modules/sec01/co/chiffrement.html|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'': ''id_rsa'' (la clé privée) et ''id_rsa.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 [[https://github.com/Chocobozzz/PeerTube/blob/develop/.github/CONTRIBUTING.md#develop|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 [[https://webpack.js.org/concepts/hot-module-replacement/|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 [[https://docs.joinpeertube.org/lang/en/devdocs/vps.html|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 [[https://docs.joinpeertube.org/lang/en/devdocs/troubleshooting.html|section Troubleshooting du site joinpeertube.org]].