ITSkillsCenter
Blog

PeerTube self-hosted : alternative YouTube fédérée pour formations — déploiement 2026

13 min de lecture



PeerTube self-hosted : alternative YouTube fédérée pour formations — déploiement 2026

PeerTube self-hosted : alternative YouTube fédérée pour formations — déploiement 2026

Cluster : Plateforme médias self-hosted PME francophone : Jellyfin, PeerTube, Immich (2026)
Cet article est un tutoriel satellite du cluster cluster-medias-selfhost. Pour la vue d’ensemble complète (Jellyfin, Immich, stratégie stockage), lire d’abord le pilier.

Introduction

Chaque fois qu’une entreprise charge une vidéo de formation sur YouTube, elle cède ses données à une plateforme américaine soumise au droit californien, expose ses contenus professionnels aux algorithmes de recommandation, et risque de voir ses formations supprimées sans préavis lors d’une modération automatique mal calibrée. Pour les PME francophones d’Afrique de l’Ouest qui forment leurs équipes sur des sujets sensibles — procédures OHADA, audits internes, onboarding RH, formations cybersécurité — cette dépendance est à la fois un risque opérationnel et une faille de souveraineté numérique.

PeerTube est la réponse libre et fédérée à ce problème. Développé depuis 2018 par Framasoft, une association française à but non lucratif, PeerTube est un logiciel open source sous licence AGPL-3.0 qui permet à n’importe quelle organisation d’héberger sa propre instance vidéo. L’architecture repose sur un protocole de fédération (ActivityPub) qui permet à différentes instances de se découvrir mutuellement — mais cette dimension fédérée est optionnelle : une instance peut rester totalement privée, isolée du reste du fediverse, et servir exclusivement les collaborateurs internes d’une entreprise.

Sur le plan réglementaire, PeerTube self-hosted répond directement aux exigences du RGPD européen et aux obligations de protection des données professionnelles : les vidéos restent sur votre infrastructure, vous en contrôlez l’accès, et aucune donnée analytique n’est transmise à des tiers. Pour les entreprises sénégalaises ou ivoiriennes travaillant avec des partenaires européens, c’est un argument contractuel non négligeable.

Ce tutoriel vous guide pas à pas dans le déploiement d’une instance PeerTube opérationnelle sur un VPS Hetzner CX31, depuis l’architecture initiale jusqu’à la mise en place de chaînes privées pour formations confidentielles. Comptez environ 60 minutes si vous avez déjà un VPS configuré avec un nom de domaine pointant dessus.

Prérequis

Avant de commencer, voici ce dont vous avez besoin. Côté infrastructure, un Hetzner CX31 est le point d’entrée recommandé pour une instance PeerTube d’usage professionnel : 2 vCPU AMD, 8 Go de RAM et 80 Go de stockage NVMe pour 7,90 €/mois. Ce gabarit convient pour une instance avec 10 à 30 utilisateurs actifs et un catalogue de plusieurs centaines de vidéos de formation. Si votre catalogue dépasse 500 vidéos ou si vous anticipez des pics de connexion simultanés importants, passez au CX41 (4 vCPU, 16 Go RAM). Le système d’exploitation cible est Ubuntu 22.04 LTS ou Debian 12.

Côté logiciels, vous aurez besoin de Docker Engine 24+ et Docker Compose v2 installés sur le VPS. PeerTube utilise PostgreSQL 15 comme base de données principale pour les métadonnées (utilisateurs, vidéos, commentaires), Redis 7 pour le cache et les files de jobs, et ffmpeg pour le transcodage — les trois sont inclus dans le docker-compose officiel, vous n’avez pas à les installer séparément. Vous aurez également besoin d’un nom de domaine (ou sous-domaine) pointant vers l’IP de votre VPS via un enregistrement A, et d’un compte Hetzner Object Storage si vous souhaitez externaliser le stockage des vidéos (recommandé pour les instances de production). Comptez environ 60 minutes de déploiement actif, sans compter le temps de transcodage de vos premières vidéos.

Étape 1 — Architecture PeerTube : Node.js, Postgres, Redis et ffmpeg

Avant de lancer la moindre commande, il est utile de comprendre comment les quatre composants de PeerTube s’articulent, car cette compréhension vous évitera la plupart des erreurs de configuration que l’on rencontre en production.

Le cœur de PeerTube est une application Node.js (TypeScript compilé) qui expose à la fois l’interface web et l’API REST. C’est ce processus qui gère l’authentification des utilisateurs, le chargement des vidéos, la gestion des chaînes et la fédération ActivityPub. Il tourne par défaut sur le port 9000 en interne et ne doit jamais être exposé directement à Internet — NGINX joue le rôle de reverse proxy.

PostgreSQL stocke toutes les métadonnées : comptes utilisateurs, fiches vidéo (titre, description, tags, visibilité), abonnements, historique de visionnage, logs de modération. Pour une instance PME avec quelques centaines de vidéos, PostgreSQL consomme peu de ressources mais sa disponibilité est critique — si Postgres tombe, l’instance entière est indisponible. C’est pourquoi les sauvegardes régulières de la base (au moins quotidiennes via `pg_dump`) doivent être mises en place dès le premier jour.

Redis gère deux fonctions distinctes : le cache des sessions et des données fréquemment accédées (accélère les chargements de page), et la gestion des jobs asynchrones via Bull. Le transcodage multi-résolutions, les notifications, la génération de miniatures et la fédération avec d’autres instances PeerTube sont tous orchestrés comme des jobs Redis. Sans Redis, aucun transcodage n’est possible.

Enfin, ffmpeg est le moteur de transcodage vidéo. PeerTube l’appelle en sous-processus depuis les workers Node.js pour convertir chaque vidéo uploadée en plusieurs résolutions (1080p, 720p, 480p, 360p) et les encoder en H.264 ou AV1. Le transcodage est l’opération la plus consommatrice en CPU — c’est la raison pour laquelle un CX31 avec 2 vCPU est le minimum recommandé, et pourquoi il vaut mieux déclencher le transcodage en dehors des heures de formation.

Étape 2 — Déployer via docker-compose officiel

PeerTube fournit un fichier docker-compose officiel maintenu par l’équipe Framasoft. Cette approche est de loin la plus fiable pour une installation en production : les versions des composants sont épinglées et testées ensemble, et les mises à jour se font proprement. On commence par récupérer ce fichier directement depuis le dépôt officiel.

Connectez-vous en SSH sur votre VPS Hetzner, puis créez le répertoire de travail PeerTube et récupérez les fichiers de configuration officiels :

# Créer le répertoire de travail
mkdir -p /opt/peertube && cd /opt/peertube

# Télécharger le docker-compose officiel depuis le dépôt PeerTube
curl -fsSL https://raw.githubusercontent.com/Chocobozzz/PeerTube/develop/support/docker/production/docker-compose.yml \n  -o docker-compose.yml

# Télécharger le fichier d'environnement de référence
curl -fsSL https://raw.githubusercontent.com/Chocobozzz/PeerTube/develop/support/docker/production/.env \n  -o .env

# Télécharger la configuration NGINX packagée
curl -fsSL https://raw.githubusercontent.com/Chocobozzz/PeerTube/develop/support/docker/production/config/nginx.conf \n  -o nginx.conf

Une fois les fichiers récupérés, ouvrez le fichier .env pour y définir les variables essentielles. Les trois valeurs à changer impérativement sont PEERTUBE_WEBSERVER_HOSTNAME (votre domaine, par exemple video.monentreprise.com), POSTGRES_PASSWORD (un mot de passe fort, générez-en un avec openssl rand -base64 32) et PEERTUBE_SECRET (une chaîne aléatoire de 32+ caractères pour les tokens JWT). Assurez-vous également que PEERTUBE_WEBSERVER_PORT=443 et PEERTUBE_WEBSERVER_HTTPS=true si vous prévoyez un certificat SSL (ce qui est obligatoire en production).

# Éditer le fichier .env
nano /opt/peertube/.env

# Variables minimales à renseigner :
# PEERTUBE_WEBSERVER_HOSTNAME=video.monentreprise.com
# PEERTUBE_WEBSERVER_PORT=443
# PEERTUBE_WEBSERVER_HTTPS=true
# POSTGRES_USER=peertube
# POSTGRES_PASSWORD=
# POSTGRES_DB=peertube
# PEERTUBE_DB_USERNAME=peertube
# PEERTUBE_DB_PASSWORD=
# PEERTUBE_SECRET=

Après avoir édité .env, lancez l’ensemble du stack pour la première fois. Docker Compose va télécharger les images PeerTube, PostgreSQL et Redis, créer les volumes persistants, initialiser la base de données et démarrer tous les services :

cd /opt/peertube
docker compose up -d

# Vérifier que tous les conteneurs sont bien en état "Up"
docker compose ps

La sortie de docker compose ps doit afficher au moins quatre services avec le statut Up : peertube, postgres, redis et postfix (le MTA pour les e-mails de confirmation). Si le conteneur peertube boucle en Restarting, consultez les logs avec docker compose logs peertube --tail=50 — la cause est presque toujours une variable d’environnement manquante ou mal formatée dans .env.

Étape 3 — Configurer NGINX reverse proxy + Let’s Encrypt

PeerTube tourne sur le port 9000 en interne mais ne doit jamais être exposé directement. NGINX joue le rôle de reverse proxy SSL, gère la terminaison TLS, sert les fichiers statiques directement (évitant ainsi de faire transiter les flux vidéo par Node.js), et assure la mise en cache. La configuration NGINX officielle de PeerTube est optimisée pour ce cas d’usage — utilisez-la comme base, ne la réécrivez pas de zéro.

Sur Ubuntu 22.04, installez NGINX et Certbot en dehors de Docker (NGINX en dehors du stack Docker est recommandé pour simplifier le renouvellement des certificats) :

# Installer NGINX et Certbot
apt-get update && apt-get install -y nginx certbot python3-certbot-nginx

# Obtenir le certificat Let's Encrypt pour votre domaine
certbot certonly --nginx -d video.monentreprise.com --email admin@monentreprise.com --agree-tos --non-interactive

Une fois le certificat obtenu (Let’s Encrypt dépose les fichiers dans /etc/letsencrypt/live/video.monentreprise.com/), copiez la configuration NGINX de PeerTube et adaptez-la au nom de domaine :

# Copier la configuration de référence
cp /opt/peertube/nginx.conf /etc/nginx/sites-available/peertube

# Remplacer le hostname placeholder par votre domaine
sed -i 's/peertube.example.com/video.monentreprise.com/g' /etc/nginx/sites-available/peertube

# Activer le vhost
ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube

# Valider la syntaxe
nginx -t

# Recharger NGINX
systemctl reload nginx

Après le rechargement, testez en ouvrant https://video.monentreprise.com dans un navigateur. Vous devez voir la page d’accueil PeerTube avec un cadenas vert dans la barre d’adresse. Si NGINX retourne une erreur 502 Bad Gateway, c’est que le conteneur PeerTube n’écoute pas encore sur le port 9000 — vérifiez docker compose ps et attendez quelques secondes le temps que Node.js finisse de démarrer. Le renouvellement automatique des certificats Let’s Encrypt est géré par le timer systemd certbot.timer installé automatiquement par Certbot.

Étape 4 — Premier upload : vidéo formation interne

Avant d’uploader votre première vidéo de formation, il faut créer le compte administrateur si ce n’est pas déjà fait. PeerTube génère automatiquement les identifiants root lors du premier démarrage et les affiche dans les logs. Récupérez-les ainsi :

# Afficher les identifiants administrateur générés au premier démarrage
docker compose logs peertube 2>&1 | grep -A5 "User username"

Connectez-vous à l’interface d’administration sur https://video.monentreprise.com/login avec ces identifiants, puis changez immédiatement le mot de passe root via Paramètres → Mon compte. Avant d’uploader quoi que ce soit, prenez cinq minutes pour configurer les paramètres globaux de l’instance dans Administration → Configuration : définissez la langue par défaut (français), désactivez l’inscription publique si l’instance est réservée aux collaborateurs (Signup allowed = false), et configurez la politique de confidentialité par défaut des vidéos sur Privé plutôt que Public. Cette dernière option est cruciale pour éviter qu’un upload accidentel rende visible une formation confidentielle.

Pour uploader votre première vidéo de formation, créez d’abord une chaîne dédiée : Mes vidéos → Mes chaînes → Créer une chaîne. Nommez-la de façon explicite (ex. : « Formations internes RH »), passez-la en mode Privé, puis revenez sur la page d’upload. L’interface accepte les formats MP4, WebM, MKV, AVI et MOV — en pratique, un MP4 encodé en H.264 avec audio AAC est le format d’entrée optimal pour PeerTube car il minimise le travail de transcodage. Après l’upload, PeerTube commence automatiquement à transcoter la vidéo en plusieurs résolutions dès que le fichier est entièrement chargé.

Étape 5 — Transcodage automatique multi-résolutions

Le transcodage est le processus qui transforme votre vidéo source en plusieurs variantes de résolution, permettant au lecteur PeerTube de choisir automatiquement la qualité adaptée à la bande passante disponible du spectateur. C’est la fonctionnalité la plus importante pour le contexte ouest-africain, car un collaborateur à Abidjan regardant une formation sur une connexion 3G aura besoin de la version 360p, tandis qu’un collègue à Dakar en fibre optique accèdera directement au 720p.

La configuration du transcodage se fait dans Administration → Configuration → Transcodage. Par défaut, PeerTube génère les résolutions 240p, 360p, 480p, 720p et 1080p. Pour une instance orientée formations en contexte Afrique de l’Ouest, il est judicieux d’activer explicitement la résolution 360p et de s’assurer qu’elle est générée en priorité. La configuration des encoders recommandée pour 2026 est H.264 (libx264) pour la compatibilité maximale avec tous les navigateurs et appareils mobiles, et optionnellement AV1 pour les fichiers de haute qualité destinés aux archives (meilleur taux de compression, mais encodage 3 à 5 fois plus lent).

# Vérifier l'état de la file de transcodage depuis les logs
docker compose logs peertube 2>&1 | grep -i "transcod" | tail -20

# Si le transcodage est lent ou bloqué, augmenter les workers dans .env :
# PEERTUBE_TRANSCODING_THREADS=2  # correspond aux vCPU disponibles

Le temps de transcodage dépend directement de la durée de la vidéo et du nombre de résolutions à générer. Sur un Hetzner CX31, comptez environ 1,5 fois la durée de la vidéo source pour générer toutes les résolutions en H.264. Une vidéo de formation de 45 minutes sera donc entièrement transcodée en 60 à 70 minutes. Planifiez vos uploads le soir pour que le transcodage se termine sans impacter les performances du serveur pendant les heures de formation.

Étape 6 — Stockage objet S3-compatible (Hetzner Object Storage)

Par défaut, PeerTube stocke les fichiers vidéo transcodés directement sur le disque NVMe du VPS. Les 80 Go du CX31 s’épuisent rapidement avec un catalogue de formations : une vidéo de 30 minutes en 1080p pèse entre 800 Mo et 1,5 Go selon le débit d’encodage. La solution pérenne est d’externaliser le stockage des fichiers vers un service S3-compatible — Hetzner Object Storage est le choix naturel si votre VPS est déjà chez Hetzner, car le trafic interne entre le VPS et le bucket Object Storage est gratuit (pas de coûts de bande passante sortante entre les deux).

Commencez par créer un bucket dans la console Hetzner Cloud (section Object Storage), en choisissant le même datacenter que votre VPS (exemple : Nuremberg nbg1). Générez une paire de clés S3 (Access Key / Secret Key) dans Sécurité → S3 Credentials. Ensuite, configurez PeerTube pour utiliser ce bucket en ajoutant les variables suivantes dans votre fichier .env :

# Stockage objet Hetzner — à ajouter dans /opt/peertube/.env
PEERTUBE_OBJECT_STORAGE_ENABLED=true
PEERTUBE_OBJECT_STORAGE_ENDPOINT=nbg1.your-objectstorage.com
PEERTUBE_OBJECT_STORAGE_REGION=eu-central
PEERTUBE_OBJECT_STORAGE_CREDENTIALS_ACCESS_KEY_ID=
PEERTUBE_OBJECT_STORAGE_CREDENTIALS_SECRET_ACCESS_KEY=
PEERTUBE_OBJECT_STORAGE_VIDEOS_BUCKET_NAME=monentreprise-peertube-videos
PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BUCKET_NAME=monentreprise-peertube-hls

Après avoir édité .env, relancez le stack pour prendre en compte la configuration :


ملخص بالعربية: نشر PeerTube على خادم Hetzner CX31 في أقل من ساعة: استضافة مقاطع الفيديو التدريبية الداخلية بشكل مستقل، بعيداً عن YouTube، مع التشفير الكامل وقنوات خاصة لفرق داكار وأبيدجان. حل مهني بالكامل للمؤسسات الغربية الأفريقية الراغبة في السيادة الرقمية.
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité