セルフホストな karakeep を日本語に対応させる備忘録です.
まずは結論から書くと,
コンテナ karakeep-chrome に fonts-noto-cjk と fonts-noto-cjk-extra を追加
することで日本語対応の karakeep を導入できます.
karakeep ってなに?
karakeep
セルフホストができるブックマーク管理アプリです.昔は Hoarder という名前だったみたいです.元サイトは
ですが,セルフホストではなく(無料枠ありですが,ほぼお試しレベルなので,実質的には有料の)クラウドサービス

での利用も可能です.もちろん私の場合はセルフホスト版を使います.
karakeep と Linkwarden
同様のアプリとして Linkwarden

もありますが,こちら によると違いは,
| 機能・特徴 | karakeep | Linkwarden |
| 主な用途 | なんでも取り込めるスクラップブック | 確実な魚拓と,記事の精読・注釈 |
| UI | モダンでレイアウトが豊富 | 堅実,実用性重視(少し古風) |
| アーカイブ形式 | HTML,画像,動画 (yt-dlp 内蔵) | スクリーンショット,PDF,HTML |
| AI サポート | 非常に強力(要約,OCR,ローカルLLM対応) | タグ付けなどの基本的なサポート |
| 重複URLの処理 | 完全に弾く・整理しやすい | 警告は出るが保存は可能 |
らしいです(ただし,今回は AI サポートの設定は行いません.これは後日検討します).
導入
日本語への対応
まず,何も考えずにそのまま導入してもメニュー等は切り替えできちんと日本語になります.日本語の対応で問題になるのは,アーカイブやスクリーンショットです.コンテナに何も手を加えず karakeep を導入すると,日本語の文字の部分がいわゆる TOFU(□□□のような四角い記号)になります.
これは,karakeep が,アーカイブやスクリーンショットの取得のため利用しているヘッドレスの chrome コンテナに日本語のフォントが含まれていないためです.したがって,この問題を解決するには,karakeep が利用するヘッドレスの chrome コンテナに日本語フォントを追加してやれば良いことになります.実際の手順は以下の通りです.
docker-compose.yml の準備
まず,docker-compose.yml を準備します.このファイルを置くフォルダを適当な名前で準備し,以下の内容で docker-compose.yml を保存します.なお,karakeep と関連するコンテナがデータを保存する場所として,
- /var/lib/containers/volumes/karakeep/data
- /var/lib/containers/volumes/karakeep/meili_data
を指定していますが,これは,自分の環境に合わせてください.また,私の場合は docker ではなく podman を使うので,以下の設定は podman でもエラーが出ないよう少し標準のものから書き換えています.
services:
web:
image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
container_name: karakeep
restart: always
networks:
karakeep:
ipv4_address: 10.89.1.100
volumes:
# By default, the data is stored in a docker volume called "data".
# If you want to mount a custom directory, change the volume mapping to:
# - /path/to/your/directory:/data
- /var/lib/containers/volumes/karakeep/data:/data
env_file:
- .env
environment:
MEILI_ADDR: http://meilisearch:7700
BROWSER_WEB_URL: http://chrome:9222
# OPENAI_API_KEY: ...
# You almost never want to change the value of the DATA_DIR variable.
# If you want to mount a custom directory, change the volume mapping above instead.
DATA_DIR: /data # DON'T CHANGE THIS
chrome:
image: ghcr.io/karakeep-app/karakeep-chrome:release
build:
context: .
dockerfile: Dockerfile.chrome
container_name: karakeep-chrome
restart: always
networks:
- karakeep
ports:
- 3000:3000
init: true
command:
- --disable-gpu
- --disable-dev-shm-usage
- --ignore-certificate-errors
- --hide-scrollbars
- --disable-blink-features=AutomationControlled
meilisearch:
image: getmeili/meilisearch:v1.41.0
container_name: meilisearch_for_karakeep
restart: always
networks:
- karakeep
env_file:
- .env
environment:
MEILI_NO_ANALYTICS: "true"
volumes:
- /var/lib/containers/volumes/karakeep/meili_data:/meili_data
networks:
karakeep:
name: karakeep
ipam:
driver: default
config:
- subnet: 10.89.1.0/24
gateway: 10.89.1.1
volume フォルダの追加
以下の通り,karakeep と関係するコンテナがデータを保存するフォルダを準備しておきます.
$ sudo mkdir /var/lib/containers/volumes/karakeep $ sudo mkdir /var/lib/containers/volumes/karakeep/data $ sudo mkdir /var/lib/containers/volumes/karakeep/meili_data
Dockerfile.chrome の準備
docker-compose.yml と同じフォルダに Dockerfile.chrome ファイルを以下の内容で準備します.
FROM ghcr.io/karakeep-app/karakeep-chrome:release
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends fonts-noto-cjk fonts-noto-cjk-extra && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
.env の準備
docker-compose.yml と同じフォルダに .env ファイルを以下の内容で準備します.
KARAKEEP_VERSION=release NEXTAUTH_SECRET=xxxxxxxxxxxxxxxxxxx # 適当なパスフレーズ MEILI_MASTER_KEY=yyyyyyyyyyyyyyyyyyy # 適当なパスフレーズ NEXTAUTH_URL=http://192.168.0.100:3000 # karakeep コンテナを起動したサーバーの IP Address
コンテナの起動
karakeep のコンテナを起動します.docker を使う場合は podman-compose を docker compose に置き換えてください.
$ sudo podman-compose up -d --build
karakeep の初期設定
あとは,http://192.168.0.100:3000 (karakeep をコンテナを動作させているサーバーの IP アドレス)にアクセスすれば以下のようなログイン画面になるはずなので,下にある「Don’t have an account? Sign up」をクリックしてアカウントを作成すれば使えるようになるはずです.
これまで,個人的なブックマークの管理に flame

を使ってきたんですが,bookmark の追加手順がちょっと複雑で使いやすいとは言い難かったので,しばらく karakeep を使ってみたいと思います.
以上!
