> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/vi/cau-hinh/overleaf-toolkit/s3.md).

# S3

{% hint style="info" %}
Tài liệu này bao gồm việc thiết lập S3 trong Server CE và Overleaf Pro. Một [hướng dẫn riêng](/on-premises/vi/bao-tri/s3-migration.md) có thể được tìm thấy về việc di chuyển dữ liệu hiện có sang bộ nhớ tương thích S3.
{% endhint %}

## Khi nào nên cân nhắc dùng S3 cho lưu trữ dữ liệu

Đối với các phiên bản có ít hơn 1000 ghế, chúng tôi khuyến nghị dùng lưu trữ đĩa cục bộ với các bản sao lưu [nhất quán](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup).

Đối với các phiên bản lớn hơn với hơn 1000 ghế, khi chạm tới giới hạn của lưu trữ cục bộ (dung lượng hoặc thông lượng), chúng tôi khuyến nghị dùng backend lưu trữ đối tượng tương thích S3 thay vì các giải pháp lưu trữ dựa trên mạng khác như NFS.

## Các tùy chọn lưu trữ đối tượng tương thích S3

Dưới đây là các tùy chọn phổ biến nhất cho lưu trữ đối tượng tương thích S3:

* [AWS S3](https://aws.amazon.com/s3/), được quản lý, chúng tôi khuyên chọn AWS S3 khi chạy Overleaf CE/Server Pro trên AWS
* [MINIO](https://min.io/), tự lưu trữ
* [Ceph](https://ceph.io/en/), tự lưu trữ
* Các nhà cung cấp dịch vụ lưu trữ khác cũng có một số kiểu lưu trữ đối tượng tương thích S3 được quản lý, bạn có thể muốn dùng chúng thay vì tự vận hành khi đã chạy Overleaf CE/Server Pro tại nhà cung cấp đó.

## Các cân nhắc về độ trễ khi chọn lưu trữ đối tượng tương thích S3

Độ trễ giữa phiên bản Server CE/Server Pro và bộ lưu trữ đối tượng tương thích S3 của bạn là một yếu tố đóng góp lớn vào thời gian cần để hoàn tất việc di chuyển. Độ trễ cũng ảnh hưởng đến hiệu năng tải tệp lên trong Server CE/Server Pro và việc tải tệp xuống chậm cũng có thể tác động lớn đến thời gian biên dịch PDF. Chúng tôi khuyên giảm thiểu khoảng cách địa lý giữa phiên bản Server CE/Server Pro của bạn và bộ lưu trữ đối tượng tương thích S3. Trong môi trường được quản lý, điều này có nghĩa là cấp phát một bucket ở cùng khu vực, còn với giải pháp tại chỗ, hãy chạy hai hệ thống này trên cùng một khuôn viên.

## Thiết lập S3

Chúng ta cần bốn "bucket" và hai tài khoản người dùng bị hạn chế.

{% hint style="warning" %}
Các bucket nên **không** có thể truy cập công khai
{% endhint %}

<table data-header-hidden><thead><tr><th width="279"></th><th width="152"></th><th width="97"></th><th></th></tr></thead><tbody><tr><td>Bucket</td><td>Cách dùng</td><td>Dịch vụ</td><td>Trước đây trong <code>/var/lib/overleaf/data</code></td></tr><tr><td><code>overleaf-user-files</code></td><td>tệp người dùng của dự án</td><td>filestore</td><td><code>user_files</code></td></tr><tr><td><code>overleaf-template-files</code></td><td>tệp mẫu</td><td>filestore</td><td><code>template_files</code></td></tr><tr><td><code>overleaf-project-blobs</code></td><td>các blob lịch sử dự án</td><td>lưu trữ lịch sử và chỉ đọc</td><td><code>history/overleaf-project-blobs</code></td></tr><tr><td><code>overleaf-chunks</code></td><td>các khối lịch sử</td><td>history</td><td><code>history/overleaf-chunks</code></td></tr></tbody></table>

Bạn có thể muốn/cần chọn một tên khác, hãy chắc chắn sử dụng các bucket tùy chỉnh trong tất cả các lệnh.

Phần sau sẽ dùng các placeholder cho thông tin xác thực thực tế:

<table><thead><tr><th width="431">Biến môi trường</th><th>Mô tả</th></tr></thead><tbody><tr><td><code>OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID</code></td><td>Khóa truy cập/tên người dùng của người dùng bị hạn chế của dịch vụ filestore.</td></tr><tr><td><code>OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY</code></td><td>Khóa bí mật/mật khẩu của người dùng bị hạn chế của dịch vụ filestore.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_ACCESS_KEY_ID</code></td><td>Khóa truy cập/tên người dùng của người dùng bị hạn chế của dịch vụ lịch sử.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY</code></td><td>Khóa bí mật/mật khẩu của người dùng bị hạn chế của dịch vụ lịch sử.</td></tr></tbody></table>

Server CE và Server Pro chỉ cần một bộ quyền nhỏ trên mỗi bucket:

* tạo đối tượng
* lấy đối tượng
* xóa đối tượng
* liệt kê bucket

### Chính sách truy cập

Đây là cách một chính sách cho người dùng filestore có thể trông như thế này:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-user-files"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-user-files/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-template-files"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-template-files/*"
    }
  ]
}
```

Đây là cách một chính sách cho người dùng lịch sử có thể trông như thế này:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-chunks"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-chunks/*"
    }
  ]
}
```

### Tổng quan về các biến

#### Khi dùng AWS S3

```bash
# Bật backend S3 cho filestore
OVERLEAF_FILESTORE_BACKEND=s3

# Tên bucket cho các tệp dự án
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# Tên bucket cho các tệp mẫu
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# Khóa cho người dùng filestore
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Bí mật cho người dùng filestore
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# Khu vực bucket mà bạn đã chọn khi tạo các bucket.
OVERLEAF_FILESTORE_S3_REGION=""

# Bật backend S3 cho lịch sử
OVERLEAF_HISTORY_BACKEND=s3

# Tên bucket cho các blob lịch sử dự án
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# Tên bucket cho các khối lịch sử
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# Khóa cho người dùng lịch sử
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# Bí mật cho người dùng lịch sử
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# Khu vực bucket mà bạn đã chọn khi tạo các bucket.
OVERLEAF_HISTORY_S3_REGION=""
```

#### Khi dùng tùy chọn tự lưu trữ

```bash
# Bật backend S3 cho filestore
OVERLEAF_FILESTORE_BACKEND=s3

# Tên bucket cho các tệp dự án
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# Tên bucket cho các tệp mẫu
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# Khóa cho người dùng filestore
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Bí mật cho người dùng filestore
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# Điểm cuối của nhà cung cấp S3
OVERLEAF_FILESTORE_S3_ENDPOINT=http://10.10.10.10:9000

# Định địa chỉ bucket theo kiểu đường dẫn. Rất có thể bạn cần đặt giá trị này thành "true".
OVERLEAF_FILESTORE_S3_PATH_STYLE="true"

# Khu vực bucket. Rất có thể bạn không cần cấu hình phần này.
OVERLEAF_FILESTORE_S3_REGION=""

# Bật backend S3 cho lịch sử
OVERLEAF_HISTORY_BACKEND=s3

# Tên bucket cho các blob lịch sử dự án
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# Tên bucket cho các khối lịch sử
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# Khóa cho người dùng lịch sử
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# Bí mật cho người dùng lịch sử
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# Điểm cuối của nhà cung cấp S3
OVERLEAF_HISTORY_S3_ENDPOINT=http://10.10.10.10:9000

# Định địa chỉ bucket theo kiểu đường dẫn. Rất có thể bạn cần đặt giá trị này thành "true".
OVERLEAF_HISTORY_S3_PATH_STYLE="true"

# Khu vực bucket. Rất có thể bạn không cần cấu hình phần này.
OVERLEAF_HISTORY_S3_REGION=""
```

### Thiết lập MINIO

{% hint style="info" %}
`MINIO_ROOT_USER` và `MINIO_ROOT_PASSWORD` là thông tin xác thực gốc của phiên bản MINIO.
{% endhint %}

Vui lòng làm theo [tài liệu chính thức](https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart) để lấy một bản sao của `mc`.

```bash
mc alias set s3 http://10.10.10.10:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD

# Đặt nội dung của các chính sách từ phần trước vào
# các tệp json tương ứng policy-filestore.json và policy-history.json.

# Nhắc nhở: Thay thế tên bucket và thông tin xác thực tương ứng.

# các bucket, người dùng và chính sách của filestore
mc mb --ignore-existing s3/overleaf-user-files
mc mb --ignore-existing s3/overleaf-template-files
mc admin user add s3 \
  OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \
  OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
mc admin policy create s3 overleaf-filestore policy-filestore.json
mc admin policy attach s3 overleaf-filestore \
  --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID

# các bucket, người dùng và chính sách của lịch sử
mc mb --ignore-existing s3/overleaf-project-blobs
mc mb --ignore-existing s3/overleaf-chunks
mc admin user add s3 \
  OVERLEAF_HISTORY_S3_ACCESS_KEY_ID \
  OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY
mc admin policy create s3 overleaf-history policy-history.json
mc admin policy attach s3 overleaf-history \
  --user=OVERLEAF_HISTORY_S3_ACCESS_KEY_ID
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/vi/cau-hinh/overleaf-toolkit/s3.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
