まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Upload de gros fichiers vidéos sur une instance Peertube

peertube.png Quand on lit la documentation où les issues « Github » de Peertube, Chocobozzz nous indique clairement qu'il fût un temps révolu où la taille maximale d'une vidéo accepté par Peertube était de 4Gio, mais que maintenant c'est bien 8Gio qu'il est possible d'envoyer.

  • Pour le vérifier, sous Yunohost il suffit d'aller voir le fichier de config nginx dédié :
cat /etc/nginx/conf.d/peertube.makotoworkshop.org.d/peertube.conf

Et de retrouver l'information spécifiée ici :

# Hard limit, PeerTube does not support videos > 8GB
    client_max_body_size 8G;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
  • Et pourtant, j'ai voulu uploader une vidéo de 5,2Gio, et de recevoir l'erreur « 500 Internal Server Error », délivrée par nginx

peertubenginx.png

  • Comme il faut toujours penser à aller voir les logs, voici ce qu'indique ce dernier > /var/log/nginx/peertube.makotoworkshop.org-error.log
2018/12/08 11:54:07 [crit] 16767#16767: *330304 pwrite() "/var/lib/nginx/body/0000032486" failed (28: No space left on device),

Visiblement le fichier vidéo est uploadé depuis mon ordi de bureau sur le serveur, dans le dossier /var/lib/nginx/body/, et si on regarde l'espace libre sur le disque, on se rend compte effectivement que ça risque pas de marcher :

Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda1           11G    7,1G  3,5G  68% /


Pour vérifier, j'ai ré-uploadé la vidéo et tenté de regarder en même temps dans le dossier /var/lib/nginx/body/, mais rien n’apparaît.
Pour voir quelque chose, il faut observer le démon nginx, en répérant tout d'abord son pid.

  • Donc durant d'upload, faire un top et relever le pid nginx au sommet de la liste, par exemple :
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
16767 www-data  20   0  345480   9472   4272 S   1,3  0,5  13:07.85 nginx
  • Taper ensuite :
lsof -p 16767 | grep /var/lib/nginx/body/

Qui renvoie l'état de l'upload :

nginx   16767 www-data   85u      REG                8,1 3180183973      4917 /var/lib/nginx/body/0000032604 (deleted)

Jusqu'au dernier morceau, puis plus rien, le fichier à disparu, et le message d'erreur à retenti.

lsof -p 16767 | grep /var/lib
nginx   16767 www-data   85u      REG                8,1 3655360512      4917 /var/lib/nginx/body/0000032604 (deleted)

On voit que la taille 3655360512 arrondis en Gio donne 3,4 Gio, ce qui correspond à l'espace libre de la partition indiqué plus haut.
C'est donc confirmé, le problème à bien pour solution l'attribution de suffisamment d'espace disque libre pour permettre à ce cache de pouvoir se faire normalement.

  • Pour cela on édite la configuration nginx :
nano /etc/nginx/conf.d/peertube.makotoworkshop.org.d/peertube.conf

Pour ajouter à la fin un dossier situé sur un disque contenant suffisamment d'espace, donc au moins 8Gio :

client_body_temp_path /home/yunohost.app/peertube/storage/uploads;

Et redémarrer les serveurs pour prendre en compte ce changement :

service peertube restart
service nginx restart


  • Pour confirmer, refaire la manipulation précédente, en regardant cette fois le nouveau chemin :
lsof -p 28744 | grep /home/yunohost.app/peertube/storage/uploads

Qui renvoie alors, une fois le fichier totalement uploadé :

nginx   28744 www-data   67u      REG                8,3 5219139353  25953028 /home/yunohost.app/peertube/storage/uploads/0000000004 (deleted)

On a bien les 5,2Gio.
Peertube passe donc de la phase « Upload 100% » à la phase « Processing…», et durant ce temps la vidéo reste présente dans le dossier temporaire.
Puis Peertube passe en phase d'encodage, et le fichier est alors supprimé du dossier, la commande lsof ne renvoie plus rien.


Ressources :
- https://github.com/Chocobozzz/PeerTube/issues/1359
- https://github.com/Chocobozzz/PeerTube/issues/1423

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet