<span id="object-storage-s3" />

# Объектное хранилище (S3)

S3-совместимое объектное хранилище для загрузок, статических файлов и бэкапов. При создании аддона `s3` автоматически создаётся **бакет с публичным чтением под именем `default`**, поэтому файлы можно отдавать сразу, без дополнительной настройки.

<span id="provision" />

## Создание

```bash
lizard add s3
```

Первый S3-аддон называется `s3`, поэтому `${{s3.S3_ENDPOINT}}` и подобные команды работают сразу.

<span id="environment-variables" />

## Переменные окружения

| Переменная | Описание |
|----------|-------------|
| `S3_ENDPOINT` | S3-совместимый URL эндпоинта |
| `S3_DEFAULT_BUCKET` | Имя автоматически созданного бакета (`default`) |
| `S3_ACCESS_KEY_ID` | Access key |
| `S3_SECRET_ACCESS_KEY` | Secret key |
| `S3_REGION` | Регион |

<span id="connect-a-service" />

## Подключение сервиса

```bash
lizard secrets set \
  S3_ENDPOINT='${{s3.S3_ENDPOINT}}' \
  S3_DEFAULT_BUCKET='${{s3.S3_DEFAULT_BUCKET}}' \
  S3_ACCESS_KEY_ID='${{s3.S3_ACCESS_KEY_ID}}' \
  S3_SECRET_ACCESS_KEY='${{s3.S3_SECRET_ACCESS_KEY}}' \
  S3_REGION='${{s3.S3_REGION}}' \
  --service api
lizard redeploy --service api
```

<span id="using-an-aws-sdk" />

## Использование AWS SDK

Эндпоинт совместим с S3. Используйте **path-style** адресацию:

```ts
import { S3Client } from "@aws-sdk/client-s3";

const s3 = new S3Client({
  endpoint: process.env.S3_ENDPOINT,
  region: process.env.S3_REGION,
  forcePathStyle: true, // required
  credentials: {
    accessKeyId: process.env.S3_ACCESS_KEY_ID!,
    secretAccessKey: process.env.S3_SECRET_ACCESS_KEY!,
  },
});
```

<span id="public-files" />

## Публичные файлы

Объекты в любом **публичном** бакете доступны без аутентификации двумя способами:

1. **Gateway URL** (показывается в дашборде):
   ```
   https://s3-<region>.onlizard.com/<addonId>/<bucket>/<key>
   ```
2. **Platform proxy** (хост дашборда, с долгими неизменяемыми заголовками кэша):
   ```
   <dashboard-host>/api/s3/<addonId>/public/<bucket>/<key>
   ```

Все, что загружено в бакет `default`, сразу становится публичным по адресу:

```
<dashboard-host>/api/s3/<addonId>/public/default/<key>
```

<span id="browse-objects" />

## Обзор объектов

Откройте **S3-браузер** в дашборде (`lizard open`), чтобы загружать, скачивать и управлять объектами и бакетами.

> **Изменение ACL бакета** (переключение публичный/приватный) пока недоступно в CLI — управляйте ими через дашборд.

<span id="grow-storage" />

## Увеличение хранилища

```bash
lizard scale --service s3 --storage 16384
```

<span id="see-also" />

## См. также

- [Managed Addons](https://lizard.build/ru/docs/addons) — именование, ссылки и браузеры в дашборде.
- [Межсервисные ссылки](https://lizard.build/ru/docs/variables/references) — синтаксис ссылок и их разрешение.
