> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Zotero 連携

> Kubernetes デプロイで、ユーザーが Zotero ライブラリから .bib ファイルをインポートできるようにします。

Zotero インポートは、すべての Ayakaleaf Pro Pod の **web** サービス（`tpr-webmodule` モジュール）で動作します。[Zotero 連携](https://ayakaleaf-pro.mintlify.site/ja/on-premises/configuration/overleaf-toolkit/integrations/zotero-integration.md)の手順に従い、コールバック URL を `${OVERLEAF_SITE_URL}/user/zotero/oauth/callback` として Zotero OAuth クライアントを登録してから、以下のように Kubernetes を設定します。

| | |
| - | - |
| サービス | web、すべての Ayakaleaf Pro Pod 内。web の起動時に読み込まれる |
| Pod → Zotero | `https://www.zotero.org/oauth/*` と `https://api.zotero.org`。ユーザーが Zotero を連携したとき、またはファイルをインポート・更新したとき |
| ブラウザー → Zotero | `https://www.zotero.org/oauth/authorize`。その後コールバック URL に戻る |
| Zotero → Overleaf | なし: インスタンスにインターネットからアクセスできる必要はない |
| 保存されるデータ | ユーザーの Zotero キー（暗号化済み、MongoDB 内） |
| 定期ジョブ | なし: ファイルはユーザーが要求したときにのみ更新される |

### 設定

**1. ConfigMap**

```yaml title="30-config.yaml (changes)" theme={null}
  ENABLED_LINKED_FILE_TYPES: project_file,project_output_file,url,zotero
  ZOTERO_CLIENT_ID: <client key>
  # optional: send the module's requests to Zotero through an HTTP proxy
  # ZOTERO_PROXY_URL: http://proxy.example.com:3128
```

`ENABLED_LINKED_FILE_TYPES` はインストール時の値を置き換えます。既存のタイプを残したまま `zotero`（両方を使う場合は `mendeley` も）を追加してください。

**2. Secret**

```bash theme={null}
kubectl -n overleaf patch secret overleaf-secrets --type merge -p '{"stringData":{
  "ZOTERO_CLIENT_SECRET":"<client secret>",
  "ZOTERO_CIPHER_PASSWORD":"'"$(openssl rand -hex 32)"'"}}'
```

`ZOTERO_CIPHER_PASSWORD` は、MongoDB 内のユーザーの Zotero キーを暗号化します。これがない場合、各 Pod はそれぞれの `/var/lib/overleaf/data` に鍵ファイルを生成します。そのため[複数のレプリカ](https://ayakaleaf-pro.mintlify.site/ja/on-premises/configuration/kubernetes/horizontal-scaling.md)では各ノードが異なる鍵を持つことになり、別のレプリカで処理されたユーザーは連携済みの Zotero アカウントを使用できません。最初のユーザーが Zotero を連携する前に設定してください。後から変更すると、すべてのユーザーが Zotero を再度連携する必要があります。

**3. 適用と再起動**

```bash theme={null}
kubectl apply -f 30-config.yaml
kubectl -n overleaf rollout restart deployment/overleaf     # or statefulset/overleaf
```

### 複数のレプリカ

上記のとおり、Secret に `ZOTERO_CIPHER_PASSWORD` を設定してください。これがない場合、あるレプリカでインポートしたファイルを別のレプリカで更新することはできません。そのレプリカの鍵ファイルではユーザーの Zotero キーを復号できないため、更新は "The remote service produced an error" で失敗します。Secret にパスワードを設定すれば、どのレプリカでも動作します。`overleaf-0` でインポートして `overleaf-1` で更新する方法で、両方のケースをテストしました。OAuth ハンドシェイクは状態を Redis 内のセッションに保持するため、コールバックはどのレプリカに届いても構いません。

### Kubernetes でのテスト

[www.zotero.org](http://www.zotero.org) と api.zotero.org のモック（`overleaf-certs` の `NODE_EXTRA_CA_CERTS` を通じて信頼）に対して、Kubernetes 1.37 上で HAProxy の背後に 3 つのレプリカを置いた状態で、Zotero のエンドツーエンドテスト（18 ケース）に合格しています。対象は、OAuth 1.0a による連携と連携解除、ライブラリとグループの `.bib` ファイルへのインポート、その更新、Zotero 側でのキーの失効、再連携の要求、共同編集者による参考文献の検索、インポートしたユーザーのみが更新できること、API エラー、Zotero への低速な接続です。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.