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

# GitLab 同期

> Kubernetes デプロイで、ユーザーがプロジェクトを GitLab.com またはセルフマネージドの GitLab 上のリポジトリと同期できるようにします。

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

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

### 設定

**1. ConfigMap**

```yaml title="30-config.yaml (additions)" theme={null}
  GITLAB_SYNC_ENABLED: "true"
  GITLAB_SYNC_CLIENT_ID: <client ID>
  # self-managed GitLab: its web address
  # GITLAB_SYNC_URL: https://gitlab.example.com
  # optional: send the module's requests to GitLab through an HTTP proxy
  # GITLAB_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 が用意されている必要があります。これらがない場合、アカウント設定とエディターに GitLab 同期は表示されません。

**2. Secret**

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

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

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

GitLab が独自の CA による証明書を使用している場合は、`/var/lib/overleaf/certs` にマウントされる Secret `overleaf-certs` に CA を追加し（[証明書とその他のファイル](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://gitlab.com/api/v4/version
done
```

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

### 複数のレプリカ

共有の `GITLAB_TOKEN_CIPHER_PASSWORD` 以外に追加の設定は不要です。同期は Redis 内のロック（他の Git 同期と共有）を取得するため、2 つのレプリカが同じプロジェクトを同時に同期することはありません。ユーザーの GitLab トークンの更新も Redis のロックを取得するため、2 つのレプリカが同時にトークンを更新することはありません。

### Kubernetes でのテスト

`GITLAB_SYNC_URL` に置いたセルフマネージド GitLab のモック（`overleaf-certs` の `NODE_EXTRA_CA_CERTS` を通じて信頼）に対して、Kubernetes 1.37 上でレプリカ 1 つ、Git 連携を有効にした状態で、GitLab 同期のエンドツーエンドテスト（40 ケース）に合格しています。対象は、アカウントの連携と連携解除、期限切れ間近のアクセストークンの更新と失効したトークン、新しいプライベートプロジェクトまたはグループプロジェクトへのエクスポート、リポジトリのインポート、プルとプッシュ、マージ、コンフリクト、削除されたブランチと強制プッシュされたブランチ、バイナリファイル、名前変更と削除、そしてオーナー、編集者、閲覧者がそれぞれ実行できる操作です。


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