---
title: "Despliega Audiobookshelf en Pethost con un clic"
description: "Tu propio servidor de audiolibros y podcasts: escucha en el navegador o en las apps, con el progreso guardado entre dispositivos. Una plantilla para Pethost: en un par de minutos la app está en marcha en tu máquina, con HTTPS en su propia dirección y backups cada noche."
---

[← Todas las plantillas](https://pethost.dev/es/templates/)

# Despliega Audiobookshelf en Pethost con un clic

Tu propio servidor de audiolibros y podcasts: escucha en el navegador o en las apps, con el progreso guardado entre dispositivos

[Desplegar en Pethost](https://console.pethost.dev/?template=audiobookshelf)

## Qué pasa

1. Inicias sesión en Pethost o creas una cuenta, con una passkey, GitHub o Google.
2. ¿Aún no tienes máquina? Eliges un plan y te preparamos una. El enlace espera en tu navegador hasta que esté lista.
3. Nuevo proyecto se abre en la app. Rellenas lo que pide y haces clic en Crear proyecto: **Contraseña de administrador**.
4. En un par de minutos la app está en marcha en su propia dirección con HTTPS. Sus secretos se generan al azar para ella, y sus datos entran en el backup de cada noche.
5. Es un proyecto como cualquier otro: su compose.yaml, su .env, sus logs y un terminal están en el panel, y tu agente puede cambiarlo, volver a una versión anterior o restaurarlo.

## Primeros pasos

Entra como root con la contraseña de administrador que indicaste: el servidor se configura con ella antes de responder, así que nadie más ve su página de instalación. Crea una biblioteca en Settings → Libraries con la carpeta /audiobooks o /podcasts y añade libros con el botón de subida de arriba.

## Qué ejecuta

La plantilla es este compose.yaml y las variables que escribe en el .env del proyecto. Pethost ejecuta el archivo tal como está escrito.

```
services:
  audiobookshelf:
    image: ghcr.io/advplyr/audiobookshelf:2.37.1
    restart: unless-stopped
    environment:
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # The first visitor of a new server would create its root user. So, before it answers on its
    # own port, it is started on one nobody reaches and given root with the password asked.
    command:
      - sh
      - -c
      - |
        PORT=8081 node dist-server/index.js &
        setup=$$!
        node -e '
          const init = async () => {
            for (let i = 0; i < 180; i++) {
              try {
                const status = await fetch("http://127.0.0.1:8081/status").then((r) => r.json());
                if (status.isInit) return;
                const body = JSON.stringify({ newRoot: { username: "root", password: process.env.ADMIN_PASSWORD } });
                const answer = await fetch("http://127.0.0.1:8081/init", { method: "POST", headers: { "Content-Type": "application/json" }, body });
                if (answer.ok) return;
              } catch {}
              await new Promise((done) => setTimeout(done, 1000));
            }
            process.exit(1);
          };
          init();
        ' || exit 1
        kill $$setup
        wait $$setup
        exec node dist-server/index.js
    volumes:
      - config:/config
      - metadata:/metadata
      - audiobooks:/audiobooks
      - podcasts:/podcasts
volumes:
  config:
  metadata:
  audiobooks:
  podcasts:
```

[compose.yaml](https://pethost.dev/templates/audiobookshelf/compose.yaml)[Verla en GitHub](https://github.com/pethost-dev/templates/tree/main/audiobookshelf)

Pethost · Stephan Gomer · NIP 1133096755

[Plantillas](https://pethost.dev/es/templates/) [Sobre nosotros](https://pethost.dev/about/) [Blog](https://pethost.dev/blog/) [Términos](https://pethost.dev/terms/) [Privacidad](https://pethost.dev/privacy/) [Reembolsos](https://pethost.dev/refunds/) [API](https://pethost.dev/docs/api/) [CLI](https://pethost.dev/docs/cli/) [Plugin](https://github.com/pethost-dev/plugin) [support@pethost.dev](mailto:support@pethost.dev)
