PeerTube

Updated 25 Février 2022

PeerTube

PeerTube est une plateforme distribuée d'hébergement et de diffusion de vidéos. [PeerTube] (https://joinpeertube.org) est une alternative indépendante, légère et évolutive à YouTube, Dailymotion et Vimeo. Il utilise les navigateurs des internautes pour créer un réseau distribué basé sur le P2P. PeerTube supporte le protocole ActivityPub, qui permet de regrouper des serveurs isolés avec du contenu vidéo dans un réseau fédéré. Les personnes qui le visitent peuvent ainsi s'abonner à des chaînes et être informées quand de nouvelles vidéos apparaissent. Ce logiciel libre est diffusé sous la licence AGPLv3.

Préparer un conteneur LXC

Nous conseillons d'installer PeerTub dans un conteneur distinct, le configurant selon les instructions du manuel.

Installation et configuration de PostgreSQL

Installez et configurez PostgreSQL conformément au manuel. Remplacez dbtest par votre base de données peertube_prod, et l'utilisateur test par peertube. Terminez le processus d'installation :

!!! exec "psql -U postgres

"

psql (11.2)
postgres=# \c peertube_prod
postgres=# CREATE EXTENSION pg_trgm;
postgres=# CREATE EXTENSION unaccent;
postgres=# \q

Installer Peertube

Installer les paquets requis par Peertube:

emerge -a app-arch/unzip dev-db/redis media-video/ffmpeg dev-python/nodeenv

Créez un compte utilisateur peertube et protégez-le par un mot de passe :

mkdir -p /var/calculate/www

useradd -m -d /var/calculate/www/peertube -s /bin/bash -p peertube peertube

passwd peertube

Installez Node.js dans le répertoire utilisateur :

su - peertube

nodeenv --node=14.17.6 .node-14

ln -sfT .node-14 .node-live

source .node-live/bin/activate

npm install -g yarn

echo 'source ~/.node-live/bin/activate' >> ~/.bash_profile

Créez les chemins nécessaires, téléchargez et décompressez la dernière version de PeerTube :

mkdir config storage versions

VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest PeerTube version is $VERSION"

wget "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip" -P versions

unzip versions/peertube-${VERSION}.zip -d versions

rm versions/peertube-${VERSION}.zip

Installer PeerTube:

ln -s versions/peertube-${VERSION} ./peertube-latest

cd ./peertube-latest

yarn install --production --pure-lockfile

cp /var/calculate/www/peertube/peertube-latest/config/default.yaml /var/calculate/www/peertube/config/default.yaml

cp config/production.yaml.example ../../config/production.yaml

Configuration de PeerTube

Configurez PeerTube en remplaçant peertube.example.org par votre page :

/var/calculate/www/peertube/config/production.yaml
# Correspond to your reverse proxy server_name/listen configuration
webserver:
  https: true
  hostname: 'peertube.example.org'
  port: 443
# Your database name will be "peertube"+database.suffix
database:
  hostname: 'localhost'
  port: 5432
  suffix: '_prod'
  username: 'peertube'
  password: 'secret'
  pool:
    max: 5
# SMTP server to send emails
smtp:
  hostname: mail.example.org
  port: 465 # If you use StartTLS: 587
  username: null
  password: null
  tls: false # If you use StartTLS: false
  disable_starttls: false
  ca_file: null # Used for self signed certificates
  from_address: 'admin@mail.example.org'
# From the project root directory
storage:
  tmp: '/var/calculate/www/peertube/storage/tmp/' # Used to download data (imports etc), store uploaded files before processing...
  avatars: '/var/calculate/www/peertube/storage/avatars/'
  videos: '/var/calculate/www/peertube/storage/videos/'
  streaming_playlists: '/var/calculate/www/peertube/storage/streaming-playlists/'
  redundancy: '/var/calculate/www/peertube/storage/videos/'
  logs: '/var/calculate/www/peertube/storage/logs/'
  previews: '/var/calculate/www/peertube/storage/previews/'
  thumbnails: '/var/calculate/www/peertube/storage/thumbnails/'
  torrents: '/var/calculate/www/peertube/storage/torrents/'
  captions: '/var/calculate/www/peertube/storage/captions/'
  cache: '/var/calculate/www/peertube/storage/cache/'
  plugins: '/var/calculate/www/peertube/storage/plugins/'
  client_overrides: '/var/calculate/www/peertube/storage/client-overrides/'
admin:
  # Used to generate the root user at first startup
  # And to receive emails from the contact form
  email: 'support@example.org'

Obtenir le certificat Let's Encrypt

Procurez-vous un certificat pour Nginx sur peertube.example.org en suivant les instructions du manuel.

Installation et configuration de Nginx

Installez et configurez votre serveur Nginx, comme expliqué dans le manuel.

Copiez le fichier de configuration Nginx par défaut pour PeerTube :

cp /var/calculate/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/sites-enabled/peertube.conf

Indiquez les chemins d'accès et le nom du serveur, peertube.example.org :

/etc/nginx/sites-enabled/peertube.conf
server {
    listen 80;
    listen [::]:80;
    server_name peertube.example.org;

    location /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/certbot;
    }
    location / { return 301 https://$host$request_uri; }
}

upstream backend {
    server localhost:9000;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name peertube.example.org;

    ssl_certificate /etc/letsencrypt/live/peertube.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/peertube.example.org/privkey.pem;
    ...
    # Bypass PeerTube for performance reasons. Could be removed
    location ~ ^/client/(.*\.(js|css|woff2|otf|ttf|woff|eot))$ {
        add_header Cache-Control "public, max-age=31536000, immutable";
        alias /var/calculate/www/peertube/peertube-latest/client/dist/$1;
    }
    ...
    # Cache 2 hours
    add_header Cache-Control "public, max-age=7200";
    root /var/calculate/www/peertube/storage;
    rewrite ^/static/(thumbnails|avatars)/(.*)$ /$1/$2 break;
    try_files $uri
    ...
        # Don't spam access log file with byte range requests
        access_log off;
    }
    root /var/calculate/www/peertube/storage;
    rewrite ^/static/webseed/(.*)$ /videos/$1 break;
    rewrite ^/static/redundancy/(.*)$ /redundancy/$1 break;
}

Démarrage de Peertube

Créez un script OpenRC pour PeerTube :

/etc/init.d/peertube
#!/sbin/openrc-run
# Copyright 2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="PeerTube daemon"
description=""
pidfile=/run/peertube.pid
command_user=peertube
output_log=/var/log/peertube.log
error_log=/var/log/peertube.log
directory=/var/calculate/www/peertube/peertube-latest
start_stop_daemon_args="-e NODE_ENV=production -e NODE_CONFIG_DIR=/var/calculate/www/peertube/config -e PATH=/var/calculate/www/peertube/.node-live/lib/node_modules/.bin:/var/calculate/www/peertube/.node-live/bin:\"$PATH\""
command="/var/calculate/www/peertube/.node-live/bin/npm"
command_args="start"
command_background=true

depend() {
        need nginx postgresql redis
}

start_pre() {
    checkpath -f -o peertube -m 0600 /var/log/peertube.log
}

Définissez les privilèges :

chmod 0755 /etc/init.d/peertube

Lancer le service PeerTube:

/etc/init.d/peertube start

Ajouté Peertube au démarrage:

!!! exec "rc-update add peertube
"

Ouvrez la page peertube.example.org dans votre navigateur Web :

peertube.example.org

Définir le mot de passe administrateur

Le mot de passe administrateur est généré automatiquement. Vous pouvez le trouver dans le journal. Pour réinitialiser le mot de passe :

su - peertube

cd /var/calculate/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/calculate/www/peertube/config NODE_ENV=production npm run reset-password -- -u root

exit

Mise à jour de PeerTube

Mise à jour de Node.js

Lors de la mise à jour de PeerTube vers la version 4.1.0, nous vérifierons que la version de Node.js est au moins 14 :

su - peertube

node -v

v14.17.6
Mise à jour de Node.js

Si la version de Node.js est inférieure à 14, installez la version 14.17.6 dans le nouvel environnement .node-14 et mettez-le à jour :

deactivate_node

nodeenv --node=14.17.6 .node-14

ln -sfT .node-14 .node-live

source .node-live/bin/activate

npm install -g yarn

Si vous aviez configuré PeerTube en suivant la version précédente du guide, transformez les scripts /var/calculate/www/peertube/.bash_profile et /etc/init.d/peertube .node-12~ en .node -live.

Mettre à jour le source code

Téléchargez et décompressez la dernière version de PeerTube:

su - peertube

VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest PeerTube version is $VERSION"

wget "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip" -P versions

unzip versions/peertube-${VERSION}.zip -d versions

rm versions/peertube-${VERSION}.zip

Installer PeerTube:

cd versions/peertube-${VERSION}

yarn install --production --pure-lockfile

Actualiser la configuration

Copiez le fichier de configuration fourni par défaut :

cp config/default.yaml /var/calculate/www/peertube/config/default.yaml

Actualisez votre configuration production.yml :

mv /var/calculate/www/peertube/config/production.yaml /var/calculate/www/peertube/config/production-old.yaml

cp config/production.yaml.example /var/calculate/www/peertube/config/production.yaml

Vérifiez les différences et déplacez vos paramètres vers production.yaml :

git diff /var/calculate/www/peertube/config/production{,-old}.yaml

Choisir la version courante

Actualisez le lien symbolique :

cd

unlink peertube-latest

ln -s versions/peertube-${VERSION} ./peertube-latest

exit

Redémarrez PeerTube:

/etc/init.d/peertube restart

Mise à jour vers 2.2.0 et 2.1.0

Mise à jour vers v2.1.0

Pour passer à la version 2.1.0, exécutez le script de création de torrents vidéo HLS :

su - peertube

cd /var/calculate/www/peertube/peertube-latest

NODE_CONFIG_DIR=/var/calculate/www/peertube/config NODE_ENV=production node dist/scripts/migrations/peertube-2.1.js

exit

Mise à jour vers v2.2.0

Connectez-vous à la base de données et faites la requête suivante :

!!! exec "psql -U postgres

"

psql (11.7)
Type "help" for help.

postgres=# \c peertube_prod 
You are now connected to database "peertube_prod" as user "postgres".
peertube_prod=# select "preferredUsername" from actor where "serverId" is null group by "preferredUsername" having count(*) > 1;
 preferredUsername 
-------------------
(0 rows)

Si le résultat n'est pas vide, vous devez modifier le ++preferredUsername++ pour chaque entrée afin que celui-ci soit unique.