Installation de PeerTube avec Docker : Alternative éthique à YouTube pour associations et collectifs
Guide complet : Installer et optimiser PeerTube avec Docker
Tutoriel complet - Décembre 2025
Niveau : Intermédiaire
Système : Debian 12 (Bookworm) avec Docker Compose v2
Table des matières
Introduction à PeerTube {#introduction}
Qu'est-ce que PeerTube ?
PeerTube est une plateforme vidéo gratuite et open source, alternative à YouTube. Elle utilise le WebRTC (Web Real-Time Communication) pour permettre le partage de vidéos en peer-to-peer directement dans le navigateur, sans plugin ni application externe.
Avantages principaux :
À qui s'adresse ce guide ?
Ce tutoriel est conçu pour mettre en place une instance de test de PeerTube sur un projetserveur gratuit et open source fournissant aux navigateurs Web et aux applications mobiles une communication en temps réel (RTC) via des interfaces de programmation d'applications (API).domestique. Il permetconvient àparfaitement la communication audio et vidéo et au streaming de fonctionner à l'intérieur des pages Web en permettant une communication directe entre pairs, éliminant ainsi le besoin d'installer des plugins ou de télécharger des applications natives
https://docs.joinpeertube.org/install/docker
Modifications du docker-compose.ymlpour :
✓TesterCommentéPeerTubeleavantservicedewebserverl'utiliser(nginx)en production✓HébergerCommentédeslevidéosservicepourcertbotune(SSL)petite communauté✓ Décommenté le port 9000:9000 pour accéder directementApprendre àPeerTube
Prérequis matériels {#prérequis}
Configuration minimale recommandée
Configuration de ce tutoriel
ModificationsPour duce .envguide, nous utiliserons un serveur avec :
✓CPUPEERTUBE_WEBSERVER_HOSTNAME:=AMDlocalhostRyzen 5 (8 threads)✓StockagePEERTUBE_WEBSERVER_PORTprincipal=:9000NVMe 454 GB✓StockagePEERTUBE_WEBSERVER_HTTPSsecondaire=:falseHDD 916 GB (pour les backups)✓SystèmePOSTGRES_USER:=Debianpeertube
Installation initiale avec Docker {#installation}
Étape 1 : Préparer les fichiers
Suivez la documentation officielle pour télécharger les fichiers de base.
Étape 2 : Modifications pour un environnement de test local
Fichier docker-compose.yml
Pour une installation locale (sans nom de domaine), commentez les services non nécessaires :
# Commentez ces lignes pour une installation locale :
# webserver: # Nginx (pas besoin en local)
# certbot: # SSL (pas besoin en local)
# volumes:
# - ./docker-volume/assets # Pas nécessaire
# Décommentez cette ligne pour accéder à PeerTube :
ports:
- "9000:9000" # Accès direct à PeerTube
Fichier .env
Configurez les variables pour l'accès local :
# Accès local
PEERTUBE_WEBSERVER_HOSTNAME=localhost
PEERTUBE_WEBSERVER_PORT=9000
PEERTUBE_WEBSERVER_HTTPS=false
# Base de données
POSTGRES_USER=peertube
POSTGRES_PASSWORD=peertube_password
# Administration
PEERTUBE_ADMIN_EMAIL=admin@localhost
⚠️ Important : N'oubliez pas de générerGénérer un vraisecret sécurisé
Ne laissez jamais le secret avecpar défaut. Générez-en un nouveau :
openssl rand -hex 32
Copiez le résultat et remplacerremplacez la valeur de PEERTUBE_SECRET dans le fichier ..env.env
Étape 3 : Démarrer PeerTube
cd /chemin/vers/votre/dossier
docker compose up -d
Accédez à votre instance sur : http://localhost:9000
Comprendre le transcodage vidéo {#transcodage}
Qu'est-ce que le transcodage ?
Le transcodage est le processus qui transforme votre vidéo originale en plusieurs versions optimisées :
Vidéo originale (fichier.mkv, 4 GB)
↓
TRANSCODAGE
↓
├── Version 1080p (500 MB)
├── Version 720p (300 MB)
├── Version 480p (150 MB)
└── Version 360p (80 MB)
Pourquoi c'est essentiel ?
1. Compatibilité universelle
Tous les navigateurs ne lisent pas tous les formats Le transcodage garantit une lecture partout (Chrome, Firefox, Safari, etc.)2. Adaptation à la connexion Internet
3. Sans transcodage
Les contraintes du transcodage
Ressources nécessaires :
Exemple concret :
Configuration optimale du transcodage {#config-transcodage}
Choix du format de streaming : HLS
Nous recommandons HLS (HTTP Live Streaming) plutôt que Web Videos :
Avantages du HLS :
Configuration dans docker-volume/config/local-production.json :
"web_videos": {
"enabled": false
},
"hls": {
"enabled": true,
"split_audio_and_video": false
}
Choix des résolutions
Pour un serveur de test avec audience limitée :
Configuration :
"resolutions": {
"240p": false,
"360p": false,
"480p": true,
"720p": true,
"1080p": true,
"1440p": false,
"2160p": false
}
Optimisation des performances CPU
Pour un processeur 8 threads (comme un Ryzen 5) :
"transcoding": {
"enabled": true,
"threads": 3,
"concurrency": 2,
"profile": "default",
"allow_audio_files": true,
"always_transcode_original_resolution": false
}
Explication des paramètres :
threads: 3
3 = bon équilibre pour 8 threads totaux
concurrency: 2
threads: 3 × concurrency: 2 = 6 threads utilisés
Reste 2 threads libres pour le système
Calcul simple :
CPU total : 8 threads
Transcodage : 6 threads (3 × 2)
Système : 2 threads libres
Options de stockage
"keep_original_file": false
⚠️ Attention : Mettre false supprime le fichier original après transcodage. C'est acceptable pour un serveur de test, mais conservez l'original en production (true).
Modifier la configuration
Méthode 1 : Interface web (recommandé)
http://localhost:9000
Connectez-vous en tant qu'admin
Allez dans Administration → Configuration → VOD
Modifiez les valeurs
Sauvegardez
Méthode 2 : Ligne de commande
cd /chemin/vers/votre/dossier
nano docker-volume/config/local-production.json
# Cherchez la section "transcoding" (ligne ~119)
# Modifiez les valeurs
# Redémarrez PeerTube
docker compose restart peertube
Organisation du stockage {#stockage}
Architecture recommandée
Stockage NVMe (rapide) - 454 GB
└── /home/user/Serveur/
├── docker-compose.yml
├── .env
└── docker-volume/
├── config/ # Configuration PeerTube
├── data/ # Vidéos et médias
├── db/ # Base PostgreSQL
└── redis/ # Cache Redis
Stockage HDD (lent mais grand) - 916 GB
└── /mnt/backup-disk/
└── peertube_backup/ # Sauvegardes automatiques
Pourquoi cette organisation ?
NVMe / SSD rapide :
HDD lent :
Configuration du disque de backup
Étape 1 : Identifier votre disque
lsblk
Vous verrez quelque chose comme :
NAME SIZE TYPE
sda 931.5G disk
└─sda1 931.5G part ← C'est notre HDD de backup
nvme0n1 454.5G disk
└─nvme0n1p2 454G part ← C'est notre disque système
Étape 2 : Obtenir l'UUID du disque
L'UUID est un identifiant unique qui ne change jamais (contrairement à /dev/sda1 qui peut changer).
sudo blkid /dev/sda1
Résultat :
/dev/sda1: UUID="abcd1234-5678-90ef-ghij-klmnopqrstuv" TYPE="ext4"
Notez l'UUID (vous en aurez besoin).
Étape 3 : Créer le point de montage
sudo mkdir -p /mnt/backup-disk
Étape 4 : Test de montage manuel
sudo mount /dev/sda1 /mnt/backup-disk
df -h | grep backup-disk
Si ça fonctionne, vous verrez votre disque monté.
Étape 5 : Montage automatique au démarrage
Éditez le fichier système /etc/fstab :
sudo nano /etc/fstab
Ajoutez cette ligne à la fin (remplacez l'UUID par le vôtre) :
UUID=abcd1234-5678-90ef-ghij-klmnopqrstuv /mnt/backup-disk ext4 defaults,nofail 0 2
Explication :
defaults : Options standard (lecture/écriture, etc.)
nofail : Le système démarre même si ce disque est déconnecté
0 2 : Vérification du disque au démarrage
Testez :
sudo umount /mnt/backup-disk # Démonter
sudo mount -a # Remonter tout
df -h | grep backup-disk # Vérifier
Système de backup automatique {#backup}
Principe du backup
┌───────────────────────┐
│ PeerTube (NVMe) │
│ Données actives │
│ Accès rapide │
└───────────┬───────────┘
│
│ Copie quotidienne (2h du matin)
│ rsync --delete
↓
┌───────────────────────┐
│ HDD Backup │
│ Copie de sécurité │
│ Grande capacité │
└───────────────────────┘
Créer le script de backup
Étape 1 : Créer le fichier script
sudo nano /usr/local/bin/backup-peertube.sh
Copiez ce contenu :
#!/bin/bash
# Script de backup automatique PeerTube
# Copie les données vers le disque de backup
DATE=$(date +%Y-%m-%d_%H:%M:%S)
LOG="/var/log/peertube-backup.log"
# Source : données PeerTube
SOURCE="/home/user/Serveur/docker-volume/"
# Destination : disque de backup
DEST="/mnt/backup-disk/peertube_backup/"
echo "[$DATE] Début du backup PeerTube" >> $LOG
# Copie avec rsync
rsync -av --delete "$SOURCE" "$DEST" >> $LOG 2>&1
# Vérification du résultat
if [ $? -eq 0 ]; then
echo "[$DATE] ✓ Backup terminé avec succès" >> $LOG
else
echo "[$DATE] ✗ ERREUR lors du backup" >> $LOG
fi
Explication du script :
DATE=$(date ...) : Récupère la date/heure actuelle
LOG="/var/log/..." : Fichier où tout est enregistré
rsync -av --delete :
-a : Mode archive (préserve tout)
-v : Verbose (montre ce qui est copié)
--delete : Supprime les fichiers disparus de la source
>> $LOG 2>&1 : Enregistre tout dans le fichier log
if [ $? -eq 0 ] : Vérifie si rsync a réussi
Étape 2 : Rendre le script exécutable
sudo chmod +x /usr/local/bin/backup-peertube.sh
Étape 3 : Créer le dossier de destination
sudo mkdir -p /mnt/backup-disk/peertube_backup
sudo chown $USER:$USER /mnt/backup-disk/peertube_backup
Étape 4 : Test manuel
sudo /usr/local/bin/backup-peertube.sh
Vérifiez que ça fonctionne :
# Voir les logs
tail -20 /var/log/peertube-backup.log
# Vérifier que les fichiers sont copiés
ls -lh /mnt/backup-disk/peertube_backup/
Automatiser avec Cron
Cron permet d'exécuter des scripts automatiquement à des heures précises.
Ajouter une tâche quotidienne
echo "0 2 * * * root /usr/local/bin/backup-peertube.sh" | sudo tee -a /etc/crontab
Comprendre la syntaxe Cron :
0 2 * * * root /usr/local/bin/backup-peertube.sh
│ │ │ │ │ │ └─ Commande à exécuter
│ │ │ │ │ └────── Utilisateur (root)
│ │ │ │ └────────── Jour de la semaine (* = tous)
│ │ │ └──────────── Mois (* = tous)
│ │ └────────────── Jour du mois (* = tous)
│ └──────────────── Heure (2h du matin)
└────────────────── Minute (0 = pile)
Exemples d'horaires Cron :
0 2 * * *
Tous les jours à 2h00
0 */6 * * *
Toutes les 6 heures
30 3 * * 0
Tous les dimanches à 3h30
0 0 1 * *
Le 1er de chaque mois à minuit
Vérifier l'installation
sudo grep "backup-peertube" /etc/crontab
Commandes utiles {#commandes}
Gestion de PeerTube
# Se placer dans le dossier
cd /chemin/vers/votre/dossier
# Démarrer PeerTube
docker compose up -d
# Arrêter PeerTube
docker compose down
# Redémarrer PeerTube
docker compose restart peertube
# Voir les logs en temps réel
docker compose logs -f peertube
# Voir l'état des conteneurs
docker compose ps
Gestion des backups
# Lancer un backup manuel
sudo /usr/local/bin/backup-peertube.sh
# Voir les derniers logs de backup
tail -50 /var/log/peertube-backup.log
# Chercher les erreurs dans les logs
grep "ERREUR" /var/log/peertube-backup.log
# Vérifier l'espace disque
df -h | grep -E "backup-disk|nvme"
# Taille du dossier de backup
du -sh /mnt/backup-disk/peertube_backup/
Monitoring du transcodage
# Voir les vidéos en cours de transcodage
docker exec -it <nom-conteneur-peertube> ls -lh /data/transcoding-jobs/
# Surveiller l'utilisation CPU en temps réel
htop
# Surveiller l'espace disque toutes les 5 secondes
watch -n 5 'df -h | grep nvme'
Vérification des ressources Docker
# Nombre de CPUs disponibles
nproc
# Vérifier que Docker voit tous les CPUs
docker info | grep "CPUs:"
# Résultat attendu : même nombre que nproc
Limiter les ressources Docker (optionnel)
Si le transcodage ralentit trop votre PC, ajoutez ceci dans docker-compose.yml :
services:
peertube:
image: chocobozzz/peertube:production-bookworm
# ... autres configs ...
# Nouvelles lignes à ajouter :
deploy:
resources:
limits:
cpus: '6' # Maximum 6 cœurs
memory: 4G # Maximum 4 GB de RAM
reservations:
cpus: '2' # Minimum 2 cœurs garantis
memory: 1G # Minimum 1 GB de RAM
Quand utiliser ces limites ?
Surveillance et maintenance {#maintenance}
Surveillance régulière
1. Espace disque (hebdomadaire)
df -h /
Si l'espace disque dépasse 80%, libérez de l'espace :
docker system prune -a
2. Logs de backup (mensuel)
grep "ERREUR" /var/log/peertube-backup.log
Si des erreurs apparaissent, vérifiez :
df -h | grep backup
Les permissions : ls -ld /mnt/backup-disk/peertube_backup
3. Performance du transcodage
Observez le temps de transcodage. Si c'est trop lent :
Augmenter la concurrence :
"concurrency": 3 // Au lieu de 2
Attention : Plus de concurrence = plus de CPU utilisé.
Évolutions possibles
1. Activer le streaming en direct
Modifiez docker-volume/config/local-production.json :
"live": {
"enabled": true,
"max_duration": 3600, // 1 heure max
"max_instance_lives": 20, // 20 lives simultanés max
"allow_replay": true
}
Redémarrez :
docker compose restart peertube
2. Ajouter des résolutions supérieures
Si vous voulez proposer du 1440p ou 4K :
"resolutions": {
"1440p": true,
"2160p": true
}
⚠️ Attention : Le transcodage sera beaucoup plus long et utilisera beaucoup plus d'espace disque.
3. Remote runners (transcodage distant)
Si votre serveur est trop lent, vous pouvez déléguer le transcodage à d'autres machines. Voir la documentation officielle.
4. Rotation des backups
Pour garder plusieurs versions des backups (quotidien, hebdomadaire, mensuel), utilisez des outils comme :
rsnapshot
borg
restic
Résumé de la configuration
✅ Ce que nous avons mis en place
📊 Ressources du serveur
Processeur : 8 threads
├── Transcodage : 6 threads (3 × 2)
└── Système : 2 threads libres
Stockage :
├── NVMe 454 GB : Données PeerTube
└── HDD 916 GB : Backups quotidiens
Réseau :
├── Port 9000 : Accès web (HTTP)
└── Port 1935 : Streaming live (RTMP)
Prochaines étapes
Tester le transcodage
Surveiller les backups
tail /var/log/peertube-backup.log
Testez une restauration
Ajuster les performances
concurrency
Si le PC rame : diminuez threads
Si manque d'espace : désactivez la 1080p
Ouvrir au public (optionnel)
Ressources utiles
Dépannage fréquent
Problème : PeerTube ne démarre pas
# Voir les logs d'erreur
docker compose logs peertube
# Vérifier que les ports sont libres
sudo ss -tlnp | grep -E '9000|1935'
# Redémarrer proprement
docker compose down
docker compose up -d
Problème : Le transcodage ne fonctionne pas
Vérifiez la configuration :
cat docker-volume/config/local-production.json | grep -A 10 "transcoding"
Vérifiez que le transcodage est activé dans l'interface web
Regardez les logs :
docker compose logs -f peertube | grep transcode
Problème : Backup échoue
# Vérifier que le disque est monté
df -h | grep backup
# Vérifier les permissions
ls -ld /mnt/backup-disk/peertube_backup
# Tester manuellement
sudo /usr/local/bin/backup-peertube.sh
tail -20 /var/log/peertube-backup.log
Problème : Manque d'espace disque
# Voir l'utilisation détaillée
du -sh docker-volume/*
# Les gros dossiers sont généralement :
# - docker-volume/data (vidéos)
# - docker-volume/db (base de données)
# Nettoyer Docker
docker system prune -a --volumes
Bon courage avec votre instance PeerTube ! 🎥