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

# S3

{% hint style="info" %}
Это руководство описывает настройку S3 в Server CE и Overleaf Pro. A [отдельное руководство](/on-premises/ru/obsluzhivanie/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>Ключ доступа/имя пользователя ограниченного пользователя сервиса 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=""
```

#### При использовании самостоятельно размещаемого варианта

```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

# Адресация бакетов в стиле пути. Скорее всего, вам нужно установить это в "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

# Адресация бакетов в стиле пути. Скорее всего, вам нужно установить это в "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://overleaf-pro.ayaka.space/on-premises/ru/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.
