[{"data":1,"prerenderedAt":169},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-audiobookshelf-vps-ma-fr":6,"promo-bar-likely":168},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-audiobookshelf-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":163,"ctaBody":164,"ctaButton":165,"ctaUrl":166,"relatedPosts":167},326,"heberger-audiobookshelf-vps",{"fr":10,"en":12,"ar":13,"es":14},"audiobookshelf-self-hosted-audiobook-and-podcast-server-on-vps","audiobookshelf-خادم-أوديوبوك-وبودكاست-على-vps","audiobookshelf-audiolibros-y-podcasts-self-hosted-en-vps","Audiobookshelf sur VPS : audiolivres et podcasts self-hosted","Audiobookshelf sur VPS : servez votre médiathèque d'audiolivres et de podcasts, synchro iOS et Android avec apps open source, reprenez où vous étiez — sans abonnement.",12,0,false,"2026-01-11T00:00:00+00:00","2026-11-04T16:30:27+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-audiobookshelf-vps-poster.svg",{"categorySlug":34,"appSlug":35},"collaboration","audiobookshelf","Audiobookshelf est un serveur d'audiolivres et de podcasts open source (GPL-3.0) que vous hébergez vous-même. Contrairement aux services cloud, vos fichiers audio restent sur votre serveur : vous les contrôlez entièrement, sans abonnement, sans limite de quota et sans partage de vos habitudes d'écoute. Les applications iOS et Android officielles — entièrement libres — se connectent à votre instance et synchronisent la progression, les marque-pages et les playlists sur tous vos appareils.",[38,42,52,55,58,80,83,86,118,121,139,142,145,148,156,160],{"type":39,"title":40,"body":41},"h2","Pourquoi self-héberger votre bibliothèque audio ?","Les plateformes d'audiolivres imposent leurs catalogues, leurs DRM et leurs prix mensuels. Avec Audiobookshelf, vous importez vos propres fichiers M4B, MP3 ou FLAC — que vous les ayez achetés, empruntés ou produits vous-même — et vous y accédez depuis n'importe quel appareil via les apps mobiles open source. La bibliothèque grandit à votre rythme, pas au leur.",{"type":43,"title":44,"items":45},"ul","Ce qu'Audiobookshelf apporte sur un VPS ServOrbit",[46,47,48,49,50,51],"**Streaming et synchronisation** — reprenez un audiolivre là où vous vous étiez arrêté, sur le web ou sur mobile, sans compte cloud tiers.","**Applications iOS et Android open source** — les clients officiels sont GPL-3.0, auditables et maintenus par la communauté.","**Sauvegardes planifiées intégrées** — le serveur sait produire lui-même une archive de sa base et de ses métadonnées, avec une rétention réglable.","**Podcasts intégrés** — abonnez-vous à des flux RSS, les épisodes sont téléchargés automatiquement et lisibles dans la même interface.","**Multi-utilisateurs** — chaque membre de la famille dispose de son propre compte, de son historique et de ses playlists.","**Métadonnées automatiques** — couvertures, chapitres et descriptions peuvent être récupérés auprès de fournisseurs comme Audnexus, sans saisie manuelle.",{"type":39,"title":53,"body":54},"Formats audio pris en charge","Audiobookshelf lit les formats courants, notamment MP3, M4A, M4B (avec chapitres), AAC, OGG, FLAC, WAV et OPUS. Les chapitres M4B sont affichés dans le lecteur avec leur titre et leur durée. Les fichiers Audible protégés par DRM ne se lisent pas tels quels : n'importez que des fichiers dont vous avez le droit de disposer, dans un format ouvert.",{"type":39,"title":56,"body":57},"Prérequis et dimensionnement","Le serveur lui-même est modeste : un VPS Ubuntu 24.04 avec Docker suffit pour une famille. Ce qui pèse est le disque, car la bibliothèque (surtout les épisodes de podcasts, téléchargés au fil du temps) grossit en continu, et le processeur uniquement quand un client demande un transcodage via ffmpeg plutôt qu'une lecture directe. Prévoyez donc un volume de données dimensionné sur votre collection, plus de la marge pour les métadonnées, les couvertures et les sauvegardes, qui vivent par défaut dans le même volume `\u002Fmetadata`.\n\nLa base SQLite du serveur doit rester sur le disque local du VPS. La documentation d'Audiobookshelf est explicite : le dossier `\u002Fconfig` ne doit pas être monté sur un partage réseau, sous peine de lenteurs puis de corruption. Les fichiers audio, eux, peuvent vivre ailleurs.",{"type":59,"title":60,"steps":61},"steps","Déployer Audiobookshelf avec Docker Compose",[62,65,68,71,74,77],{"title":63,"body":64},"Préparer le VPS et Docker","Connectez-vous en SSH, mettez le système à jour, puis installez Docker et le plugin Compose. Vérifiez avec `docker compose version`. Sur un VPS ServOrbit, le template Audiobookshelf fait ces étapes pour vous : ce guide sert à comprendre ce qui tourne et à le reprendre en main.",{"title":66,"body":67},"Créer les dossiers et fixer le propriétaire","Créez un dossier par volume : `mkdir -p \u002Fopt\u002Faudiobookshelf\u002F{config,metadata,audiobooks,podcasts}`. Choisissez l'utilisateur sous lequel le conteneur tournera (par exemple 1000:1000), puis donnez-lui les dossiers : `chown -R 1000:1000 \u002Fopt\u002Faudiobookshelf`. Les quatre dossiers doivent être des points de montage distincts, sans imbrication.",{"title":69,"body":70},"Écrire le docker-compose.yml","Déclarez un service `audiobookshelf` avec l'image `ghcr.io\u002Fadvplyr\u002Faudiobookshelf` (épinglez le tag de la version que vous avez vérifiée plutôt que `latest`), `restart: unless-stopped`, la directive `user: \"1000:1000\"`, le port `127.0.0.1:13378:80` et les quatre montages `\u002Fopt\u002Faudiobookshelf\u002Fconfig:\u002Fconfig`, `\u002Fopt\u002Faudiobookshelf\u002Fmetadata:\u002Fmetadata`, `\u002Fopt\u002Faudiobookshelf\u002Faudiobooks:\u002Faudiobooks` et `\u002Fopt\u002Faudiobookshelf\u002Fpodcasts:\u002Fpodcasts`. Ajoutez `TZ=Africa\u002FCasablanca` (ou votre fuseau) en variable d'environnement. Audiobookshelf n'utilise pas les variables PUID et PGID : c'est la directive `user:` qui fixe l'utilisateur.",{"title":72,"body":73},"Démarrer et vérifier","Lancez `docker compose up -d`, puis `docker compose logs -f audiobookshelf`. Au premier démarrage, le serveur applique ses migrations de base de données : attendez la ligne qui annonce l'écoute sur le port 80 du conteneur. Un `docker compose ps` qui montre le service en redémarrage permanent renvoie directement à la section dépannage plus bas.",{"title":75,"body":76},"Créer le compte administrateur et la bibliothèque","Ouvrez l'interface (via un tunnel SSH ou votre domaine), créez le compte root, puis ajoutez une bibliothèque pointant vers `\u002Faudiobooks` et une autre vers `\u002Fpodcasts`. Lancez un scan : les livres apparaissent avec leurs couvertures et leurs chapitres.",{"title":78,"body":79},"Connecter l'application mobile","Dans l'app iOS ou Android, saisissez l'adresse HTTPS de votre instance, votre identifiant et votre mot de passe. La progression se synchronise ensuite entre le téléphone et le web. Pour un usage permanent, placez un reverse proxy HTTPS devant le conteneur en suivant la page « Reverse Proxy » de la documentation d'Audiobookshelf (notamment le passage des WebSocket).",{"type":39,"title":81,"body":82},"Configuration sans nom de domaine","Audiobookshelf ne nécessite pas de nom de domaine pour fonctionner. Avec le template ServOrbit, le conteneur n'écoute que sur le loopback du VPS, port 13780. Ouvrez un tunnel SSH depuis votre machine : `ssh -L 13378:127.0.0.1:13780 root@\u003Cip-vps>`, puis allez sur `http:\u002F\u002Flocalhost:13378`. Pour une utilisation permanente depuis l'app mobile, rattachez un domaine depuis votre espace client ServOrbit — nginx proxifie le conteneur en HTTPS — ou utilisez le sous-domaine gratuit `{app}.{dns_slug}.servorbit-dns.com` inclus avec chaque VPS.",{"type":39,"title":84,"body":85},"Permissions des volumes et utilisateur non root","Quatre volumes, quatre rôles. `\u002Fconfig` contient la base SQLite et les scripts de migration. `\u002Fmetadata` contient les métadonnées, les couvertures, les images d'auteurs, les journaux, le cache et, par défaut, les sauvegardes. `\u002Faudiobooks` et `\u002Fpodcasts` donnent accès aux fichiers médias. Le serveur doit pouvoir écrire dans `\u002Fconfig` et `\u002Fmetadata` ; sur `\u002Faudiobooks`, l'écriture n'est nécessaire que si vous voulez qu'il écrive des métadonnées à côté des fichiers, et sur `\u002Fpodcasts` elle est indispensable puisque les épisodes y sont téléchargés.\n\nPar défaut, l'exemple officiel ne fixe pas d'utilisateur. Pour durcir, ajoutez la directive `user:` : le conteneur n'a alors plus les droits de root sur les montages, et c'est précisément là que les erreurs de permissions apparaissent. La règle est simple : le propriétaire des dossiers hôtes doit être l'UID:GID de la directive `user:`. Testez avant de charger la bibliothèque : `docker compose exec audiobookshelf touch \u002Fconfig\u002Ftest \u002Fmetadata\u002Ftest`, puis supprimez les deux fichiers.\n\nSur un système de fichiers à ACL (ZFS avec ACL NFSv4, par exemple), un `chown` ne suffit pas toujours : l'incident décrit plus bas en est l'illustration, avec un conteneur en utilisateur 568, toutes capacités retirées, sur un dataset ZFS.",{"type":87,"title":88,"headers":89,"rows":93},"comparison","Volume nommé ou dossier de l'hôte pour \u002Fconfig et \u002Fmetadata",[90,91,92],"Critère","Volume nommé Docker","Dossier de l'hôte",[94,98,102,106,110,114],[95,96,97],"Propriétaire initial","Géré par Docker, souvent root","À fixer vous-même avec chown",[99,100,101],"Compatibilité avec `user:`","À vérifier avant la première importation","Directe, si l'UID:GID correspond",[103,104,105],"Sauvegarde à froid","Passer par `docker volume inspect` pour trouver le chemin","`rsync` direct du dossier",[107,108,109],"Lisibilité du chemin","Moins évidente","Chemin fixe et connu",[111,112,113],"Portabilité vers un autre VPS","Export du volume à prévoir","Copie du dossier",[115,116,117],"Cas d'usage conseillé","Essai rapide, template prêt à l'emploi","Production avec utilisateur non root",{"type":39,"title":119,"body":120},"Sauvegardes cohérentes : ce que couvre la sauvegarde intégrée","Audiobookshelf sait créer ses propres sauvegardes depuis l'interface (planification, nombre de sauvegardes conservées, taille maximale). Chaque archive contient la base de données et les images de couverture du dossier de métadonnées ; les fichiers médias stockés avec les éléments de bibliothèque n'y sont pas. Par défaut, les archives sont écrites dans `\u002Fmetadata\u002Fbackups`, c'est-à-dire sur le même disque que les données : une panne du VPS emporte les deux. Copiez-les donc régulièrement hors du serveur.\n\nUne sauvegarde ne protège que si elle est cohérente. La base est un fichier SQLite vivant : copier `\u002Fconfig` avec `cp` ou `rsync` pendant que le serveur écrit (progression d'écoute, scan) peut produire un fichier incohérent. Deux méthodes sûres : utiliser la sauvegarde intégrée du serveur, puis copier l'archive produite ; ou arrêter le conteneur le temps de la copie. Les fichiers audio, eux, se sauvegardent à part, avec `rsync` ou un outil de sauvegarde par déduplication.\n\nUne restauration se fait sur le même type de système : la documentation avertit qu'une sauvegarde Linux se restaure sur Linux, et qu'un passage d'une méthode d'installation à une autre peut faire perdre progression et métadonnées.",{"type":59,"title":122,"steps":123},"Sauvegarde à froid et restauration manuelle",[124,127,130,133,136],{"title":125,"body":126},"Arrêter le conteneur","Dans le dossier du compose, lancez `docker compose stop audiobookshelf`. Plus aucune écriture n'est en cours sur la base.",{"title":128,"body":129},"Copier la configuration et les métadonnées","Copiez `\u002Fopt\u002Faudiobookshelf\u002Fconfig` et `\u002Fopt\u002Faudiobookshelf\u002Fmetadata` vers un emplacement hors du VPS avec `rsync -a`, en conservant les droits. Ajoutez les dossiers audio selon votre stratégie de sauvegarde des médias.",{"title":131,"body":132},"Redémarrer et contrôler","Lancez `docker compose start audiobookshelf` et vérifiez dans les journaux que le serveur écoute à nouveau. L'interruption dure le temps de la copie de la base.",{"title":134,"body":135},"Restaurer depuis une archive du serveur","Arrêtez le conteneur, décompressez l'archive la plus récente de `metadata\u002Fbackups`, copiez `audiobookshelf.sqlite` dans le dossier de configuration en remplaçant l'existant, puis copiez les dossiers `metadata-authors` et `metadata-items` vers `authors` et `items`. Si l'archive est inutilisable, essayez la précédente. La page Sauvegardes de l'interface propose aussi un bouton de restauration.",{"title":137,"body":138},"Tester une restauration à blanc","Une fois par trimestre, restaurez une sauvegarde sur un VPS de test et vérifiez que les utilisateurs, la progression et les bibliothèques sont présents. Une sauvegarde jamais restaurée reste une hypothèse.",{"type":39,"title":140,"body":141},"Mises à jour et versions : épingler plutôt que suivre latest","Le template ServOrbit tire l'image `latest`. C'est pratique, mais cela vous expose aux régressions d'une version à l'autre. La mise à jour documentée est simple : `docker compose pull`, `docker compose down`, `docker compose up --detach`. Avant chaque mise à jour, faites une sauvegarde (intégrée ou à froid) et lisez les notes de version sur la page des releases du dépôt GitHub.\n\nUn cas récent le justifie. La version `2.37.0` a fait passer le serveur à Node.js 24, et la `2.37.1` a été touchée par une boucle de redémarrage sur certaines installations (voir ci-dessous). La correction est publiée dans la `2.37.2`, qui est, à la date de rédaction, la dernière version stable listée par le projet. Un tag épinglé et une sauvegarde préalable permettent de revenir en arrière sans improviser.",{"type":39,"title":143,"body":144},"Dépannage : boucle de redémarrage au démarrage (EPERM … copyfile)","Symptôme : le conteneur redémarre en boucle après une mise à jour vers la `2.37.1`, et les journaux affichent « Failed to copy migrations to the config directory », puis « EPERM: operation not permitted, copyfile » du dossier `\u002Fapp\u002Fdist-server\u002Fserver\u002Fmigrations\u002F` vers `\u002Fconfig\u002Fmigrations\u002F`, suivi de « Database migration failed ».\n\nÉtat réel de l'incident (issue n° 5637 du dépôt advplyr\u002Faudiobookshelf, ouverte en octobre 2026) : elle est fermée. Le rapporteur utilisait TrueNAS SCALE, un conteneur en utilisateur 568, toutes capacités retirées et `no-new-privileges`, avec `\u002Fconfig` sur un dataset ZFS en bind mount. Plusieurs utilisateurs de TrueNAS ont signalé la même chose. Aucune cause racine n'est formellement établie dans la discussion ; un test a montré que `copyFileSync` échouait avec EPERM sur ce montage alors que l'écriture directe d'un fichier fonctionnait avec le même utilisateur, et une régression de la copie liée à Node.js 24 est soupçonnée. La correction (PR n° 5668) ajoute un repli quand la copie échoue ; elle est livrée dans la `2.37.2`.\n\nRemède : passez à la `2.37.2` ou plus récente. Si vous ne pouvez pas mettre à jour tout de suite, la solution de contournement évoquée dans l'issue est de revenir à la `2.36.1` avec une sauvegarde faite avant la mise à jour. Si le même message persiste après la mise à jour, vérifiez le propriétaire du dossier de configuration et les ACL du dataset : ce n'est plus ce bogue-là.",{"type":39,"title":146,"body":147},"Dépannage : la sauvegarde nocturne plante le conteneur (SQLITE_BUSY)","Symptôme : le serveur s'arrête à l'heure de la sauvegarde planifiée, avec « FATAL: [Server] Uncaught exception » et `SQLITE_BUSY: database is locked`. Avec `restart: unless-stopped`, Docker relance le conteneur : on ne voit qu'une brève coupure, que révèle un compteur de redémarrages non nul (`docker inspect --format '{{.RestartCount}}' \u003Cconteneur>` ; remplacez le nom par celui de votre conteneur).\n\nÉtat réel (issue n° 4572, ouverte en août 2025) : elle est toujours ouverte. Un contributeur explique la cause : la sauvegarde SQLite émet l'erreur « base occupée » comme un événement sans écouteur, que Node.js traite comme une exception non rattrapée, et aucune nouvelle tentative n'est faite. Le plantage survient quand une autre écriture, par exemple l'enregistrement de la progression d'écoute par un client, tient le verrou plus d'une seconde pendant la copie. La PR n° 5660 (sauvegarde par lots avec reprise sur verrou, et erreurs de session journalisées au lieu de planter) est à ce jour ouverte et non fusionnée : aucune version publiée ne la contient. Une première PR concurrente a été fermée au profit de celle-ci.\n\nEn attendant, trois palliatifs rapportés dans l'issue : décaler la sauvegarde loin des heures d'écoute (plutôt l'aube que la soirée) ; garder `restart: unless-stopped` pour que le conteneur reparte seul ; ou remplacer la sauvegarde intégrée par une sauvegarde à froid planifiée côté hôte, qui arrête le conteneur quelques instants. Rappel de la documentation : la base doit être sur le disque local, jamais sur un partage réseau.",{"type":43,"title":149,"items":150},"Autres erreurs fréquentes",[151,152,153,154,155],"**Permission denied dans les journaux** — le propriétaire des dossiers hôtes ne correspond pas à l'UID:GID de la directive `user:`. Corrigez avec `chown -R`, puis relancez.","**Bibliothèque vide après le scan** — le chemin de la bibliothèque n'est pas celui du conteneur. Ajoutez `\u002Faudiobooks` ou `\u002Fpodcasts`, pas un chemin de l'hôte.","**« Cannot find module '\u002Findex.js' »** — la documentation signale un cache d'image périmé chez certains gestionnaires de conteneurs : recréez le conteneur ou la stack après un `docker compose pull`.","**L'app mobile ne se connecte pas** — vérifiez l'adresse HTTPS, le certificat et le passage des WebSocket par le reverse proxy ; un tunnel SSH ne sert qu'au navigateur.","**Conteneur « unhealthy »** — le contrôle de santé interroge le port 80 du conteneur : consultez `docker compose logs` pour voir si une migration échoue au démarrage.",{"type":157,"title":158,"body":159},"tip","Durcissement minimal","Épinglez le tag de l'image, faites tourner le conteneur avec `user:`, publiez le port uniquement sur `127.0.0.1` derrière un reverse proxy HTTPS, copiez chaque semaine les archives de `\u002Fmetadata\u002Fbackups` hors du VPS et testez une restauration. Ce guide est fourni tel quel : ServOrbit ne prend pas en charge l'application elle-même.",{"type":39,"title":161,"body":162},"Aller plus loin","Une fois le serveur stable, ajoutez une seconde couche de protection : une sauvegarde chiffrée des dossiers de configuration vers un stockage distant, et une alerte si le conteneur redémarre plus d'une fois par jour. Suivez les issues citées ici : le plantage de sauvegarde sera à nouveau à vérifier dès que la PR n° 5660 sera fusionnée et publiée.","Déployez Audiobookshelf sur votre VPS","ServOrbit déploie un VPS Ubuntu 24.04 et lance Audiobookshelf dans un conteneur Docker en quelques minutes — sans configuration manuelle. Vos audiolivres, vos règles, votre infrastructure.","Déployer Audiobookshelf","\u002Fapplications\u002Fcollaboration\u002Faudiobookshelf",[],true,1794270712225]