> 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/uk/konfiguraciya/overleaf-toolkit/s3.md).

# S3

{% hint style="info" %}
Цей документ охоплює налаштування S3 у Server CE та Overleaf Pro. A [окремий посібник](/on-premises/uk/obslugovuvannya/s3-migration.md) можна знайти про перенесення наявних даних до сумісного зі S3 сховища.
{% endhint %}

## Коли варто розглянути використання S3 для зберігання даних

Для інсталяцій із менш ніж 1000 місць ми рекомендуємо використовувати локальне дискове сховище з регулярними [узгодженими резервними копіями](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup).

Для більших інсталяцій із понад 1000 місць, які досягають меж свого локального сховища (за обсягом або пропускною здатністю), ми рекомендуємо використовувати сумісний зі S3 об’єктний бекенд сховища замість інших мережевих рішень для зберігання, таких як NFS.

## Параметри сумісного зі S3 об’єктного сховища

Ось найпопулярніші варіанти сумісного зі S3 об’єктного сховища:

* [AWS S3](https://aws.amazon.com/s3/), кероване; ми радимо обрати AWS S3, якщо ви запускаєте Overleaf CE/Server Pro на AWS
* [MINIO](https://min.io/), self-hosted
* [Ceph](https://ceph.io/en/), self-hosted
* Інші хостинг-провайдери також мають певний різновид керованого сумісного зі S3 об’єктного сховища, тож ви можете захотіти використовувати його замість розгортання власного, якщо вже запускаєте Overleaf CE/Server Pro у такого провайдера.

## Міркування щодо затримки під час вибору сумісного зі S3 об’єктного сховища

Затримка між інстансом Server CE/Server Pro та вашим сумісним зі S3 об’єктним сховищем є важливим чинником часу, потрібного для завершення міграції. Затримка також впливає на продуктивність завантаження файлів у Server CE/Server Pro, а повільне завантаження файлів може суттєво впливати і на час компіляції PDF. Ми радимо мінімізувати географічну відстань між вашим інстансом Server CE/Server Pro та сумісним зі S3 об’єктним сховищем. У керованому середовищі це означало б створення бакета в тому самому регіоні, а для локального рішення — запуск обох у межах одного кампусу.

## Налаштування S3

Нам потрібні чотири «бакети» та два обмежені облікові записи користувачів.

{% hint style="warning" %}
Бакети мають **не** бути загальнодоступними
{% 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>Бакет</td><td>Використання</td><td>Сервіс</td><td>Раніше в <code>/var/lib/overleaf/data</code></td></tr><tr><td><code>overleaf-user-files</code></td><td>файли користувача проєкту</td><td>filestore</td><td><code>user_files</code></td></tr><tr><td><code>overleaf-template-files</code></td><td>файли шаблонів</td><td>filestore</td><td><code>template_files</code></td></tr><tr><td><code>overleaf-project-blobs</code></td><td>об’єкти історії проєкту</td><td>історія та сховище файлів лише для читання</td><td><code>history/overleaf-project-blobs</code></td></tr><tr><td><code>overleaf-chunks</code></td><td>фрагменти історії</td><td>history</td><td><code>history/overleaf-chunks</code></td></tr></tbody></table>

Ви можете захотіти/потребувати обрати іншу назву; переконайтеся, що використовуєте власні бакети в усіх командах.

Нижче будуть використані заповнювачі для фактичних облікових даних:

<table><thead><tr><th width="431">Змінна середовища</th><th>Опис</th></tr></thead><tbody><tr><td><code>OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID</code></td><td>Ключ доступу/ім’я користувача обмеженого користувача сервісу filestore.</td></tr><tr><td><code>OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY</code></td><td>Секретний ключ/пароль обмеженого користувача сервісу filestore.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_ACCESS_KEY_ID</code></td><td>Ключ доступу/ім’я користувача обмеженого користувача сервісу history.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY</code></td><td>Секретний ключ/пароль обмеженого користувача сервісу history.</td></tr></tbody></table>

Server CE та Server Pro потребують лише невеликого набору дозволів для кожного бакета:

* створювати об’єкт
* отримувати об’єкт
* видаляти об’єкт
* перелік бакета

### Політики доступу

Ось як може виглядати політика для користувача filestore:

```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/*"
    }
  ]
}
```

Ось як може виглядати політика для користувача history:

```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/*"
    }
  ]
}
```

### Огляд змінних

#### Під час використання AWS S3

```bash
# Увімкнути S3-бекенд для filestore
OVERLEAF_FILESTORE_BACKEND=s3

# Назва бакета для файлів проєкту
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# Назва бакета для файлів шаблонів
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# Ключ для користувача filestore
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Секрет для користувача filestore
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# Регіон бакета, який ви вибрали під час створення бакетів.
OVERLEAF_FILESTORE_S3_REGION=""

# Увімкнути S3-бекенд для history
OVERLEAF_HISTORY_BACKEND=s3

# Назва бакета для об’єктів історії проєкту
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# Назва бакета для фрагментів історії
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# Ключ для користувача history
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# Секрет для користувача history
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# Регіон бакета, який ви вибрали під час створення бакетів.
OVERLEAF_HISTORY_S3_REGION=""
```

#### Під час використання варіанта self-hosted

```bash
# Увімкнути S3-бекенд для filestore
OVERLEAF_FILESTORE_BACKEND=s3

# Назва бакета для файлів проєкту
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# Назва бакета для файлів шаблонів
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# Ключ для користувача filestore
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Секрет для користувача filestore
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# Кінцева точка S3-провайдера
OVERLEAF_FILESTORE_S3_ENDPOINT=http://10.10.10.10:9000

# Доступ до бакетів у стилі path-style. Найімовірніше, вам потрібно встановити це в значення "true".
OVERLEAF_FILESTORE_S3_PATH_STYLE="true"

# Регіон бакета. Найімовірніше, вам не потрібно це налаштовувати.
OVERLEAF_FILESTORE_S3_REGION=""

# Увімкнути S3-бекенд для history
OVERLEAF_HISTORY_BACKEND=s3

# Назва бакета для об’єктів історії проєкту
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# Назва бакета для фрагментів історії
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# Ключ для користувача history
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# Секрет для користувача history
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# Кінцева точка S3-провайдера
OVERLEAF_HISTORY_S3_ENDPOINT=http://10.10.10.10:9000

# Доступ до бакетів у стилі path-style. Найімовірніше, вам потрібно встановити це в значення "true".
OVERLEAF_HISTORY_S3_PATH_STYLE="true"

# Регіон бакета. Найімовірніше, вам не потрібно це налаштовувати.
OVERLEAF_HISTORY_S3_REGION=""
```

### Налаштування MINIO

{% hint style="info" %}
`MINIO_ROOT_USER` та `MINIO_ROOT_PASSWORD` є кореневими обліковими даними інстанса MINIO.
{% endhint %}

Будь ласка, дотримуйтесь [офіційної документації](https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart) щоб отримати копію `mc`.

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

# Розмістіть вміст політик з попереднього розділу у
# відповідних json-файлах policy-filestore.json та policy-history.json.

# Нагадування: відповідно замініть назви бакетів і облікові дані.

# бакети, користувач і політика 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

# бакети, користувач і політика history
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/uk/konfiguraciya/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.
