Audiobookshelf: Servidor autohospedado de audiolibros y podcasts

Publicado por


audiobookshelf
Self-hosted

Audiobookshelf: Servidor autohospedado de audiolibros y podcasts

Plataforma de código abierto para gestionar y reproducir tu biblioteca de audiolibros y podcasts con control total sobre tus datos

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Audiobookshelf: Servidor autohospedado de audiolibros y podcasts en el canal GENBYTE:

¿Qué es Audiobookshelf: Servidor autohospedado de audiolibros y podcasts?

Audiobookshelf es un servidor autohospedado diseñado para gestionar colecciones de audiolibros y podcasts. Desarrollado en JavaScript y distribuido bajo licencia GPL-3.0, permite organizar metadatos, reproducir contenido en streaming y sincronizar el progreso de reproducción entre dispositivos. El proyecto cuenta con más de 14.000 estrellas en GitHub y una comunidad activa que contribuye a su desarrollo continuo.

Audiobookshelf combina la gestión de audiolibros y podcasts en una sola interfaz web, con soporte para aplicaciones móviles nativas y clientes de terceros mediante API abierta.

Características principales

Gestión unificada de audiolibros y podcasts

Permite organizar ambas tipologías de contenido en una única biblioteca, con metadatos enriquecidos, carátulas, capítulos y marcadores de posición.

Reproducción en streaming y descarga

Ofrece reproducción directa desde el navegador o aplicaciones compatibles, con control de velocidad, ecualizador y opción de descarga para escucha sin conexión.

Sincronización multiplataforma

Mantiene el progreso de reproducción, favoritos y listas de reproducción sincronizados entre la interfaz web, apps móviles oficiales y clientes de terceros.

Gestión de usuarios y permisos

Soporta múltiples usuarios con roles diferenciados, control de acceso a bibliotecas específicas y autenticación mediante OAuth/OpenID Connect.

Extracción automática de metadatos

Lee etiquetas ID3, archivos OPF y estructuras de carpetas para poblar automáticamente título, autor, narrador, serie, género y portada.

Integración con proveedores externos

Compatible con proveedores de metadatos personalizados y fuentes como Audible, LibriVox, iTunes y RSS para podcasts.

API REST y WebSocket documentada

Expone endpoints para gestión de biblioteca, reproducción, usuarios y estadísticas, facilitando el desarrollo de clientes alternativos.

Despliegue mediante Docker

Imagen oficial multi-arquitectura (amd64/arm64) publicada en GHCR, con Docker Compose de ejemplo que define volúmenes persistentes y red interna.

Requisitos del sistema

  • Docker Engine 20.10+ y Docker Compose v2
  • Arquitectura compatible: linux/amd64 o linux/arm64
  • Mínimo 512 MB RAM disponibles para el contenedor
  • Espacio en disco según tamaño de la biblioteca (metadatos ~50-200 MB base)
  • Puertos 13378 (HTTP) y 443 (HTTPS opcional) accesibles
  • Sistema de archivos con soporte para mapeo de UID/GID si se usa directiva user

Instalación con Docker Compose

Crear directorios de datos persistentes

Estructura recomendada para separar contenido multimedia, metadatos y configuración.

mkdir -p ./audiobooks ./podcasts ./metadata ./config

Descargar docker-compose.yml oficial

Utilizar el archivo de ejemplo del repositorio como base y ajustar rutas locales según necesidad.

curl -O https://raw.githubusercontent.com/advplyr/audiobookshelf/master/docker-compose.yml

Ajustar mapeo de puertos y volúmenes

El puerto interno es fijo (80). Cambiar solo el puerto externo si 13378 está ocupado. Verificar que las rutas locales existan y tengan permisos de lectura/escritura para el usuario del contenedor.

# Editar docker-compose.yml
# ports:
# – 13378:80 # cambiar 13378 si es necesario
# volumes:
# – /ruta/local/audiobooks:/audiobooks
# – /ruta/local/podcasts:/podcasts
# – /ruta/local/metadata:/metadata
# – /ruta/local/config:/config

Iniciar el contenedor

Levantar el servicio en segundo plano con política de reinicio unless-stopped.

docker compose up -d

Verificar logs de arranque

Confirmar que el servidor inicia correctamente y expone la API en el puerto configurado.

docker compose logs -f audiobookshelf

Acceder al proyecto

Interfaz web

Acceder mediante navegador a http://<IP_HOST>:13378 (o puerto externo configurado). Al primer acceso se ejecuta el asistente de configuración inicial: creación de usuario administrador, selección de carpetas de biblioteca y ajustes básicos.

Aplicaciones móviles oficiales

Disponibles para iOS y Android. Configurar la URL del servidor (http://<IP>:13378) y credenciales de usuario. Soportan sincronización en segundo plano y descarga selectiva.

Clientes de terceros

Compatible con clientes que implementen la API de Audiobookshelf (ej. Prologue, AudiobookPlayer). Requiere token de acceso personal generado en la interfaz web > Configuración > Cuenta > Tokens de API.

Casos de uso

  • Biblioteca personal de audiolibros con metadatos completos y reproducción continua entre dispositivos
  • Servidor de podcasts privado con suscripción automática a feeds RSS y gestión de episodios descargados
  • Compartir colecciones familiares mediante cuentas de usuario con permisos granulares por biblioteca
  • Integración en entornos de homelab junto a *arr, Jellyfin, Plex u otros servicios de medios
  • Acceso remoto seguro mediante reverse proxy (Traefik, Nginx Proxy Manager) con TLS y autenticación adicional

Configuración avanzada

Ejecutar contenedor con UID/GID específico

Evita problemas de permisos en volúmenes montados desde el host. Descomentar y ajustar la directiva user en docker-compose.yml.

# En docker-compose.yml
# user: 1000:1000 # reemplazar con UID:GID del usuario host

Variables de entorno adicionales

El Dockerfile define variables por defecto. Pueden sobrescribirse en docker-compose.yml bajo environment: para personalizar rutas, puerto interno o comportamiento.

environment:
– PORT=80
– NODE_ENV=production
– CONFIG_PATH=/config
– METADATA_PATH=/metadata
– SOURCE=docker
– TZ=Europe/Madrid

Configurar reverse proxy con HTTPS

Ejemplo genérico para Traefik v2/v3 usando labels en docker-compose.yml. Requiere red externa traefik-public y certificados gestionados por Let's Encrypt.

services:
audiobookshelf:
# … configuración base …
networks:
– traefik-public
labels:
– traefik.enable=true
– traefik.http.routers.abs.rule=Host(`abs.tudominio.com`)
– traefik.http.routers.abs.entrypoints=websecure
– traefik.http.routers.abs.tls.certresolver=letsencrypt
– traefik.http.services.abs.loadbalancer.server.port=80
networks:
traefik-public:
external: true

Actualización de imagen

Obtener la última versión desde GHCR y recrear el contenedor manteniendo volúmenes.

docker compose pull
docker compose up -d

Gestión y mantenimiento

Backup de configuración y metadatos

Los directorios /config y /metadata contienen base de datos SQLite, ajustes de usuario, tokens API y caché de metadatos. Realizar copias periódicas.

tar -czf abs-backup-$(date +%F).tar.gz ./config ./metadata

Limpieza de imágenes Docker antiguas

Eliminar capas intermedias y versiones previas de la imagen para liberar espacio.

docker image prune -f
docker builder prune -f

Reconstrucción de índice de biblioteca

Desde la interfaz web: Configuración > Bibliotecas > [Biblioteca] > Escanear. O vía API POST /api/libraries/{id}/scan con token de administrador.

curl -X POST http://localhost:13378/api/libraries/<LIBRARY_ID>/scan \
-H "Authorization: Bearer <API_TOKEN>"

Migración de datos entre hosts

Copiar directorios ./config, ./metadata, ./audiobooks, ./podcasts al nuevo host manteniendo estructura. Ajustar docker-compose.yml y levantar contenedor.

rsync -avz ./config ./metadata ./audiobooks ./podcasts usuario@nuevo-host:/ruta/destino/

Stack técnico

  • Node.js 24 (runtime Alpine Linux)
  • Express.js (servidor HTTP)
  • SQLite3 con extensiones nunicode (base de datos embebida)
  • Sequelize ORM (modelado y migraciones)
  • Socket.io (WebSockets para tiempo real)
  • FFmpeg (transcodificación y análisis de audio)
  • TypeScript (código servidor)
  • Tailwind CSS + Vite (frontend)
  • Docker multi-stage build (imagen final ~150 MB)
  • GitHub Actions (CI/CD multi-arquitectura)

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *