0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

一人アドカレ 23日目: Kavitaの紹介

Posted at

イントロ

皆さんはPDFの電子書籍をお持ちですか?
私は技術書をPDFで購入することが多いのですが、購入したPDFの管理を全くしていませんでした。
というわけで、Kavitaを導入してみました。

PDFだけでなく、EPUBなどのフォーマットにも対応しているらしいです。
進捗状況やメモ書き(注釈)も欲しかったので、Kavitaを選びました。

Kavitaの使い方

環境情報
$ docker version
Client: Docker Engine - Community
 Version:           29.1.3
 API version:       1.52
 Go version:        go1.25.5
 Git commit:        f52814d
 Built:             Fri Dec 12 14:49:51 2025
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.1.3
  API version:      1.52 (minimum version 1.44)
  Go version:       go1.25.5
  Git commit:        fbf3ed2
  Built:            Fri Dec 12 14:49:51 2025
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v2.2.0
  GitCommit:        1c4457e00facac03ce1d75f7b6777a7a851e5c41
 runc:
  Version:          1.3.4
  GitCommit:        v1.3.4-0-gd6d73eb8
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

前提条件

  • Docker がインストールされていること
  • Traefik が導入されていること(リバースプロキシサーバー)

手順

  1. compose.ymlを作成する

    domain.tldは自分のドメインに置き換えてください。

    compose.yml
    services:
      kavita:
        image: jvmilazz0/kavita
        container_name: kavita
        volumes:
          - ./data:/kavita/config
          - ./books:/books
        environment:
          TZ: Asia/Tokyo
        expose:
          - 5000
        restart: unless-stopped
        labels:
          traefik.enable: true
          traefik.http.services.book.loadbalancer.server.port: 5000
          traefik.http.routers.book.rule: Host(`kavita.domain.tld`)
          traefik.http.routers.book.entrypoints: websecure
          traefik.http.routers.book.tls: true
          traefik.http.routers.book.tls.certResolver: cloudflare
          traefik.docker.network: traefik-network
          glance.name: Kavita
          glance.icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/kavita.png
          glance.url: https://kavita.domain.tld
          glance.description: Book manager
          glance.id: kavita
        networks:
          - traefik-network
      drive:
        image: sigoden/dufs
        container_name: drive
        volumes:
          - ./books:/data
        expose:
          - 5000
        command: /data -A
        profiles:
          - drive
        labels:
          traefik.enable: true
          traefik.http.services.kavita-drive.loadbalancer.server.port: 5000
          traefik.http.routers.kavita-drive.rule: Host(`drive.kavita.domain.tld`)
          traefik.http.routers.kavita-drive.tls: true
          traefik.http.routers.kavita-drive.tls.certResolver: cloudflare
          traefik.docker.network: traefik-network
          glance.parent: kavita
          glance.name: drive
        networks:
          - traefik-network
    
    networks:
      traefik-network:
        external: true
    
  2. Kavitaを起動する

    docker compose up -d
    

    なお、アップロードは対応していないため、dufsを使ってアップロードしました。
    そのため、dufs用のイメージ設定も追加しています。

    docker compose --profile drive up -d
    

Kavitaの感想

  • 良いところ
    • 進捗状況が保存できる
    • メモ書き(注釈)が保存できる
    • モバイル対応もしている
  • イマイチなところ
    • 直接アップロードできない
      • フォルダ構造によるスキャンを行うため、管理が手間

以上、Kavitaの紹介でした。
随分前から建てていたのですが、改めて記事に書いていたところOIDC認証に対応していることを知りました。
ローカル認証はパスワード管理が面倒なので、OIDC認証の追加もぜひ行いたいところです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?