> ## 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.

# Gitea 同期

> Kubernetes デプロイで、ユーザーがプロジェクトを Gitea.com または独自の Gitea 上のリポジトリと同期できるようにします。

Gitea 同期は、各 Ayakaleaf Pro Pod の **web** サービス（`gitea-sync` モジュール）で動作します。[Git 連携](https://ayakaleaf-pro.mintlify.site/ja/on-premises/configuration/kubernetes/integrations/git-integration.md) が必要です。OAuth アプリケーションの作成方法と各設定の役割は [Gitea 同期](https://ayakaleaf-pro.mintlify.site/ja/on-premises/configuration/overleaf-toolkit/integrations/gitea-synchronisation.md) を参照してください。このページでは、それを Kubernetes に設定する方法を説明します。

| | |
| - | - |
| サービス | web（`gitea-sync` モジュール）、すべての Ayakaleaf Pro Pod 内。web の起動時に読み込まれます |
| Pod → Gitea | `GITEA_SYNC_URL`（デフォルトは `https://gitea.com/api/v1`）の REST API。ユーザーがリンク、インポート、エクスポート、同期を行うたび |
| ブラウザ → Gitea | アカウントをリンクするための `${GITEA_SYNC_URL}/login/oauth/authorize`、その後 `${OVERLEAF_SITE_URL}/user/gitea-sync/oauth2/callback` に戻ります |
| Gitea → Overleaf | なし：Webhook はなく、インスタンスに Gitea から到達できる必要はありません |
| 保存データ | ユーザーの Gitea アクセストークンとリフレッシュトークン。暗号化して MongoDB に保存されます |
| 定期ジョブ | なし：同期はユーザーがクリックしたときに行われます |

### 設定

**1. ConfigMap**

```yaml title="30-config.yaml (additions)" theme={null}
  GITEA_SYNC_ENABLED: "true"
  GITEA_SYNC_CLIENT_ID: <client ID>
  # your own Gitea: its ROOT_URL
  # GITEA_SYNC_URL: https://gitea.example.com
  # optional: send the module's requests to Gitea through an HTTP proxy
  # GITEA_SYNC_PROXY_URL: http://proxy.example.com:3128
```

`GIT_BRIDGE_ENABLED: "true"` と、[Git 連携](https://ayakaleaf-pro.mintlify.site/ja/on-premises/configuration/kubernetes/integrations/git-integration.md) の git-bridge StatefulSet が用意されている必要があります。これらがないと、アカウント設定とエディターに Gitea 同期が表示されません。

**2. Secret**

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

`GITEA_TOKEN_CIPHER_PASSWORD` は、MongoDB 内のユーザーの Gitea アクセストークンとリフレッシュトークンを暗号化します。すべてのレプリカで同じ値を使用する必要があり、後から変更するとすべてのユーザーが Gitea を再リンクすることになります。

**3. プライベート CA（任意）**

Gitea の証明書が独自の CA によるものである場合は、その CA を `/var/lib/overleaf/certs` にマウントされる Secret `overleaf-certs` に追加し（[証明書とその他のファイル](https://ayakaleaf-pro.mintlify.site/ja/on-premises/configuration/kubernetes#証明書とその他のファイル) を参照）、ConfigMap に `NODE_EXTRA_CA_CERTS: /var/lib/overleaf/certs/ca.pem` を設定します。

**4. 適用、再起動、確認**

```bash theme={null}
kubectl apply -f 30-config.yaml
kubectl -n overleaf rollout restart deployment/overleaf     # or statefulset/overleaf
for p in $(kubectl -n overleaf get pod -l app=overleaf -o name); do   # app=overleaf-ha for several replicas
  kubectl -n overleaf exec "$p" -- curl -sS -o /dev/null -w "$p %{http_code}\n" https://gitea.com/api/v1/version
done
```

何らかの HTTP ステータスが返れば、その Pod から Gitea に到達できています。`000` の場合は到達できていません。

### 複数のレプリカ

共有の `GITEA_TOKEN_CIPHER_PASSWORD` 以外に追加の作業は不要です。同期は、ほかの Git 同期と共有される Redis のロックを取得するため、2 つのレプリカが同じプロジェクトを同時に同期することはありません。

### Kubernetes でのテスト結果

`GITEA_SYNC_URL` に実際の Gitea 1.23 を設定し、Kubernetes 1.37 上でレプリカ 1 つ、Git 連携を有効にした構成で、Gitea 同期のエンドツーエンドテストに合格しました（39 ケース）。対象は、Gitea の OAuth2 によるアカウントのリンクとリンク解除、期限切れになるアクセストークンの更新と取り消された許可、新しいプライベートリポジトリまたは組織リポジトリへのエクスポート、リポジトリのインポート、プルとプッシュ、マージ、コンフリクト、削除されたブランチと強制プッシュされたブランチ、バイナリファイル、名前の変更と削除、そしてオーナー、編集者、閲覧者がそれぞれ実行できる操作です。


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