Installer Peertube sur Debian 9 Stretch

Toujours afin de « Dégoogliser » internet, framasoft et ses alliés s'attaquent à Youtube, voyons comment installer Peertube, son concurrent libre et décentralisé.

Ce billet de blog concerne avant tout Debian est une reprise de la documentation officielle et plus là à titre de pense-bête.

Installation

Dépôts

Comme pour Mastodon, Peertube demande des version récentes de NodeJS et Yarn, il nous faut donc là aussi directement utiliser les dépôts de NodsJS et Yarn afin des versions plus récentes.

# apt -y install curl
# curl -sL https://deb.nodesource.com/setup_8.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

Installation des dépendences

N'hésitez pas à consulter la documentation officielle sur les dépendances si vous utilisez une autre distribution.

Une fois ces dépôts ajoutés, il est possible de passer à l'installation des dépendances. Comme Mastodon, Peertube est fait pour fonctionner avec le serveur web NGinx, si vous utilisez Apache, il est doit être possible de le faire fonctionner avec mais ce n'est pas officiellement supporté.

# apt install curl sudo unzip xz-utils vim nodejs yarn nginx-full ffmpeg postgresql postgresql-contrib postgresql postgresql-client openssl g++ make redis-server git

Utilisateur

Peertube demande l'utilisation d'un compte utilisateur dédié.

# addgroup --system peertube
# adduser --system --ingroup peertube --gecos "Peertube" --home /opt/peertube --disabled-login peertube

PostgreSQL

Création de l'utilisateur PostgreSQL peertube, pensez à conserver le mot de passe !

# sudo -u postgres createuser peertube -d -P -R

Création de la base de données PostgreSQL peertube et activation des extensions dont Peertube a besoin.

# sudo -u postgres createdb -O peertube peertube
# sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube
# sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube

Préparation et installation

Les commandes suivantes demandes à être effectuées en tant qu'utilisateur peertube, on commence par créer les répertoires nécessaire à l'installation.

# su - peertube
$ mkdir config storage versions && cd versions

On télécharge de la dernière version et décompresse celle-ci.

$ 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 -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

Puis on installe.

$ yarn install --production --pure-lockfile

Configuration

Copier le fichier de configuration d'exemple et le modifier à votre convenance.

$ cp peertube-latest/config/production.yaml.example config/production.yaml

Lors de la configuration, faire attention aux options suivantes :

  • Dans webserver, hostname est l'adresse de votre instance, port doit être laissé à 443, même si vous utilisez un système comme SSLH redirigeant les requête sur le 443 vers le véritable port HTTPS de votre service web, à ne modifier que si vous passez un port spécifique dans votre navigateur pour la connexion HTTPS.
    # Correspond to your reverse proxy server_name/listen configuration
    webserver:
      https: true
      hostname: 'peertube.example.com'
      port: 443
    
  • La section database correspond aux paramètres de la BDD PostgreSQL, l'option prefix contient "prod" par défaut, à supprimer si la BDD de peertube n'a pas de suffixe.
    # Your database name will be "peertube"+database.suffix
    database:
      hostname: 'localhost'
      port: 5432
      suffix: ''
      username: 'peertube'
      password: 'MotDePasseBDD'
      pool:
        max: 5
    
  • Indiquez dans la section smtp les paramètres de votre service SMTP. Modifiez le port à 25, 465 ou 587 selon que vous utilisez une connexion en claire, via SMTPS ou StartTLS. Mettre hostname à localhost si le serveur SMTP est sur la même machine que Peertube.
    # SMTP server to send emails
    smtp:
      hostname: 'localhost'
      port: 25 # If you use StartTLS: 587
      username: null
      password: null
      tls: false # If you use StartTLS: false
      disable_starttls: true
      ca_file: null # Used for self signed certificates
      from_address: 'admin@example.com'
    
  • Adapter la section storage selon où se trouve l'installation de Peertube.
    # From the project root directory
    storage:
      avatars: '/opt/peertube/storage/avatars/'
      videos: '/opt/peertube/storage/videos/'
      logs: '/opt/peertube/storage/logs/'
      previews: '/opt/peertube/storage/previews/'
      thumbnails: '/opt/peertube/storage/thumbnails/'
      torrents: '/opt/peertube/storage/torrents/'
      captions: '/opt/peertube/storage/captions/'
      cache: '/opt/peertube/storage/cache/'
    
  • La section strategies indique la stratégie d'affichage des vidéos de la page d'accueil, pensez à décommenter la ligne avec le tiret (-).
        strategies:
          -
            size: '10GB'
            # Minimum time the video must remain in the cache. Only accept values > 10 hours (to not overload remote instances)
            min_lifetime: '48 hours'
            strategy: 'most-views' # Cache videos that have the most views
    #      -
    #        size: '10GB'
    #        # Minimum time the video must remain in the cache. Only accept values > 10 hours (to not overload remote instances)
    #        min_lifetime: '48 hours'
    #        strategy: 'trending' # Cache trending videos
    #      -
    #        size: '10GB'
    #        # Minimum time the video must remain in the cache. Only accept values > 10 hours (to not overload remote instances)
    #        min_lifetime: '48 hours'
    #        strategy: 'recently-added' # Cache recently added videos
    #        min_views: 10 # Having at least x views
    
  • NGinx

    Copier le fichier de configuration NGinx fournie et, l'adapter selon vos besoins.

# sudo cp /opt/peertube/peertube-latest/support/nginx/peertube.example.com /etc/nginx/sites-available/peertube.example.com
# vim /etc/nginx/sites-available/peertube

Activer ce vhost et redémarrer NGinx.

# cd /etc/nginx/sites-enabled
# ln -s ../sites-availables/peertube.example.com
# systemctl restart nginx

Affinage TCP/IP

Il est nécessaire de modifier les paramère TCP/IP afin de garantir un meilleur fonctionnement de Peertube.

# cp /opt/peertube/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/
# sysctl -p /etc/sysctl.d/30-peertube-tcp.conf

SystemD

Copier le fichier de configuration pour SystemD dans /etc/systemd/system/ et l'activer, penser à le modifier si besoin en fonctione d'où Peertube est installé !

# cp /opt/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/
# vim /etc/systemd/system/peertube.service
# systemctl daemon-reload
# systemctl enable peertube

Démarrer le service Peertube et vérifier dans les logs que tout se passe bien.

# systemctl start peertube && journalctl -feu peertube

Trucs & astuces

Mot de passe d'administration

Le mot de passe de l'administrateur est automatiquement généré lors du premier démarrage du service peertube et peu être retrouvé dans les long, il est possible de le modifier via la commande suivante :

# su - peertube
$ NODE_CONFIG_DIR=/opt/peertube/config NODE_ENV=production npm run reset-password -- -u root

Mises à jour

Vérifier le journal des modifications.

Automatique (Modifications mineures uniquement)

Le mot de passe demandé est celui de la BDD.

# su - peertube
$ ./upgrade.sh

Manuelles

Peertube

Sauvegarder la BDD.

# SQL_BACKUP_PATH="backup/sql-peertube-$(date -Im).bak"
# cd /opt/peertube
# sudo -u peertube mkdir -p backup
# sudo -u postgres pg_dump -F c peertube | sudo -u peertube tee "$SQL_BACKUP_PATH" >/dev/null

Vérifier quel est la dernière version de Peertube, puis la récupérer et la décompresser.

# 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"
$ cd versions
$ 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

Installer les dépendances.

$ cd peertube-${VERSION}
$ yarn install --production --pure-lockfile

Copier le nouveau fichier default.yaml et vérifier les modifcations apporté à la configuration, adapter votre configuration au besoin.

$ cd ~
$ cp versions/peertube-${VERSION}/config/default.yaml config/default.yaml
$ diff versions/peertube-${VERSION}/config/production.yaml.example config/production.yaml

Changer le lien vers la nouvelle version.

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

NGinx

Vérifier les modification dans la configuration de NGinx et adapter au besoin.

# cd /opt/peertube/versions
# diff "$(ls --sort=t | head -2 | tail -1)/support/nginx/peertube" "$(ls --sort=t | head -1)/support/nginx/peertube"

SystemD

Vérifier les modification dans la configuration de SystemD et adapter au besoin.

# cd /opt/peertube/versions
# diff "$(ls --sort=t | head -2 | tail -1)/support/systemd/peertube.service" "$(ls --sort=t | head -1)/support/systemd/peertube.service"

Redémarrer PeerTube

# systemctl reload nginx
# systemctl daemon-reload
# systemctl restart peertube && journalctl -fu peertube

En cas de problème

Faite pointer le lien peertube-latest vers l'ancienne version et restaurer la sauvegarde de la BDD.

# OLD_VERSION="AncienneVersionPeertube"
# SQL_BACKUP_PATH="backup/sql-peertube-DateDuBackup.bak"
# cd /opt/peertube
# sudo -u peertube unlink ./peertube-latest
# sudo -u peertube ln -s "versions/peertube-$OLD_VERSION" peertube-latest
# sudo -u postgres pg_restore -c -C -d postgres "$SQL_BACKUP_PATH"
# systemctl restart peertube
Vus : 1566
Publié par Zergy : 41