Skip to main content

Installation de PeerTube avec Docker : Alternative éthique à YouTube pour associations et collectifs

Table des matières

  1. Introduction à PeerTube
  2. Prérequis matériels
  3. Installation initiale avec DockerArchitecture
  4. Comprendre le transcodage vidéoPréparation
  5. Configuration optimale du transcodageInstallation
  6. Organisation du stockageTraefik
  7. SystèmeConfiguration de backup automatiquePeerTube
  8. Commandes utilesSécurité
  9. SurveillanceRéseau
etTranscodage maintenanceUtilisateurs Stockage Maintenance Troubleshooting

1. Introduction à PeerTube

Qu'Qu’est-ce que PeerTube ?

PeerTube est une plateforme vidéo gratuiteopen source, décentralisée et open source, alternative à YouTube. Elle utilise le protocole 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.peer.

Avantages principaux :

  • Pas de publicité
  • Hébergement autonome
  • Partage de bande passante entre spectateurs (P2P)P2P
  • Contrôle total de vosdes données
Fédération via ActivityPub Streaming HLS adaptatif

À qui s's’adresse ce guide ?

Ce tutoriel estpermet conçude pour mettre en placedéployer une instance de test de PeerTube sur un serveur domestique. Il convient parfaitement pour :

    Tester PeerTube avant de l'utiliser en production Héberger des vidéos pour une petite communauté Apprendre à gérer une plateforme vidéo auto-hébergée

    Prérequis matériels

    Configuration minimale recommandée

      Processeur : 4 cœurs minimum (8 threads recommandé pour le transcodage) RAM : 4 GB minimum, 8 GB recommandé Stockage :
        Un SSD/NVMe rapide pour les données actives (200 GB minimum) Un HDD pour les backups (optionnel mais recommandé)

        Configuration de ce tutoriel

        Pour ce guide, nous utiliserons un serveur avec :

        • Nom de domaine personnalisé
        HTTPS automatique (Let’s Encrypt) Sécurité renforcée (firewall, fail2ban) Inscriptions avec validation email Architecture scalable

        2. Prérequis

        Matériel recommandé

        Configuration Valeur recommandée CPU :4 AMD Ryzen 5cœurs (8 threads)threads idéal) RAM 8 Go minimum Stockage 200 Go SSD/NVMe Bande passante Upload ≥ 20 Mbps

        Logiciels requis

        • Stockage principal : NVMe 454 GB
        Stockage secondaire : HDD 916 GB (pour les backups) SystèmeOS : Debian 12 (Bookworm)

        Installation initiale avec

        Docker

        É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 : Générer un secret sécurisé

        Ne laissez jamais le secret par défaut. Générez-en un nouveau :

        openssl rand -hex 32
        

        Copiez le résultat et remplacezDocker la valeur de PEERTUBE_SECRET dans le fichier .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

        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 formatsCompose LeAccès transcodage garantit une lecture partoutDNS (Chrome,OVH, Firefox,Cloudflare, Safari,etc.) IP publique fixe ou dynamique Compte email SMTP (Gmail, SendGrid, etc.)

          2. Adaptation à la connexion Internet

            Connexion lente → qualité 360p ou 480p Fibre optique → qualité 1080p ou supérieure Streaming fluide pour tous

            3. SansArchitecture

            transcodage

            Schéma

              d’architecture Les utilisateurs avec mauvaise connexion ne peuvent pas regarder Risqueet de formats vidéo incompatibles

              Les contraintes du transcodage

              Ressources nécessaires :fonctionnement

                CPU : Très gourmand en processeur (peut prendre 100% d'un cœur) Temps : 2-3x la durée de la vidéo (une vidéo de 1h = 2-3h de transcodage) Espace disque : 1 vidéo devient 3-5 versions différentes

                Exemple concret :

                  Vidéo de 30 minutes uploadée Transcodage avec 3 qualités (480p, 720p, 1080p) Temps estimé : 1h30 à 2h Espace utilisé : ~3x la taille originale

                  Configuration optimale du transcodage

                  Choix du format de streaming : HLS

                  Nous recommandons HLS (HTTP Live Streaming) plutôt que Web Videos :

                  Avantages du HLS :

                    Lecture adaptative automatique selon la connexion Support natif du peer-to-peer (WebRTC) Meilleur streaming pour les longues vidéos

                    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 :

                    Résolution Activer ? Usage 2160p (4K) ❌ Trop lourd pour un serveur de test 1440p ❌ Pas nécessaire 1080p ✅ Qualité maximale recommandée 720p ✅ Bon compromis qualité/poids 480p ✅ Pour connexions moyennes 360p ❌ Pas nécessaire pour un serveur local 240p ❌ Qualité trop faible

                    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

                      Nombre de threads CPU par vidéo en transcodage Trop élevé → le système rame Trop bas → transcodage très lent 3 = bon équilibre pour 8 threads totaux

                      concurrency: 2

                        Nombre de vidéos transcodées en parallèle 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é)

                          Ouvrez 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

                          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 :

                            Transcodage vidéo (lecture/écriture intensive) Base de données (accès rapide) Fichiers temporaires

                            HDD lent :

                              Sauvegardes (vitesse moins importante) Archive des anciennes vidéos Coût au GB plus faible

                              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é│                                   │   │
                                │   │  Visiteur   │───▶│   Traefik   │───▶│         PeerTube                  │   │
                                │   │             │    │             │    │                                   │   │
                                │   └─────────────┘    └─────────────┘    └───────────────────────────────────┘   │
                                │          ▲                                      │                           │
                                │          │                                      ▼                           │
                                │   ┌──────┴──────┐                        ┌─────────────────────┐               │
                                │   │   Internet  │                        │   PostgreSQL/Redis   │               │
                                │   └────────────┘                        └─────────────────────┘               │
                                │                                                                               │
                                └───────────────────────────────────────────────────────────────────────────────┘
                                

                                Créer

                                Flux de données :

                                  Le visiteur accède à peertube.mondomaine.fr (HTTPS). Traefik gère le scriptcertificat SSL et redirige vers PeerTube. PeerTube lit/écrit dans PostgreSQL et Redis. Les vidéos sont stockées en HLS pour le streaming adaptatif.

                                  4. Préparation du serveur

                                  Structure des dossiers

                                  mkdir -p ~/peertube/{traefik/{dynamic,acme},config}
                                  cd ~/peertube
                                  

                                  Permissions critiques :

                                  touch traefik/acme/acme.json
                                  chmod 600 traefik/acme/acme.json
                                  

                                  5. Installation avec Docker Compose

                                  Fichier docker-compose.yml

                                  services:
                                    traefik:
                                      image: traefik:v3.3
                                      container_name: traefik
                                      restart: always
                                      ports:
                                        - "80:80"
                                        - "443:443"
                                      volumes:
                                        - /var/run/docker.sock:/var/run/docker.sock:ro
                                        - ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
                                        - ./traefik/dynamic:/etc/traefik/dynamic:ro
                                        - ./traefik/acme:/acme
                                      networks:
                                        - traefik-proxy
                                  
                                    peertube:
                                      image: chocobozzz/peertube:v8.0.0-trixie
                                      container_name: peertube
                                      restart: always
                                      volumes:
                                        - data:/data
                                        - ./config:/config
                                      depends_on:
                                        - postgres
                                        - redis
                                        - traefik
                                      networks:
                                        - traefik-proxy
                                        - peertube
                                      environment:
                                        - PEERTUBE_WEBSERVER_HOSTNAME=peertube.mondomaine.fr
                                        - PEERTUBE_WEBSERVER_HTTPS=true
                                        - PEERTUBE_WEBSERVER_PORT=443
                                        - PEERTUBE_DB_HOSTNAME=postgres
                                        - PEERTUBE_DB_USERNAME=peertube
                                        - PEERTUBE_DB_PASSWORD=peertube
                                        - PEERTUBE_REDIS_HOSTNAME=redis
                                      labels:
                                        - "traefik.enable=true"
                                        - "traefik.http.routers.peertube.entrypoints=http"
                                        - "traefik.http.routers.peertube.rule=Host(`peertube.mondomaine.fr`)"
                                        - "traefik.http.routers.peertube-secure.entrypoints=https"
                                        - "traefik.http.routers.peertube-secure.rule=Host(`peertube.mondomaine.fr`)"
                                        - "traefik.http.routers.peertube-secure.tls=true"
                                        - "traefik.http.routers.peertube-secure.tls.certresolver=letsencrypt"
                                        - "traefik.http.services.peertube.loadbalancer.server.port=9000"
                                        - "traefik.docker.network=traefik-proxy"
                                  
                                    postgres:
                                      image: postgres:16-alpine
                                      container_name: peertube-postgres
                                      restart: always
                                      environment:
                                        POSTGRES_USER: peertube
                                        POSTGRES_PASSWORD: peertube
                                        POSTGRES_DB: peertube
                                      volumes:
                                        - db:/var/lib/postgresql/data
                                      networks:
                                        - peertube
                                  
                                    redis:
                                      image: redis:7-alpine
                                      container_name: peertube-redis
                                      restart: always
                                      volumes:
                                        - redis:/data
                                      networks:
                                        - peertube
                                  
                                  networks:
                                    traefik-proxy:
                                      name: traefik-proxy
                                      driver: bridge
                                    peertube:
                                      name: peertube
                                      driver: bridge
                                  
                                  volumes:
                                    data:
                                    db:
                                    redis:
                                  

                                  ⚠️ Remplacez peertube.mondomaine.fr et les mots de backuppasse par vos valeurs.


                                  6. Configuration Traefik

                                  Fichier traefik/traefik.yml

                                  Étape

                                  api:
                                    1dashboard: true
                                    insecure: false
                                  
                                  entryPoints:
                                    http:
                                      address: ":80"
                                      http:
                                        redirections:
                                          entryPoint:
                                            to: https
                                            scheme: https
                                            permanent: true
                                    https:
                                      address: ":443"
                                      http:
                                        tls:
                                          certResolver: letsencrypt
                                  
                                  providers:
                                    docker:
                                      endpoint: "unix:///var/run/docker.sock"
                                      exposedByDefault: false
                                      network: traefik-proxy
                                    file:
                                      directory: /etc/traefik/dynamic
                                      watch: true
                                  
                                  certificatesResolvers:
                                    letsencrypt:
                                      acme:
                                        email: admin@mondomaine.fr
                                        storage: /acme/acme.json
                                        httpChallenge:
                                          entryPoint: http
                                  

                                  7. Configuration PeerTube

                                  Fichier config/production.yaml

                                  listen:
                                    hostname: '0.0.0.0'
                                    port: 9000
                                  
                                  webserver:
                                    https: true
                                    hostname: 'peertube.mondomaine.fr'
                                    port: 443
                                  
                                  database:
                                    hostname: 'postgres'
                                    port: 5432
                                    suffix: ''
                                    username: 'peertube'
                                    password: 'peertube'
                                    pool:
                                      max: 5
                                  
                                  redis:
                                    hostname: 'redis'
                                    port: 6379
                                    auth: null
                                    db: 0
                                  
                                  smtp:
                                    hostname: smtp.gmail.com
                                    port: 465
                                    username: votre-email@gmail.com
                                    password: "votre-mot-de-passe-app"
                                    tls: true
                                    disable_starttls: false
                                    ca_file: null
                                    from_address: votre-email@gmail.com
                                  
                                  signup:
                                    enabled: true
                                    limit: 10
                                    requires_email_verification: true
                                  
                                  video_transcoding:
                                    enabled: true
                                    web_videos:
                                      enabled: false
                                    hls:
                                      enabled: true
                                  
                                  secrets:
                                    peertube: "REMPLACER_PAR_VOTRE_SECRET"
                                  

                                  ⚠️ Générez un secret sécurisé :

                                  Créer
                                  openssl lerand fichier-hex script32
                                  

                                  8. Sécurité

                                  UFW Firewall

                                  sudo apt install -y ufw
                                  sudo ufw default deny incoming
                                  sudo ufw default allow outgoing
                                  sudo ufw allow 22/tcp comment 'SSH'
                                  sudo ufw allow 80/tcp comment 'HTTP'
                                  sudo ufw allow 443/tcp comment 'HTTPS'
                                  sudo ufw --force enable
                                  

                                  Fail2ban

                                  sudo apt install -y fail2ban
                                  sudo nano /usr/local/bin/backup-etc/fail2ban/jail.local
                                  
                                  [DEFAULT]
                                  bantime = 3600
                                  findtime = 600
                                  maxretry = 5
                                  banaction = ufw
                                  backend = systemd
                                  
                                  [sshd]
                                  enabled = true
                                  port = 22
                                  maxretry = 3
                                  bantime = 7200
                                  

                                  9. Configuration réseau

                                  DNS

                                  Ajoutez un enregistrement A chez votre registrar :

                                  peertube.shmondomaine.fr → VOTRE_IP_PUBLIQUE
                                  

                                  Redirection de ports (NAT/PAT)

                                  Service Port externe IP interne Port interne Protocole HTTP 80 192.168.x.x 80 TCP HTTPS 443 192.168.x.x 443 TCP

                                  10. Transcodage vidéo

                                  Configuration recommandée

                                  video_transcoding:
                                    enabled: true
                                    web_videos:
                                      enabled: false
                                    hls:
                                      enabled: true
                                  

                                  CopiezRésolutions ce contenuconseillées :

                                    480p, 720p, 1080p

                                    11. Gestion des utilisateurs

                                    Activer les inscriptions

                                      Via l’interface admin ou production.yaml :
                                      signup:
                                        enabled: true
                                        requires_email_verification: true
                                      

                                      12. Stockage et backup

                                      Script de backup automatique

                                      #!/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/peertube/"
                                      
                                      # Destination : disque de backup
                                      DEST="/mnt/backup-disk/peertube_backup/"
                                      
                                      echo "[$DATE] Début du backup PeerTube" >> $LOG
                                      #docker Copiecompose avecstop rsyncpeertube postgres redis
                                      rsync -av --delete "$SOURCE" "$DEST" >> $LOG 2>&1
                                      #docker Vérificationcompose dustart résultatpeertube ifpostgres [ $? -eq 0 ]; then
                                          echo "[$DATE] ✓ Backup terminé avec succès" >> $LOG
                                      else
                                          echo "[$DATE] ✗ ERREUR lors du backup" >> $LOG
                                      firedis
                                      


                                      Explication13. duMaintenance

                                      script

                                      Commandes :utiles

                                        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

                                          sudodocker chmodcompose +xlogs /usr/local/bin/backup-peertube.sh-f peertube
                                          docker compose restart peertube
                                          docker system prune -a
                                          

                                          Étape 3

                                          14. : 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 :Troubleshooting

                                          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 :

                                          SyntaxeProblème SignificationSolution
                                          0Conteneur 2ne *démarre * *pas Tousdocker lescompose jourslogs à 2h00peertube
                                          0Certificat */6SSL *non * *obtenu ToutesVérifier lesDNS, 6ports, heurespermissions acme.json
                                          30Pas 3de *bouton * 0"S’inscrire" TousVérifier lessignup.enabled dimanchesdans à 3h30production.yaml
                                          0Emails 0non 1 * *envoyés LeTester 1erSMTP manuellement, vérifier mot de chaquepasse moisapplication à(Gmail)
                                          minuit Transcodage très lent Réduire le nombre de résolutions, surveiller CPU avec htop

                                          Vérifier l'installation

                                          sudo grep "backup-peertube" /etc/crontab
                                          

                                          Commandes utiles

                                          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 ?

                                            Vous utilisez le PC pendant le transcodage D'autres services Docker tournent en parallèle Le système devient trop lent

                                            Surveillance et maintenance

                                            Surveillance régulière

                                            1. Espace disque (hebdomadaire)

                                            df -h /
                                            

                                            Si l'espace disque dépasse 80%, libérez de l'espace :

                                              Supprimez d'anciennes vidéos Nettoyez les logs Docker : docker system prune -a

                                              2. Logs de backup (mensuel)

                                              grep "ERREUR" /var/log/peertube-backup.log
                                              

                                              Si des erreurs apparaissent, vérifiez :

                                                Le disque de backup est monté : 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

                                                  Aspect Configuration Résultat Format streaming HLS activé Lecture adaptative fluide Résolutions 480p, 720p, 1080p Compromis qualité/poids Threads CPU 3 threads/vidéo Bon équilibre Concurrence 2 vidéos en parallèle Maximum 6 threads utilisés Stockage NVMe Données actives Accès rapide Stockage HDD Backups quotidiens Grande capacité Backup automatique Tous les jours à 2h Sécurité des données

                                                  📊 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

                                                      Uploadez 2-3 vidéos de test Observez le temps de transcodage Vérifiez la qualité des différentes résolutions

                                                      Surveiller les backups

                                                        Attendez 1 semaine Vérifiez les logs : tail /var/log/peertube-backup.log Testez une restauration

                                                        Ajuster les performances

                                                          Si trop lent : augmentez concurrency Si le PC rame : diminuez threads Si manque d'espace : désactivez la 1080p

                                                          Ressources utiles