Aller au contenu

Documentation Lab PeerTube Souverain

Déploiement complet d’une instance PeerTube from scratch sur une architecture 3-tiers virtualisée.


1. Architecture Réseau

Infrastructure basée sur KVM (virbr0192.168.122.0/24).

Nom VM Rôle Services IP
trixie-proxy Reverse Proxy / Front Nginx 192.168.122.x
trixie-app Application PeerTube (Node.js) 192.168.122.x
trixie-db Base & Cache PostgreSQL, Redis 192.168.122.100

2. VM "Base de données" (PostgreSQL + Redis)

PostgreSQL

sudo apt update && sudo apt install -y postgresql

sudo -u postgres psql -c "CREATE USER peertube WITH PASSWORD 'peertube123';"
sudo -u postgres psql -c "CREATE DATABASE peertube_prod OWNER peertube;"

Accès distant

Modifier :

sudo nano /etc/postgresql/15/main/postgresql.conf
listen_addresses = '*'
sudo nano /etc/postgresql/15/main/pg_hba.conf
host peertube_prod peertube 192.168.122.0/24 md5

Redis

sudo nano /etc/redis/redis.conf
bind 0.0.0.0
protected-mode no
sudo systemctl restart redis-server

Valkey

Valkey est un fork Open-Source de Redis car Redis est devenue privée en 2024. Pour ce qui est de la configuration Valkey passe inapercue pour Peertube donc la config reste la meme

Installation sur leur site officiel ( version 9.0.3 lors de la doc ) :

cd /tmp
wget https://download.valkey.io/releases/valkey-9.0.3-jammy-x86_64.tar.gz
tar -xzvf valkey-9.0.3-jammy-x86_64.tar.gz
sudo cp valkey-9.0.3-jammy-x86_64/bin/valkey-* /usr/local/bin/

Puis creation du systemd :


[Unit]
Description=Valkey In-Memory Data Store
After=network.target

[Service]
ExecStart=/usr/local/bin/valkey-server --bind 0.0.0.0 --protected-mode no
Restart=always

[Install]
WantedBy=multi-user.target

3. VM "Application" (PeerTube)

Dépendances système

sudo apt update && sudo apt install -y curl unzip git g++ make wget xz-utils redis-tools postgresql-client bsdmainutils

# Node.js 20 + Yarn
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g yarn

Utilisateur + stockage

sudo useradd -m -d /opt/peertube -s /bin/bash peertube

sudo mkdir -p /var/www/peertube/storage
sudo chown -R peertube:peertube /var/www/peertube

FFmpeg statique (Correctif Debian)

cd /tmp
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xJf ffmpeg-release-amd64-static.tar.xz
cd ffmpeg-*-static/

sudo cp ffmpeg ffprobe /usr/local/bin/
sudo chmod +x /usr/local/bin/ffmpeg /usr/local/bin/ffprobe

sudo ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg
sudo ln -sf /usr/local/bin/ffprobe /usr/bin/ffprobe

Installation PeerTube

cd /opt/peertube

sudo wget https://github.com/Chocobozzz/PeerTube/releases/download/v6.0.4/peertube-v6.0.4.zip
sudo unzip peertube-v6.0.4.zip && sudo rm peertube-v6.0.4.zip

sudo mkdir -p versions
sudo mv peertube-v6.0.4 versions/

sudo chown -R peertube:peertube /opt/peertube

Installation des modules

sudo -u peertube -i
cd /opt/peertube/versions/peertube-v6.0.4

NOCLIENT=true yarn install --production
exit

Correctif critique (fluent-ffmpeg)

sudo nano /opt/peertube/versions/peertube-v6.0.4/node_modules/fluent-ffmpeg/lib/capabilities.js

Modifier ( Ligne 589 ) :

// if (unavailable.length === 1) {
//   return cb(new Error('Output format ' + unavailable + ' is not available'));
// } else if (unavailable.length > 1) {
//   return cb(new Error('Output formats ' + unavailable.join(', ') + ' are not available'));
// }

Configuration production.yaml

sudo nano /opt/peertube/versions/peertube-v6.0.4/config/production.yaml
listen:
  hostname: '0.0.0.0'
  port: 9000

webserver:
  hostname: 'peertube.local'
  https: false

ffmpeg:
  bin: '/usr/local/bin/ffmpeg'
  ffprobe: '/usr/local/bin/ffprobe'

database:
  hostname: '192.168.122.100'
  password: 'peertube123'

redis:
  hostname: '192.168.122.100'

transcoding:
  enabled: true
  web_videos:
    enabled: true
  hls:
    enabled: false

Service PeerTube

sudo cp /opt/peertube/versions/peertube-v6.0.4/support/systemd/peertube.service /etc/systemd/system/

sudo systemctl daemon-reload
sudo systemctl enable peertube
sudo systemctl restart peertube

Reset Redis (important)

redis-cli -h 192.168.122.100 FLUSHALL

4. VM "Proxy" (Nginx)

sudo nano /etc/nginx/sites-available/peertube.conf
server {
    listen 80;
    server_name peertube.local;

    location / {
        proxy_pass http://192.168.122.x:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

5. Troubleshooting

502 Bad Gateway

sudo ss -tulpn | grep 9000

Doit écouter sur 0.0.0.0


VM lente (sudo lent)

sudo nano /etc/hosts

Ajouter :

127.0.1.1 trixie

Permissions

sudo chown -R peertube:peertube /var/www/peertube

6. Commandes utiles

Action Commande
Démarrer sudo systemctl start peertube
Logs sudo journalctl -fu peertube
Reset mdp admin npm run reset-password -- -u root

7. Résultat

Architecture 3-tiers fonctionnelle
PeerTube isolé et scalable
FFmpeg corrigé (compatible Debian Trixie)
Transcodage optimisé (CPU-friendly)
Reverse proxy opérationnel