avoice

Документация

Файлы, S3 и резервные копии

Файлы из чата, аватарки и картинки сервера хранятся на диске сервера или в S3-совместимом хранилище. Клиенты в обоих случаях получают их от самого сервера.

На диске

По умолчанию ("storage": "local") файлы лежат в data/files. Общее место ограничено полем storageMB: когда оно кончается, удаляются самые старые файлы.

В S3

Подходит Amazon S3 и совместимые: MinIO, Yandex Object Storage, Selectel, Cloudflare R2 и другие. Бакет остаётся закрытым: файлы отдаёт сервер, проверяя права, а перемотка аудио и видео работает - сервер запрашивает у S3 нужные куски.

"storage": "s3",
"s3": {
  "endpoint": "storage.yandexcloud.net",
  "region": "ru-central1",
  "bucket": "my-avoice",
  "prefix": "avoice/",
  "accessKey": "…",
  "secretKey": "…",
  "pathStyle": false
}
  • endpoint - адрес хранилища; можно с https://.
  • prefix - папка внутри бакета, если бакет общий с чем-то ещё.
  • pathStyle: true - для MinIO и похожих (адреса вида host/bucket).
  • Бакет должен существовать - иначе сервер не запустится и напишет почему.

Мастер настройки спрашивает про хранилище сам и сразу проверяет подключение.

Уже загруженные файлы переносятся одной командой после настройки s3:

./avoice-server-linux-amd64 migrate-storage

Папку data/files удалите сами, когда убедитесь, что всё открывается.

Резервные копии

  • Каждый день сервер сам кладёт копию базы в data/backups/ - без остановки, VACUUM INTO. Хранится backupDays дней (по умолчанию 7).

  • Вручную - копия базы, config.json и сертификата:

    ./avoice-server-linux-amd64 backup
    ./avoice-server-linux-amd64 backup /mnt/backups/avoice
    

Файлы из чата в копию не входят: при хранении на диске копируйте data/files обычным способом, в S3 - пользуйтесь средствами хранилища (версии, репликация).

Перенести сервер на другую машину

Скопируйте папку сервера целиком - программу, config.json и data/ - и запустите на новом месте. Сертификат переедет вместе с data/, поэтому клиентам не придётся подтверждать его заново. Если поменялся адрес, раздайте новый.