Deutsch
Loslegen

← Alle Vorlagen · Medien

Kavita mit einem Klick deployen

Ein Leseserver für Mangas, Comics und Bücher, mit Readern im Browser für jedes Gerät

Eine selbst gehostete Alternative zu Kindle und Comixology.

Was ist Kavita?

Kavita ist ein Open-Source-Leseserver für Mangas, Webtoons, Comics und Bücher. Es liest die Dateien dort, wo sie liegen (Archive als CBZ, CBR, ZIP, RAR und 7-Zip und Bilderordner für Comics, EPUB und PDF für Bücher), fasst sie mit ihren Covern und Metadaten zu Serien zusammen und zeigt sie in Readern im Browser, die auf Handy, Tablet und Desktop funktionieren. Die Reader haben einen Webtoon-Modus, einen fortlaufenden Modus, der ins nächste Kapitel weiterblättert, sowie Markierungen und Anmerkungen in EPUB-Büchern.

Viele betreiben Kavita, um ihre eigene Sammlung überall zu lesen und mit Familie und Freunden zu teilen: Jeder Benutzer hat einen eigenen Lesefortschritt, und Rollen begrenzen, was jemand sieht und tun darf, bis hin zu Altersbeschränkungen. Sammlungen, Leselisten, „Möchte ich lesen“ und intelligente Filter ordnen eine große Bibliothek, und Themes ändern ihr Aussehen. Kavita+, ein kostenpflichtiges Abo, ergänzt Metadaten, Rezensionen und Empfehlungen aus dem Internet; alles andere ist kostenlos.

Diese Vorlage startet das offizielle Image von Kavita, Version 0.9.1, mit der Datenbank und den Einstellungen in einem Volume und deinen Büchern in einem anderen. Den Admin registriert Kavita aus dem Benutzernamen, der E-Mail und dem Passwort, die du angibst, bevor es irgendwem antwortet.

Kavita-Hosting auf Pethost

  1. Du meldest dich bei Pethost an, mit Passkey, GitHub oder Google. Noch keine Maschine? Du wählst einen Tarif, und der Link wartet, bis sie bereit ist.
  2. „Neues Projekt“ öffnet sich bei Kavita. Du füllst aus, was die App braucht, und klickst auf „Projekt erstellen“: Benutzername, E-Mail, Admin-Passwort.
  3. In ein, zwei Minuten läuft Kavita unter eigener Adresse mit HTTPS. Die Secrets werden zufällig erzeugt, und die Daten sind im nächtlichen Backup.
  4. Es ist ein Projekt wie jedes andere: Du oder dein Agent könnt es ändern, zurückrollen oder wiederherstellen.

Fragen zu Kavita

Ist Kavita kostenlos?

Ja. Kavita ist Open Source unter der GPL-3.0 und kostenlos zu betreiben, mit allen Readern und allen Funktionen für Benutzer. Kavita+ ist ein optionales, kostenpflichtiges Abo für Metadaten, Rezensionen, Empfehlungen und Scrobbling zu AniList und anderen Diensten.

Welche Formate liest Kavita?

Comics und Mangas als Archive im Format CBZ, CBR, ZIP, RAR, RAR5 und 7-Zip oder als Bilderordner und Bücher als EPUB und PDF. Kavita liest die Dateien so, wie sie sind, ohne sie umzuwandeln.

Wie füge ich Bücher zu Kavita hinzu?

Leg die Dateien in den Ordner der Bibliothek, jede Serie und jedes Buch in einen eigenen Ordner, und füg den Ordner dann unter „Einstellungen“ → „Bibliotheken“ als Bibliothek hinzu. Kavita scannt ihn dann und erneut, sobald sich Dateien ändern.

Kavita oder Komga: Was soll ich nehmen?

Beide liefern Comics, Mangas und Bücher, EPUB und PDF eingeschlossen, an Reader im Browser und an OPDS-Apps. Die eigenen Reader von Kavita bieten zusätzlich einen Webtoon-Modus, fortlaufendes Lesen bis ins nächste Kapitel sowie Markierungen und Anmerkungen in EPUB-Büchern; Kavita+ verkauft Metadaten aus dem Internet, Komga dagegen hat keine kostenpflichtige Stufe.

Kann ich meine Kavita-Bibliothek mit anderen teilen?

Ja. Der Admin lädt Benutzer unter „Einstellungen“ → „Benutzer“ ein und wählt pro Benutzer die sichtbaren Bibliotheken und die Rollen, etwa „Herunterladen“, oder eine Altersbeschränkung. Alle behalten ihren eigenen Lesefortschritt.

Wie viel RAM und Speicherplatz braucht Kavita?

Kavita ist leicht: etwa 250 MB RAM beim Lesen, mehr, während es eine Bibliothek scannt; deine Bücher belegen so viel, wie ihre Dateien groß sind. Auf Pethost reicht dafür der Tarif Starter, mit Platz für weitere Apps daneben.

Kavita: die Docker-Compose-Datei

Die Vorlage ist diese compose.yaml und die Variablen, die beim Erstellen in die .env des Projekts geschrieben werden. Pethost führt die Datei so aus, wie sie geschrieben ist.

Container: kavita (jvmilazz0/kavita:0.9.1).

Volumes, im nächtlichen Backup: config, books.

services:
  kavita:
    image: jvmilazz0/kavita:0.9.1
    restart: unless-stopped
    environment:
      ADMIN_USERNAME: ${ADMIN_USERNAME}
      ADMIN_EMAIL: ${ADMIN_EMAIL}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      TZ: Etc/UTC
    # A new Kavita lets whoever opens it first register as its admin. So until the admin exists,
    # Kavita runs on 127.0.0.1:5001, which nobody reaches, where the admin is registered from the
    # fields; only then does it start as the image starts it, answering on 5000. Kavita reads the
    # port and address of its appsettings.json only when it does not know it is in a container.
    # A refusal stops the start with Kavita's reason in the log.
    entrypoint:
      - /bin/bash
      - -c
      - |
        set -e
        cd /kavita
        if [ ! -f config/admin-registered ]; then
          if [ ! -f config/appsettings.json ]; then
            cp /tmp/config/appsettings.json config/appsettings.json
          fi
          sed -i -e 's/"Port": *[0-9]*/"Port": 5001/' -e 's/"IpAddresses": *"[^"]*"/"IpAddresses": "127.0.0.1"/' config/appsettings.json
          env -u DOTNET_RUNNING_IN_CONTAINER ./Kavita &
          kavita=$$!
          until curl -sf -o /dev/null http://127.0.0.1:5001/api/health; do
            kill -0 $$kavita
            sleep 1
          done
          json() {
            local s=$${1//\\/\\\\}
            s=$${s//\"/\\\"}
            printf '"%s"' "$$s"
          }
          body="{\"username\":$$(json "$$ADMIN_USERNAME"),\"email\":$$(json "$$ADMIN_EMAIL"),\"password\":$$(json "$$ADMIN_PASSWORD")}"
          status=$$(curl -s -o /tmp/register -w '%{http_code}' -H 'Content-Type: application/json' -d "$$body" http://127.0.0.1:5001/api/Account/register)
          kill $$kavita
          wait $$kavita || true
          sed -i -e 's/"Port": *[0-9]*/"Port": 5000/' -e 's/"IpAddresses": *"[^"]*"/"IpAddresses": ""/' config/appsettings.json
          # 400 "denied": an admin exists already, registered by an earlier start.
          if [ "$$status" != 200 ] && ! grep -qi denied /tmp/register; then
            echo "Kavita refused the admin ($$status): $$(cat /tmp/register)"
            exit 1
          fi
          touch config/admin-registered
        fi
        exec /entrypoint.sh
    volumes:
      - config:/kavita/config
      # Writable, so that books can be uploaded or copied in over SFTP.
      - books:/books
volumes:
  config:
  books:

Mehr in Medien