イントロ
お家でドキュメント管理してみたいと思いませんか?データを外部に保存するのって怖いですよね...
有名どころで選ぶとPaperless-ngxとかなのですが、軽量でイマドキなものを探した結果、Papraになりました
と、こんな話の始め方をしていますが、全然ドキュメント管理の理解が乏しいです。
そういうわけで、契約書のPDF入れてるだけの感想になりますが、ご了承ください。
Papraの使い方
環境情報
$ 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 が導入されていること(リバースプロキシサーバー)
手順
-
compose.ymlを作成するdomain.tldは自分のドメインに置き換えてください。services: papra: image: ghcr.io/papra-hq/papra container_name: papra restart: unless-stopped expose: - 1221 volumes: - ./data:/app/app-data user: "${UID}:${GID}" env_file: - .env labels: traefik.enable: true traefik.http.services.papra.loadbalancer.server.port: 1221 traefik.http.routers.papra.rule: Host(`papra.domain.tld`) traefik.http.routers.papra.entrypoints: websecure traefik.http.routers.papra.tls: true traefik.http.routers.papra.tls.certResolver: cloudflare traefik.docker.network: traefik-network glance.name: Papra glance.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/papra.png glance.url: https://papra.domain.tld glance.description: The minimalistic document archiving platform networks: - traefik-network networks: traefik-network: external: true -
.envファイルを作成するUID=1000 GID=1000 DOCUMENTS_OCR_LANGUAGES="jpn,eng" # 日本語と英語のOCRを有効化 APP_BASE_URL="https://papra.domain.tld" # Garageの設定 DOCUMENT_STORAGE_DRIVER="s3" DOCUMENT_STORAGE_S3_BUCKET_NAME="" DOCUMENT_STORAGE_S3_REGION="" DOCUMENT_STORAGE_S3_ACCESS_KEY_ID="" DOCUMENT_STORAGE_S3_SECRET_ACCESS_KEY="" DOCUMENT_STORAGE_S3_ENDPOINT="https://s3.domain.tld" DOCUMENT_STORAGE_S3_FORCE_PATH_STYLE="true" # バケットに保存するデータの暗号化設定 DOCUMENT_STORAGE_ENCRYPTION_IS_ENABLED="true" DOCUMENT_STORAGE_DOCUMENT_KEY_ENCRYPTION_KEYS="" # PocketIDの設定 AUTH_IS_REGISTRATION_ENABLED="true" # 登録後、他のユーザーがいなければ無効化する AUTH_PROVIDERS_EMAIL_IS_ENABLED="false" # Emailログイン無効(OIDC only) AUTH_SECRET="some-random-string" # ランダムな文字列を設定する AUTH_PROVIDERS_CUSTOMS='[ { "providerId": "pocket-id", "providerName": "Pocket ID", "providerIconUrl": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/pocket-id.png", "clientId": "", "clientSecret": "", "type": "oidc", "discoveryUrl": "https://auth.domain.tld/.well-known/openid-configuration", "scopes": ["openid", "profile", "email"] } ]' # https://papra.domain.tld/api/auth/oauth2/callback/<providerId> にリダイレクトされるような設定になる # SMTPの設定 EMAILS_DRIVER="smtp" SMTP_HOST="" SMTP_PORT="" SMTP_USER="" SMTP_PASSWORD="" SMTP_SECURE="true" -
Papraを起動する
docker compose up -d
Papraの感想
- 良いところ
- UIがイマドキで使いやすい
- OIDC認証に対応している
- GarageによるS3互換ストレージ対応
- イマイチなところ
- 日本語の読み取りが微妙?
- 契約書のPDFを入れたところファイルの文字列全部が認識されなかった
- ローカルで開いたPDFから文字をコピペしてPapra側に上書きしましたので、データの管理はできるようになります。
- 求人情報や履歴書の認識は問題なかった
- 契約書のPDFを入れたところファイルの文字列全部が認識されなかった
- 日本語の読み取りが微妙?
以上、Papraの紹介でした。
私自身があまりドキュメント管理を使う機会がなかったのでその点での視点が少なく申し訳ないです。とはいえコンテナ1つで簡単に始められるので、興味があれば使ってみてください。