Хранилище S3
Загруженные файлы (вложения, голосовые сообщения и аватары) по умолчанию хранятся в каталоге данных сервера. Если задан бакет S3, сервер хранит их там. Отдаёт файлы приложению по-прежнему сам сервер, поэтому бакет не обязан быть доступен из интернета, а доступ работает как раньше: файл может скачать любой, у кого есть ссылка. Имена и размеры файлов остаются в базе, в бакет переезжает только содержимое.
Строка журнала tolktak-server listening показывает files=s3 или files=disk.
Garage в установке через Compose
Установка через Compose запускает Garage, лёгкий S3-сервер, с бакетом tolktak. Настраивать ничего не нужно: ключи берутся из .env. Файлы хранятся в томе garage-data, метаданные Garage — в garage-meta. Garage доступен только другим сервисам установки.
S3 провайдера
Создайте бакет и ключ доступа с правом читать и записывать в нём объекты, затем задайте переменные:
| Переменная | Пример | Назначение |
|---|---|---|
TOLKTAK_S3_BUCKET |
tolktak |
Имя бакета. Если задано, файлы хранятся в S3. |
TOLKTAK_S3_ENDPOINT |
https://<account id>.r2.cloudflarestorage.com |
Адрес S3 провайдера. Для AWS S3 оставьте пустым. Для сервера в закрытой сети допустим http://. |
TOLKTAK_S3_REGION |
auto |
Регион бакета. Пусто — us-east-1. |
TOLKTAK_S3_ACCESS_KEY, TOLKTAK_S3_SECRET_KEY |
Ключ доступа. Если задан бакет, обязательны оба. |
| Провайдер | TOLKTAK_S3_ENDPOINT |
TOLKTAK_S3_REGION |
|---|---|---|
| AWS S3 | пусто | регион бакета, например eu-central-1 |
| Cloudflare R2 | https://<account id>.r2.cloudflarestorage.com |
auto |
| Backblaze B2 | https://s3.<регион>.backblazeb2.com |
регион из адреса, например eu-central-003 |
| Другие S3-совместимые серверы | адрес сервера | как требует сервер |
Сервер обращается к объектам по пути <endpoint>/<bucket>/<id файла>; все перечисленные провайдеры это поддерживают.
- Compose: задайте переменные в
.envи уберитеgarageизCOMPOSE_PROFILES, затем выполнитеdocker compose up -dиdocker compose rm -sf garage. docker run: добавьте переменные через-e.
Оставьте бакет закрытым. Файлы называются случайными идентификаторами и после загрузки не меняются.
Файлы на диске
В установке через Compose задайте в .env пустое TOLKTAK_S3_BUCKET= и уберите garage из COMPOSE_PROFILES. Файлы будут храниться в томе data вместе с остальными данными сервера.
Перенос существующих файлов
tolktak-server copy-files загружает файлы из каталога данных (TOLKTAK_DATA_DIR/files) в настроенный бакет. Файлы, которые уже есть в бакете, пропускаются, поэтому после обрыва команду можно запустить снова. Локальные файлы она не трогает; удалите их, когда убедитесь, что сервер работает с бакетом.
Переезд с сервера docker run на установку через Compose описан в разделе «Переезд с docker run». Для установки через Compose, которая хранила файлы на диске:
docker compose run --rm tolktak copy-files # после того как заданы переменные TOLKTAK_S3_*
docker compose up -d
Команда берёт настройки бакета из тех же переменных, что и сервер.
Резервные копии
С Garage сохраняйте тома garage-data и garage-meta, как описано в инструкции по обслуживанию. У провайдера используйте версионирование или репликацию бакета либо копируйте его инструментом вроде rclone.