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

> Дозвольте користувачам синхронізувати свої проєкти з репозиторіями на GitLab.com або на самостійно розміщеному GitLab у розгортанні на Kubernetes.

Синхронізація з GitLab працює в службі **web** (модуль `gitlab-sync`) кожного пода Ayakaleaf Pro. Для неї потрібна [інтеграція з Git](https://ayakaleaf-pro.mintlify.site/uk/on-premises/configuration/kubernetes/integrations/git-integration.md). Як створити OAuth-застосунок і що робить кожне налаштування, описано в розділі [Синхронізація з GitLab](https://ayakaleaf-pro.mintlify.site/uk/on-premises/configuration/overleaf-toolkit/integrations/gitlab-synchronisation.md); ця сторінка переносить це в Kubernetes.

| | |
| - | - |
| Служба | web (модуль `gitlab-sync`) у кожному поді Ayakaleaf Pro; зчитується під час запуску web |
| Под → GitLab | REST API з `GITLAB_SYNC_URL` (за замовчуванням `https://gitlab.com/api/v4`) — щоразу, коли користувач прив'язує обліковий запис, імпортує, експортує чи синхронізує |
| Браузер → GitLab | `${GITLAB_SYNC_URL}/oauth/authorize` для прив'язки облікового запису, потім повернення на `${OVERLEAF_SITE_URL}/user/gitlab-sync/oauth2/callback` |
| GitLab → Overleaf | немає: вебхука немає, екземпляр не мусить бути доступним із 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"` і StatefulSet git-bridge з розділу [Інтеграція з Git](https://ayakaleaf-pro.mintlify.site/uk/on-premises/configuration/kubernetes/integrations/git-integration.md) мають бути налаштовані: без них налаштування облікового запису та редактор приховують синхронізацію з 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` шифрує токени доступу та оновлення GitLab користувачів у MongoDB. Усі репліки мають використовувати однакове значення, а якщо змінити його пізніше, усім користувачам доведеться знову прив'язати GitLab.

**3. Приватний CA (необов'язково)**

Якщо ваш GitLab має сертифікат від вашого власного центру сертифікації (CA), додайте CA до Secret `overleaf-certs`, змонтованого в `/var/lib/overleaf/certs` (див. [Сертифікати та інші файли](https://ayakaleaf-pro.mintlify.site/uk/on-premises/configuration/kubernetes#сертифікати-та-інші-файли)), і встановіть `NODE_EXTRA_CA_CERTS: /var/lib/overleaf/certs/ca.pem` у ConfigMap.

**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-статус означає, що GitLab доступний із цього пода; `000` означає, що ні.

### Кілька реплік

Нічого додаткового, окрім спільного `GITLAB_TOKEN_CIPHER_PASSWORD`. Синхронізація бере блокування в Redis, спільне з іншими Git-синхронізаціями, тож дві репліки ніколи не синхронізують той самий проєкт одночасно. Оновлення токена GitLab користувача також бере блокування в Redis, тож дві репліки не оновлюють його одночасно.

### Перевірено на Kubernetes

З макетом самостійно розміщеного GitLab за адресою `GITLAB_SYNC_URL` (довіра через `NODE_EXTRA_CA_CERTS` з `overleaf-certs`), на Kubernetes 1.37 з однією реплікою та ввімкненою інтеграцією з Git, наші наскрізні тести синхронізації з GitLab проходять (40 випадків): прив'язка та скасування прив'язки облікового запису, оновлення токена доступу з обмеженим терміном дії та відкликані токени, експорт у новий приватний проєкт або проєкт групи, імпорт репозиторію, pull і push, злиття, конфлікти, видалені гілки та гілки після force push, бінарні файли, перейменування та видалення, а також те, що можуть робити власники, редактори та глядачі.


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