Outils pour utilisateurs

Outils du site


peertube_installation_et_configuration

Ceci est une ancienne révision du document !


Peertube - Installation et configuration

Article en cours d'écriture

Peertube est un logiciel libre 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

Le site officiel - la page github

Installation sur Debian 10

On utilisera le serveur Apache pour rendre visible Peertube sur les Internets.

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 ce beau tuto réalisé par AukFood tout en gardant un oeil sur la documentation officielle.

Il y aura un choix à faire sur le format des vidéos et de la diffusion : WebTorrent transcoding ou HLS transcoding.

Pré-requis

On a besoin de plusieurs programmes, dont yarn (manager de paquets) et 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/tube.futuretic.fr, qui est attribué comme home d'un nouvel utilisateur nommé peertube. On règle aussi les droits sur ce dossier.

mkdir -p /var/www/tube.futuretic.fr
useradd -s /bin/bash -d /var/www/tube.futuretic.fr peertube
chown -R peertube: /var/www/tube.futuretic.fr
chmod 2770 /var/www/tube.futuretic.fr

Création de la Base de données

Peertube utilise 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/tube.futuretic.fr, 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 supprimé l'archive, et on fait un lien symbolique dans le dossier racine de Peertube pour indiquer quelle est la dernière version. Enfin, on entre dans le dossier de cette 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
cd ./peertube-latest

Installation

Grâce à Yarn, on récupère Peertube, puis 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.

yarn install --production --pure-lockfile
cp ./config/production.yaml.example ../../config/production.yaml
cp ./config/local-test.json ../../config/local-production.json

Configuration

On modifie le fichier de config :

nano /var/www/tube.futuretic.fr/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 sufixe '_prod' dans la configuration de la base de données.

...
webserver:
  https: true
  hostname: 'tube.futuretic.fr'
  port: 443
...
database:
  hostname: 'localhost'
  port: 5432
  suffix: ''
  username: 'peertube'
  password: 'peertube'
...
storage:
  tmp: '/var/www/tube.futuretic.fr/storage/tmp/' # Used to download data (imports etc), store uploaded files before processing...
  avatars: '/var/www/tube.futuretic.fr/storage/avatars/'
  videos: '/var/www/tube.futuretic.fr/storage/videos/'
  streaming_playlists: '/var/www/tube.futuretic.fr/storage/streaming-playlists/'
  redundancy: '/var/www/tube.futuretic.fr/storage/videos/'
  logs: '/var/www/tube.futuretic.fr/storage/logs/'
  previews: '/var/www/tube.futuretic.fr/storage/previews/'
  thumbnails: '/var/www/tube.futuretic.fr/storage/thumbnails/'
  torrents: '/var/www/tube.futuretic.fr/storage/torrents/'
  captions: '/var/www/tube.futuretic.fr/storage/captions/'
  cache: '/var/www/tube.futuretic.fr/storage/cache/'
  plugins: '/var/www/tube.futuretic.fr/storage/plugins/'
...
instance:
  name: 'PeerTube FuturEtic'
  short_description: 'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.'
  description: 'Peertube FuturEtic, nos vidéos à nous' # Support markdown

Pour la configuration email, lorsqu'on utilise smtp, il faut ajouter la ligne enabled: true au bloc email :

email:
  enabled: true

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/tube.futuretic.fr/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/

On démarre Peertube ! On l'ajoute aussi aux daemons du système pour qu'il démarre tout seul au boot de la machine. Puis on regarde les infos sur l'état de Peertube (qui devrait donc être démarré).

cp /var/www/tube.futuretic.fr/peertube-latest/support/systemd/peertube.service /etc/systemd/system/
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/tube.futuretic.fr/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 snap qui va nous permettre d'installer 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 tube.futuretic.fr :

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/tube.futuretic.fr.conf qui ressemble à ça :

<VirtualHost *:80>
   ServerName tube.futuretic.fr
   Redirect Permanent / https://tube.futuretic.fr/
</VirtualHost>
<VirtualHost *:443>
        ServerName tube.futuretic.fr

        LogLevel error
        ErrorLog "|/usr/bin/rotatelogs -lc /var/www/tube.futuretic.fr/var/log/apache2/error.%Y.%m.%d 86400"
        CustomLog "|/usr/bin/rotatelogs -lc /var/www/tube.futuretic.fr/var/log/apache2/access.%Y.%m.%d 86400" combined


        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/tube.futuretic.fr/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/tube.futuretic.fr/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
        <FilesMatch ^/client/(.*\.(js|css|woff2|otf|ttf|woff|eot))$>
                Header append Cache-Control "public, max-age=31536000, immutable"
        </FilesMatch>
        AliasMatch ^/client/(.*\.(js|css|woff2|otf|ttf|woff|eot))$ /var/www/tube.futuretic.fr/peertube-latest/client/dist/$1

        # Set caching on image files for 1 year
        <FilesMatch ^/static/(thumbnails|avatars)/(.*)$>
                Header append Cache-Control "public, max-age=31536000, immutable"
        </FilesMatch>
        AliasMatch ^/static/(thumbnails|avatars)/(.*)$ /var/www/tube.futuretic.fr/storage/$1/$2

        # Bypass PeerTube webseed route for better performances
        Alias /static/webseed /var/www/tube.futuretic.fr/storage/videos
        <Location /static/webseed>
                # 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
        </Location>
        <Location /videos/embed>
                Header unset X-Frame-Options
        </Location>

        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]

        <Location />
                ProxyPass http://127.0.0.1:9000/
        </Location>
</VirtualHost>

# 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 tube.futuretic.fr.conf
systemctl reload apache2

Configurations complémentaires

Installer les outils en ligne de commande

Il faut suivre la procédure décrite ici et s'assurer que l'on a bien suivi les requirements notamment en installant nodejs v12

Install nodejs v12

# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_12.x | bash -

apt-get install -y nodejs

Verification de la version de yarn

yarn --version

Ensuite en tant que utilisateur non root

cd ~/
$ git clone https://github.com/Chocobozzz/PeerTube.git
$ CLONE="$(pwd)/PeerTube"
$ cd ${CLONE}

Install dependencies and build CLI tools:

$ NOCLIENT=1 yarn install --pure-lockfile
$ npm run setup:cli

Ensuite possible de faire un CLI wrapper en ajoutant dans le .bashrc de son user favori :

alias peertube="cd /your/peertube/directory/ && node ./dist/server/tools/peertube.js"

Administration de l'instance

Import de toutes les vidéos d'un canal youtube ou vimeo

En ligne de commande depuis le serveur en tant que user non root :

~/PeerTube$ node dist/server/tools/peertube-import-videos.js -u 'tube.futuretic.fr' -U 'PEERTUBE_USER' --password 'PEERTUBE_PASSWORD' --target-url 'TARGET_URL'

voir option -k pour garder la version originale sur le serveur Peertube

peertube_installation_et_configuration.1619385816.txt.gz · Dernière modification : 2021/04/25 21:23 de n1c0