====== Peertube - Installation et configuration ======
Attention, ce tuto est plutôt obsolète. Mieux vaut voir [[https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/production.md|la doc officielle]].
**Peertube est un logiciel libre semblable à Youtube pour reprendre le contrôle de vos vidéos en ligne.**
PeerTube, développé par Framasoft, est l'alternative libre et décentralisée aux plateformes vidéos, qui vous donne accès à plus de 400 000 vidéos proposées par 60 000 utilisateur⋅ices et visionnées plus de 15 millions de fois
Ce logiciel en ligne permet donc d'héberger toutes sortes de vidéos et de fichiers audio et il permet également de faire de la diffusion en direct - du live streaming
[[https://joinpeertube.org/|Le site officiel]] - [[https://github.com/Chocobozzz/PeerTube/|la page github]]
{{::peertube-logo.png|}}
===== Installation sur Debian 10 =====
On utilisera le serveur Apache pour rendre visible Peertube sur les Internets à l'adresse **videos.monsite.org**
**Important** : ce tutoriel n'aborde pas la configuration d'un Pare-Feu (pour le moment).
On installe au préalable quelques outils :
apt install htop nano nload iotop wget locate tmux net-tools
On commence ensuite en suivant [[https://www.aukfood.fr/peertube-sur-debian-10-avec-apache/| ce beau tuto réalisé par AukFood]] tout en gardant un oeil sur la [[https://docs.joinpeertube.org/install-any-os?id=installation|documentation officielle]].
Il y aura un choix à faire sur le format des vidéos et de la diffusion : [[https://docs.joinpeertube.org/admin-configuration?id=webtorrent-transcoding-or-hls-transcoding|WebTorrent transcoding ou HLS transcoding]].
==== Pré-requis ====
On a besoin de plusieurs programmes, dont [[https://yarnpkg.com/|yarn]] (manager de paquets) et [[https://nodejs.org/en/|nodeJS]] qui ont besoin d'être ajoutés aux sources d'APT.
apt install curl
curl -sL https://deb.nodesource.com/setup_12.x | bash -E -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt update
apt install unzip xz-utils nodejs yarn ffmpeg postgresql postgresql-contrib postgresql postgresql-client g++ make redis-server
==== Création d'un user spécifique ====
On décide d'installer Peertube dans le dossier **/var/www/videos.monsite.org**, qui est attribué comme //home// d'un nouvel utilisateur nommé **peertube**. On règle aussi les droits sur ce dossier.
mkdir -p /var/www/videos.monsite.org
useradd -s /bin/bash -d /var/www/videos.monsite.org peertube
chown -R peertube: /var/www/videos.monsite.org
chmod 2775 /var/www/videos.monsite.org
==== Création de la Base de données ====
Peertube utilise [[https://www.postgresql.org/|PostgreSQL]], on lui crée une base nommée **peertube**, gérée par un user nommé **peertube**.
su - postgres
createuser peertube -d -P -R
createdb -O peertube peertube
psql -c "CREATE EXTENSION pg_trgm;" peertube
psql -c "CREATE EXTENSION unaccent;" peertube
exit
==== Création des répertoires de base ====
Peertube utilisera ces répertoires pour fonctionner. Toujours dans le dossier **/var/www/videos.monsite.org**, on les crée en tant que l'utilisateur précédemment créé : **peertube**. Après la création, on entre dans le dossier **versions**.
su - peertube
mkdir -p config storage versions etc var/log/apache2
cd versions
==== Téléchargement de la dernière version ====
On récupère la dernière version, on la décompresse, on supprime l'archive, et on fait un lien symbolique dans le dossier racine de Peertube pour indiquer quelle est la dernière version.
VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4)
wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.tar.xz"
tar -xJf peertube-${VERSION}.tar.xz
rm -f peertube-${VERSION}.tar.xz
cd ../
ln -s versions/peertube-${VERSION} ./peertube-latest
==== Installation ====
On entre dans le dossier de la dernière version, puis, grâce à Yarn, on install les dépendances de Peertube. Ensuite on copie les modèles de config dans notre dossier **config** précédemment créé : ce sont ces fichiers que l'on modifie pour la configuration.
cd ./peertube-latest
yarn install --production --pure-lockfile
cp ./config/local-test.json ../../config/local-production.json
cp ./config/default.yaml.example ../../config/default.yaml
cp ./config/production.yaml.example ../../config/production.yaml
==== Configuration ====
On modifie le fichier de config :
nano /var/www/videos.monsite.org/config/production.yaml
Le fichier est long, mais une partie de la config pourra se faire directement dans l'interface de Peertube. Modifier le fichier en fonction de vos besoins et en remplaçant l'url de votre instance Peertube partout où il le faudra.
**Important** : Supprimer le suffixe '_prod' dans la configuration de la base de données.
...
webserver:
https: true
hostname: 'videos.monsite.org'
port: 443
...
database:
hostname: 'localhost'
port: 5432
suffix: ''
username: 'peertube'
password: 'peertube'
...
storage:
tmp: '/var/www/videos.monsite.org/storage/tmp/' # Used to download data (imports etc), store uploaded files before processing...
avatars: '/var/www/videos.monsite.org/storage/avatars/'
videos: '/var/www/videos.monsite.org/storage/videos/'
streaming_playlists: '/var/www/videos.monsite.org/storage/streaming-playlists/'
redundancy: '/var/www/videos.monsite.org/storage/videos/'
logs: '/var/www/videos.monsite.org/storage/logs/'
previews: '/var/www/videos.monsite.org/storage/previews/'
thumbnails: '/var/www/videos.monsite.org/storage/thumbnails/'
torrents: '/var/www/videos.monsite.org/storage/torrents/'
captions: '/var/www/videos.monsite.org/storage/captions/'
cache: '/var/www/videos.monsite.org/storage/cache/'
plugins: '/var/www/videos.monsite.org/storage/plugins/'
...
instance:
name: 'Mon instance !'
short_description: 'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.'
description: 'Vachement bien' # Support markdown
Pour la configuration email, lorsqu'on utilise **smtp**, il faut ajouter la ligne //enabled: true// au bloc //email// :
email:
enabled: true
et pour la configuration smtp par exemple :
# SMTP server to send emails
smtp:
# smtp or sendmail
transport: smtp
# Path to sendmail command. Required if you use sendmail transport
sendmail: null
hostname: mail.monmail.net
port: 587 # If you use StartTLS: 587
username: bot@mondomaine.org
password: ****
tls: false # If you use StartTLS: false - was true
disable_starttls: false
ca_file: null # Used for self signed certificates
from_address: 'bot@mondomaine.org'
==== Optimisation et démarrage ====
On copie la config spécifique TCP de Peertube au bon endroit (elle permet de gérer l'envoi des paquets aux clients lents) :
cp /var/www/videos.monsite.org/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/
Pour démarrer Peertube, on ajoute son service aux daemons du système pour qu'il démarre tout seul au boot de la machine et que l'on puisse le démarrer / arrêter manuellement.
cp /var/www/videos.monsite.org/peertube-latest/support/systemd/peertube.service /etc/systemd/system/
Modifier ce nouveau fichier en mettant le bon PATH de la config de votre instance Peertube, et celui de l'instance elle-même :
...
Environment=NODE_CONFIG_DIR=/var/www/videos.monsite.org/config
...
WorkingDirectory=/var/www/videos.monsite.org/peertube-latest
Enfin, on reload les daemons, on active celui de peertube, on le démarre et on consulte son status :
systemctl daemon-reload
systemctl enable peertube
systemctl start peertube
systemctl status peertube
==== Compte admin de Peertube ====
Par défaut, Peertube crée le compte administrateur principal, nommé **root**, sans mot de passe. Malheureusement on ne peut pas le renommer. On doit donc créé un mot de passe, en tant que l'utilisateur **peertube**.
su - peertube
cd peertube-latest
NODE_CONFIG_DIR=/var/www/videos.monsite.org/config NODE_ENV=production npm run reset-password -- -u root
==== Apache2 et Certificat SSL ====
On va utiliser Apache comme Proxy vers le port de Peertube par défaut (9000), il faut l'installer avec les bons modules :
apt install apache2
a2enmod proxy proxy_http proxy_wstunnel ssl http2 rewrite headers
On installe aussi [[https://snapcraft.io/docs/installing-snap-on-debian|snap]] qui va nous permettre d'installer [[https://certbot.eff.org/lets-encrypt/debianbuster-apache|certbot]].
apt install snapd
snap install core
snap install hello-world
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Pour générer ce premier certificat, on va utiliser le //vhost// par défaut d'apache **000-default.conf** en changeant simplement le ServerName pour videos.monsite.org :
cd /etc/apache2/sites-available/
nano 000-default.conf
Changer le **ServerName** puis quitter nano et reload apache :
systemctl reload apache2
Lancer la création du certificat via la commande suivante qui demandera quel vhost est concerné (choisir 000-default.conf donc) :
certbot certonly --apache
Enfin, on défini le vhost en créant le fichier **/etc/apache2/sites-available/videos.monsite.org.conf** qui ressemble à ça :
ServerName videos.monsite.org
Redirect Permanent / https://videos.monsite.org/
ServerName videos.monsite.org
LogLevel error
ErrorLog "|/usr/bin/rotatelogs -lc /var/www/videos.monsite.org/var/log/apache2/error.%Y.%m.%d 86400"
CustomLog "|/usr/bin/rotatelogs -lc /var/www/videos.monsite.org/var/log/apache2/access.%Y.%m.%d 86400" combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/videos.monsite.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/videos.monsite.org/privkey.pem
# HSTS (mod_headers is required) (63072000 seconds = 2 years) (only activate it knowingly)
## initialement commenté
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Content-Type-Options nosniff
Header always set X-Robots-Tag none
Header always set X-XSS-Protection "1; mode=block"
# Activate http/2
Protocols h2 h2c http/1.1
H2Push on
H2PushPriority * after
H2PushPriority text/css before
H2PushPriority image/jpeg after 32
H2PushPriority image/png after 32
H2PushPriority application/javascript interleaved
# Hard limit, PeerTube does not support videos > 4GB
LimitRequestBody 4294967294
# Set caching on assets for 1 year
Header append Cache-Control "public, max-age=31536000, immutable"
AliasMatch ^/client/(.*\.(js|css|woff2|otf|ttf|woff|eot))$ /var/www/videos.monsite.org/peertube-latest/client/dist/$1
# Set caching on image files for 1 year
Header append Cache-Control "public, max-age=31536000, immutable"
AliasMatch ^/static/(thumbnails|avatars)/(.*)$ /var/www/videos.monsite.org/storage/$1/$2
# Bypass PeerTube webseed route for better performances
Alias /static/webseed /var/www/videos.monsite.org/storage/videos
# Clients usually have 4 simultaneous webseed connections, so the real limit is 3MB/s per client
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 800
SetEnvIf Request_Method "GET" GETMETH=1
Header set Access-Control-Allow-Origin "*" env=GETMETH
Header set Access-Control-Allow-Headers "Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type" env=GETMETH
Header set Access-Control-Allow-Methods "GET, OPTIONS" env=GETMETH
Header set toto "foo" env=GETMETH
SetEnvIf GETMETH "1" dontlog
SetEnvIf Request_Method "OPTIONS" OPTIONSMETH=1
Header set Access-Control-Allow-Origin "*" env=OPTIONSMETH
Header set Access-Control-Allow-Headers "Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type" env=OPTIONSMETH
Header set Access-Control-Allow-Methods "GET, OPTIONS" env=OPTIONSMETH
Header set Access-Control-Max-Age "1000" env=OPTIONSMETH
Header set Content-Type "text/plain charset=UTF-8" env=OPTIONSMETH
Header set Content-Length "0" env=OPTIONSMETH
Header unset X-Frame-Options
ProxyPreserveHost On
ProxyRequests On
ProxyTimeout 600
# Websocket tracker
RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:9000/$1 [P,L]
ProxyPass http://127.0.0.1:9000/
# Config SSL
# Security configuration
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
# Requires Apache >= 2.4
SSLCompression off
# To use stapling, we have to enable it globally
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# OCSP Stapling requires Apache >= 2.3.3
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLSessionTickets off # Requires Apache >= 2.4.11
Activer le vhost et reload apache :
a2ensite videos.monsite.org.conf
systemctl reload apache2
==== Configurations complémentaires ====
=== Installer les outils en ligne de commande ===
Il faut suivre [[https://docs.joinpeertube.org/maintain-tools|la procédure décrite ici]] et s'assurer que l'on a bien suivi les [[https://docs.joinpeertube.org/dependencies?id=debian--ubuntu-and-derivatives|requirements]].
Pour installer les outils CLI, il faut cloner le dépôt Peertube dans un répertoire autre que celui de l'instance Peertube installée précédemment, par exemple dans le home d'un hypothétique user **johndoe**. En tant que **johndoe** :
cd /home/johndoe
git clone https://github.com/Chocobozzz/PeerTube.git
cd PeerTube
Installation des dépendances et compilation des CLI tools :
NOCLIENT=1 yarn install --pure-lockfile
npm run setup:cli
Puis dans le fichier **/home/johndoe/.bashrc**, on ajoute un alias afin d'avoir la commande **peertube** disponible ([[https://docs.joinpeertube.org/maintain-tools?id=cli-wrapper|CLI wrapper documentation]]) dans le PATH.
alias peertube="cd /home/johndoe/Peertube && node ./dist/server/tools/peertube.js"
On prend en compte les modifications :
source .bashrc
==== Sauvegarde ====
Il faut sauvegarder les fichiers et dossiers créés ou modifiés pour Peertube ainsi que la base de données PostgreSQL.
Liste des fichiers et dossiers :
* Dossier Peertube : /var/www/videos.monsite.org
* Config réseau : /etc/sysctl.d/30-peertube-tcp.conf
* Config du daemon/service : /etc/systemd/system/peertube.service
* Vhost apache : /etc/apache2/sites-available/videos.monsite.org.conf
* Les outils CLI : /home/johndoe/Peertube
En réalité, on ne sauve que les éléments qui changent, c'est à dire le dossier d'install de Peertube et la base de données.
Pour la base de données, en tant que root, on execute la commande suivante. Elle crée un dossier **/var/www/videos.monsite.org/backup** dans lequel elle crée le fichier **sql-peertube-[date]** avec [date] celle du moment de la sauvegarde.
SQL_BACKUP_PATH="backup/sql-peertube-$(date -Im).bak" && cd /var/www/videos.monsite.org && sudo -u peertube mkdir -p backup && sudo -u postgres pg_dump -F c peertube | sudo -u peertube tee "$SQL_BACKUP_PATH" >/dev/null
==== Mise à jour ====
Suivre les préconisations de [[https://docs.joinpeertube.org/install-any-os?id=upgrade|la documentation]] en fonction du saut de version à vérifier dans [[https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md|le Changelog]].
==== Désactiver les commentaires ====
A ce jour, il n'y a pas de mécanique pour désactiver les commentaires, voir cette issue à ce propos pour [[https://github.com/Chocobozzz/PeerTube/issues/2664#issuecomment-616992502|2 pistes de résolution]]
==== Mettre un captcha à l'inscription pour éviter les bots ====
Via le système de plug-in de peertube, on a installé https://framagit.org/kimsible/peertube-plugin-mtcaptcha2 qui implique de se créer un compte gratuit sur le site mtcaptcha.com
===== Pratique =====
==== Import de toutes les vidéos d'une chaine Youtube ou Vimeo ====
Pour importer les vidéos d'un compte Vimeo, on peut executer une commande qui fera tout ce qu'il faut. Remplacer les noms en majuscules par vos propres informations. **TARGET_URL** est l'url du compte chez Vimeo, par exemple https://vimeo.com/labomedia. [[https://docs.joinpeertube.org/maintain-tools?id=peertube-import-videosjs|Voir la documentation complète]].
**Important** : il faut se mettre dans le répertoire contenant le clone de Peertube utilisé pour initialiser les outils CLI vu plus haut.
En ligne de commande depuis le serveur en tant que user non root :
node dist/server/tools/peertube-import-videos.js -u 'videos.monsite.org' -U 'PEERTUBE_USER' --password 'PEERTUBE_PASSWORD' --target-url 'TARGET_URL' -k
Les vidéos seront alors importées et disponible dans le compte de l'utilisateur choisi. (-k pour garder l'original)
Les options :
.option('-U, --username ', 'Username')
.option('-p, --password ', 'Password')
.option('--target-url ', 'Video target URL')
.option('--since ', 'Publication date (inclusive) since which the videos can be imported (YYYY-MM-DD)', parseDate)
.option('--until ', 'Publication date (inclusive) until which the videos can be imported (YYYY-MM-DD)', parseDate)
.option('--first ', 'Process first n elements of returned playlist')
.option('--last ', 'Process last n elements of returned playlist')
.option('--wait-interval ', 'Duration between two video imports (in seconds)', convertIntoMs)
.option('-T, --tmpdir ', 'Working directory', __dirname)
.usage("[global options] [ -- youtube-dl options]")
.parse(process.argv)
==== Editorialiser la page découvrir ====
Il faut apparemment [[https://framacolibri.org/t/administrer-sa-page-decouvrir/6816/11|6 vidéos]] pour que la chaine apparaisse sur la page découvrir, [[https://github.com/Chocobozzz/PeerTube/issues/2693#issuecomment-620595334|cf le dev]]
==== Streaming live d'une session Jitsi dans Peertube ====
* [[https://docs.joinpeertube.org/use-create-upload-video?id=with-jitsi-meet|La Documentation pr ici]]
==== Embed Peertube dans dokuwiki ====
Voir [[https://www.dokuwiki.org/plugin:oembed|ce plug-in]] ou [[https://framacolibri.org/t/resolu-embarquer-une-video-peertube-dans-dokuwiki/4364/2|cette feinte]] qui semble ne plus marcher
{{tag>futuretic bj n1c0 peertube serveur}}