> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-pro.ayaka.space/on-premises/uk/konfiguraciya/overleaf-toolkit/s3.md).

# S3

{% hint style="info" %}
Цей документ охоплює налаштування S3 у Server CE та Overleaf Pro. О [окремий посібник](/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/), самостійно розгорнутий
* [Ceph](https://ceph.io/en/), самостійно розгорнутий
* Інші хостинг-провайдери також мають певний різновид керованого сумісного зі 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>Ключ доступу/ім’я користувача обмеженого користувача служби файлового сховища.</td></tr><tr><td><code>OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY</code></td><td>Секретний ключ/пароль обмеженого користувача служби файлового сховища.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_ACCESS_KEY_ID</code></td><td>Ключ доступу/ім’я користувача обмеженого користувача служби історії.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY</code></td><td>Секретний ключ/пароль обмеженого користувача служби історії.</td></tr></tbody></table>

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

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

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

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

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

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

```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 для файлового сховища
OVERLEAF_FILESTORE_BACKEND=s3

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

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

# Ключ для користувача файлового сховища
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Секрет для користувача файлового сховища
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

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

# Увімкнути бекенд S3 для історії
OVERLEAF_HISTORY_BACKEND=s3

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

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

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

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

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

#### Під час використання самостійно розгорнутого варіанта

```bash
# Увімкнути бекенд S3 для файлового сховища
OVERLEAF_FILESTORE_BACKEND=s3

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

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

# Ключ для користувача файлового сховища
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Секрет для користувача файлового сховища
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 для історії
OVERLEAF_HISTORY_BACKEND=s3

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

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

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

# Секрет для користувача історії
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.

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

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

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