> ## 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 파드의 **web** 서비스(`gitea-sync` 모듈)에서 실행됩니다. [Git 연동](https://ayakaleaf-pro.mintlify.site/ko/on-premises/configuration/kubernetes/integrations/git-integration.md)이 필요합니다. OAuth 애플리케이션 생성과 각 설정의 역할은 [Gitea 동기화](https://ayakaleaf-pro.mintlify.site/ko/on-premises/configuration/overleaf-toolkit/integrations/gitea-synchronisation.md)를 참고하세요. 이 페이지에서는 이를 Kubernetes에 적용합니다.

| | |
| - | - |
| 서비스 | web(`gitea-sync` 모듈), 모든 Ayakaleaf Pro 파드에서 실행. web이 시작될 때 읽음 |
| 파드 → Gitea | `GITEA_SYNC_URL`의 REST API(기본값 `https://gitea.com/api/v1`), 사용자가 연결, 가져오기, 내보내기 또는 동기화할 때마다 |
| 브라우저 → Gitea | 계정 연결 시 `${GITEA_SYNC_URL}/login/oauth/authorize`, 이후 `${OVERLEAF_SITE_URL}/user/gitea-sync/oauth2/callback`으로 복귀 |
| Gitea → Overleaf | 없음: 웹훅이 없으며, Gitea에서 인스턴스에 접근할 수 있을 필요가 없음 |
| 저장 데이터 | MongoDB에 암호화되어 저장되는 사용자의 Gitea 액세스 토큰 및 리프레시 토큰 |
| 주기적 작업 | 없음: 사용자가 클릭할 때 동기화가 이루어짐 |

### 구성

**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/ko/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/ko/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 상태 코드든 해당 파드에서 Gitea에 접근할 수 있다는 뜻이며, `000`은 접근할 수 없다는 뜻입니다.

### 여러 레플리카

공유 `GITEA_TOKEN_CIPHER_PASSWORD` 외에는 추가 작업이 없습니다. 동기화는 다른 Git 동기화와 공유되는 Redis의 잠금을 사용하므로, 두 레플리카가 같은 프로젝트를 동시에 동기화하는 일은 없습니다.

### Kubernetes에서의 테스트

`GITEA_SYNC_URL`에 실제 Gitea 1.23을 두고 레플리카 하나와 Git 연동을 켠 Kubernetes 1.37 환경에서, Gitea 동기화에 대한 엔드투엔드 테스트(39개 케이스)가 통과했습니다. 테스트 항목은 Gitea의 OAuth2를 통한 계정 연결 및 연결 해제, 만료되는 액세스 토큰 갱신과 취소된 권한 부여, 새 비공개 저장소 또는 조직 저장소로 내보내기, 저장소 가져오기, 풀과 푸시, 병합, 충돌, 삭제되거나 강제 푸시된 브랜치, 바이너리 파일, 이름 변경과 삭제, 그리고 소유자·편집자·뷰어가 할 수 있는 작업입니다.


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