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

# Đồng bộ hóa GitHub

> Cho phép người dùng đồng bộ dự án của họ với các kho lưu trữ GitHub hoặc GitHub Enterprise trên một bản triển khai Kubernetes.

Đồng bộ hóa GitHub chạy trong dịch vụ **web** (mô-đun `github-sync`) của mọi pod Ayakaleaf Pro. Tính năng này cần [Tích hợp Git](https://ayakaleaf-pro.mintlify.site/vi/on-premises/configuration/kubernetes/integrations/git-integration.md). Hãy tạo ứng dụng OAuth và đọc ý nghĩa của từng cài đặt trong [Đồng bộ hóa GitHub](https://ayakaleaf-pro.mintlify.site/vi/on-premises/configuration/overleaf-toolkit/integrations/github-synchronisation.md); trang này đưa cấu hình đó vào Kubernetes.

| | |
| - | - |
| Dịch vụ | web (mô-đun `github-sync`), trong mọi pod Ayakaleaf Pro; được đọc khi web khởi động |
| Pod → GitHub | `https://api.github.com` (REST và GraphQL), hoặc API của `GITHUB_SYNC_URL`, mỗi khi người dùng liên kết, nhập, xuất hoặc đồng bộ |
| Trình duyệt → GitHub | `https://github.com/login/oauth/authorize` để liên kết tài khoản, sau đó quay lại `${OVERLEAF_SITE_URL}/user/github-sync/oauth2/callback` |
| GitHub → Overleaf | không có: không có webhook, phiên bản không cần truy cập được từ GitHub |
| Dữ liệu được lưu trữ | các access token GitHub của người dùng, đã được mã hóa, trong MongoDB |
| Tác vụ định kỳ | không có: việc đồng bộ diễn ra khi người dùng nhấp chuột |

### Cấu hình

**1. ConfigMap**

```yaml title="30-config.yaml (additions)" theme={null}
  GITHUB_SYNC_ENABLED: "true"
  GITHUB_SYNC_CLIENT_ID: <client ID>
  # GitHub Enterprise: its web address
  # GITHUB_SYNC_URL: https://github.example.com
  # optional: send the module's requests to GitHub through an HTTP proxy
  # GITHUB_SYNC_PROXY_URL: http://proxy.example.com:3128
```

`GIT_BRIDGE_ENABLED: "true"` và StatefulSet git-bridge từ [Tích hợp Git](https://ayakaleaf-pro.mintlify.site/vi/on-premises/configuration/kubernetes/integrations/git-integration.md) phải được thiết lập sẵn: nếu thiếu chúng, phần cài đặt tài khoản và trình soạn thảo sẽ ẩn Đồng bộ hóa GitHub.

**2. Secret**

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

`GITHUB_TOKEN_CIPHER_PASSWORD` mã hóa các access token GitHub của người dùng trong MongoDB. Mọi replica phải dùng cùng một giá trị, và việc thay đổi giá trị này sau đó sẽ buộc mọi người dùng phải liên kết lại GitHub.

**3. CA riêng (tùy chọn)**

Nếu GitHub của bạn dùng chứng chỉ do CA riêng của bạn cấp, hãy thêm CA đó vào Secret `overleaf-certs` được mount tại `/var/lib/overleaf/certs` (xem [Chứng chỉ và các tệp khác](https://ayakaleaf-pro.mintlify.site/vi/on-premises/configuration/kubernetes#chứng-chỉ-và-các-tệp-khác)) và đặt `NODE_EXTRA_CA_CERTS: /var/lib/overleaf/certs/ca.pem` trong ConfigMap.

**4. Áp dụng, khởi động lại và kiểm tra**

```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://api.github.com
done
```

Bất kỳ mã trạng thái HTTP nào cũng có nghĩa là pod đó truy cập được GitHub; `000` có nghĩa là không truy cập được.

### Nhiều replica

Không cần thêm gì ngoài `GITHUB_TOKEN_CIPHER_PASSWORD` dùng chung. Mỗi lần đồng bộ sẽ giữ một khóa trong Redis, dùng chung với các loại đồng bộ hóa Git khác, nên hai replica không bao giờ đồng bộ cùng một dự án cùng lúc.

### Đã kiểm thử trên Kubernetes

Với một bản mô phỏng github.com cùng các API REST và GraphQL của nó (được tin cậy thông qua `NODE_EXTRA_CA_CERTS` từ `overleaf-certs`), trên Kubernetes 1.37 với một replica và Tích hợp Git được bật, các bài kiểm thử end-to-end của chúng tôi cho Đồng bộ hóa GitHub đều đạt (31 trường hợp): liên kết và hủy liên kết tài khoản, token bị thu hồi, xuất dự án sang một kho lưu trữ riêng tư hoặc kho lưu trữ tổ chức mới, nhập một kho lưu trữ (kể cả vượt quá giới hạn tải lên), pull và push, merge, xung đột và merge thủ công, nhánh bị xóa và bị force push, tệp nhị phân, đổi tên và xóa, mất quyền push, và những gì chủ sở hữu, người chỉnh sửa và người xem được phép làm.


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