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 (virbr0 – 192.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