Problème de quota ou autre "Unknown error"

Bonjour à tous. Je suis nouveau et je viens de me faire installer Peertube via docker compose.

Je n’arrive plus à télécharger de vidéos, un message « unknown error » s’invite à la fin du téléversement.
Je vois dans mes logs [peertube.dc.pini.fr:443] 2021-01-19 19:15:53.801 info: 172.18.0.0 - - [19/Jan/2021:19:15:53 +0000] « GET /api/v1/users/me/video-quota-used HTTP/1.1 » 304 - « PeerTube » « Firefox »

J’en déduis, peut-être naïvement, que j’ai un problème de quota atteint. Quand je vais dans mes utilisateurs, je vois que ma chaîne a un quota à 672 MB. Pourtant, j’ai déjà téléversé 2 vidéos qui totalisent en brut 892 Mo…

Bref, est-ce que quelqu’un saurait me dire si mon problème est un problème de quota? Et si oui, où puis-je trouver les paramétrages pour ma chaîne ?

Merci d’avance

Citoyen_Dc

Non, le code de retour associé à cette ligne du log n’est pas un code d’erreur. C’est juste une requête faite pour vérifier le quota disponible.

Avez-vous des erreurs plus spécifiques dans votre console navigateur ? Lors de l’« unknown error » ?

Si vous souhaitez paramétrer le quota alloué à votre utilisateur, la documentation explique comment s’y retrouver : Manage Users & Auth | PeerTube documentation

Si vous voulez juste éditer votre chaîne, ce sera plutôt User library | PeerTube documentation

Bonjour Rigelk et merci pour ce retour.

Entre temps, j’ai parcouru un peu la doc et j’ai compris comment se gérait les quotas et à priori je suis illimité sur le profil admin que je me suis créé.

J’ai retenté l’expérience ce matin et voici mes logs

Pour info, j’avais réussi à mettre mes 2 premières vidéos depuis edge voyant que ça ne fonctionnait pas avec Firefox (toujours cette unknonwn error). J’ai le problème sur les deux navigateurs maintenant. Hier, j’ai réussi à téléverser une petite vidéo de 300 Mo mais je bloque sur les vidéos de plus d’1 Go que je veux poser…

A part, l’erreur inconnue, rien d’autre n’apparaît à l’écran…

Je ne sais pas si c’est l’heure qui apparaît après la date dans les logs mais à priori, j’ai environ une demi-heure de décalage avec l’heure réelle (ça n’a sûrement pas d’importance mais je le signale).

Avez-vous des erreurs plus spécifiques dans votre console navigateur lors de l’« unknown error » ?

Non je n’ai rien d’autre… c’est très étrange.

Bonjour Rigelk,
tu n’as pas d’idée sur la raison de mon problème ?
Connaitrais-tu par hasard qq1 qui pourrait me dépanner ? Je suis bien bloqué par ce problème.
J’ai réussi à le contourner en partie via une ancienne chaine que j’avais sur une autre instance en faisant des imports par URL. Le problème c’est que cette instance bloque à 500 Mo ses utilisateurs…

Merci

Non, aucune idée. Je t’invite à rentrer en contact avec ton administrateur d’instance pour qu’il t’aide.

Le problème est que j’administre ma propre instance mais que je ne suis pas encore fin connaisseur de sa mécanique… Merci quand même

Une erreur pour des fichiers «gros», ça me fait penser aux paramètres du type client_max_body_size dans la config nginx.
Je ne sais pas comment marche l’installation Docker, mais il faudrait vérifier si ce paramètre a la bonne valeur (au moins 2G). Et si le dossier temporaire dans lequel sont posé les fichiers pendant l’upload est suffisamment grand (je ne sais pas où ça se passe pour docker).
L’erreur est-elle instantanée, ou après l’envoie d’un certain volume de données ?

Pour les logs dans la capture d’écran, il n’y a que des requêtes GET, aucun envoie (POST).

Ça aussi il va falloir le creuser. Ça peut créer des erreurs inattendues un serveur qui n’est pas à la bonne heure. Il faudrait vérifier qu’il est à l’heure, et qu’un service NTP est configuré (pour le maintenir à l’heure).

Merci John. Je regarde ces points et reviens vers toi pour te dire ce qu’il en est. Merci beaucoup

Bonjour, c’est moi qui ai configuré l’instance de @citoyen_dc.

De mon côté j’arrive à uploader sur son instance. La différence principale entre mes uploads et les siens, c’est que je suis en ADSL, avec un débit d’upload catastophique. Plus de 2h pour uploader 900 Mo. Lui dispose d’une connexion fibre et il lui faut quelques secondes avant que ça plante, mais la progression affiche plusieurs dizaines de %, voire 100% dans certains cas avant d’aboutir à « Unknown error ».

J’ai monitoré les logs du reverse proxy (nginx-proxy) et celles de l’instance PeerTube pendant ses uploads. Le reverse proxy indique le stockage du fichier dans un répertoire temporaire, puis plus aucune trace avant le plantage. Les logs PeerTube n’indiquent aucune activité pendant cette étape o_O.

Quels sont les cas d’erreur pouvant aboutir à ce message laconique « Unknown error » ?
Y a-t-il moyen d’augmenter la verbosité des logs PeerTube pour en savoir plus ?
Avez-vous connaissance d’une configuration nginx qui permettrait de limiter le débit d’upload, pour voir si ça a un effet ?

Merci par avance.

Bonjour,

Pouvez-vous essayer d’ajouter https://github.com/Chocobozzz/PeerTube/commit/df7b786f09418ed3f7fdafb0d0158103ad02d08e à votre conf nginx ?

Bonjour @Chocobozzz,
Cette conf était déjà en place lors de nos derniers tests. J’ai repris tout ce que je pouvais de la conf présente dans le fichier support/nginx/peertube du dépôt github. Avec nginx-proxy, la configuration est répartie sur trois fichiers.

1- Les directives server générées automatiquement pour l’hôte virtuel :

# peertube.example.com
upstream peertube.example.com {
        ## Can be connected with "reverse-proxy_bridge" network
        # peertube_peertube_1
        server 172.18.0.3:9000;
        # Fallback entry
        server 127.0.0.1 down;
}
server {
        server_name peertube.example.com;
        listen 80  ;
        access_log /var/log/nginx/access.log vhost;
        # Do not HTTPS redirect Let'sEncrypt ACME challenge
        location /.well-known/acme-challenge/ {
                auth_basic off;
                allow all;
                root /usr/share/nginx/html;
                try_files $uri =404;
                break;
        }
        location / {
                return 301 https://$host$request_uri;
        }
}
server {
        server_name peertube.example.com;
        listen 443 ssl http2  ;
        access_log /var/log/nginx/access.log vhost;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_certificate /etc/nginx/certs/peertube.example.com.crt;
        ssl_certificate_key /etc/nginx/certs/peertube.example.com.key;
        ssl_dhparam /etc/nginx/certs/peertube.example.com.dhparam.pem;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/certs/peertube.example.com.chain.pem;
        add_header Strict-Transport-Security "max-age=31536000" always;
        include /etc/nginx/vhost.d/peertube.example.com;
        location / {
                proxy_pass http://peertube.example.com;
                include /etc/nginx/vhost.d/peertube.example.com_location;
        }
}

2- La configuration personalisée présente dans le fichier vhost.d/peertube.example.com

location @api {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host            $host;
  proxy_set_header X-Real-IP       $remote_addr;

  client_max_body_size  100k; # default is 1M

  proxy_connect_timeout 10m;
  proxy_send_timeout    10m;
  proxy_read_timeout    10m;
  send_timeout          10m;

#  proxy_upload_rate 1500k;
  proxy_pass http://peertube.example.com;
}

# Dans _location
#location / {
#  try_files /dev/null @api;
#}

location ~ ^/api/v1/(videos|video-playlists|users/me/avatar/pick)$ {
  client_max_body_size                      2800k; # default is 1M
  add_header            X-File-Maximum-Size 2M always; # inform backend of the set value in bytes before mime-encoding (x * 1.4 = client_max_body_size)

  try_files /dev/null @api;
}

location = /api/v1/videos/upload {
  limit_except POST HEAD { deny all; }

  # This is the maximum upload size, which roughly matches the maximum size of a video file.
  # Note that temporary space is needed equal to the total size of all concurrent uploads.
  # This data gets stored in /var/lib/nginx by default, so you may want to put this directory
  # on a dedicated filesystem.
  client_max_body_size                      11200M; # default is 1M
  add_header            X-File-Maximum-Size 8G always; # inform backend of the set value in bytes before mime-encoding (x * 1.4 = client_max_body_size)

  try_files /dev/null @api;
}

##
# Websocket
##

location @api_websocket {
  proxy_http_version 1.1;
  proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header   Host            $host;
  proxy_set_header   X-Real-IP       $remote_addr;
  proxy_set_header   Upgrade         $http_upgrade;
  proxy_set_header   Connection      "upgrade";

#  proxy_upload_rate 1500k;
  proxy_pass http://peertube.example.com;
}

location /socket.io {
  try_files /dev/null @api_websocket;
}

location /tracker/socket {
  # Peers send a message to the tracker every 15 minutes
  # Don't close the websocket before then
  proxy_read_timeout 15m; # default is 60s

  try_files /dev/null @api_websocket;
}

###
## Performance optimizations
## For extra performance please refer to https://github.com/denji/nginx-tuning
###
#
#root /var/www/peertube/storage;
#
# Enable compression for JS/CSS/HTML, for improved client load times.
# It might be nice to compress JSON/XML as returned by the API, but
# leaving that out to protect against potential BREACH attack.
gzip              on;
gzip_vary         on;
gzip_types        # text/html is always compressed by HttpGzipModule
                  text/css
                  application/javascript
                  font/truetype
                  font/opentype
                  application/vnd.ms-fontobject
                  image/svg+xml;
gzip_min_length   1000; # default is 20 bytes
gzip_buffers      16 8k;
gzip_comp_level   2; # default is 1

client_body_timeout       30s; # default is 60
client_header_timeout     10s; # default is 60
send_timeout              10s; # default is 60
keepalive_timeout         10s; # default is 75
resolver_timeout          10s; # default is 30
reset_timedout_connection on;
proxy_ignore_client_abort on;

tcp_nopush                on; # send headers in one piece
tcp_nodelay               on; # don't buffer data sent, good for small data bursts in real time

3- Enfin le fichier vhost.d/peertube.example.com_location pour le morceau de conf de location /

try_files /dev/null @api;

J’avoue je n’ai pas vraiment de piste. Peut-être essayer https://github.com/Chocobozzz/PeerTube/pull/3489#issuecomment-752545517

On va tenter ça !
@citoyen_dc, c’est configuré. Merci de tester à nouveau.

Même problème, malheureusement

@Chocobozzz, quelles location au sens nginx sont sollicitées pour l’upload ? Ça passe par les websockets ou pas du tout ?

c’est https://docs.joinpeertube.org/api-rest-reference.html#tag/Video/paths/~1videos~1upload/post, donc sans websocket (qui ne sert de toute façon que pour les notifications).

OK. Je pense que je vais monter une instance de test. Pour contourner mon souci de vitesse d’upload, je pense passer par l’API depuis un autre serveur. S’il existe des scripts plus ou moins tout prêts pour lancer un upoad en ligne de commande je suis preneur.