PostgreSQL
Установка через Compose запускает PostgreSQL рядом с TolkTak. Сервер, запущенный через docker run или из исходников, по умолчанию хранит базу в файле tolktak.db: для небольшого сервера SQLite позволяет начать без настройки отдельной базы. PostgreSQL удобен, когда важны параллельная запись, отдельное обслуживание базы и её собственные инструменты резервного копирования.
Загруженные файлы в базе не хранятся; о них — в инструкции по S3. Сначала можно запустить SQLite и перенести базу позже. База выбирается переменной TOLKTAK_DATABASE_URL; строка журнала tolktak-server listening показывает database=postgres или database=sqlite.
PostgreSQL в установке через Compose
Его настраивает установщик: сервис postgres хранит данные в томе postgres-data, база и пользователь называются tolktak, а пароль — POSTGRES_PASSWORD в .env. База доступна только другим сервисам установки, снаружи её не видно.
Мажорная версия закреплена в compose.yaml (postgres:17). Новая мажорная версия не откроет старый каталог данных; переход на неё требует дампа и восстановления, как в разделе «Резервная копия».
Уже существующая база
Подойдёт любой доступный серверу PostgreSQL: на этой же машине, на другой или облачный. Создайте пользователя и базу от имени администратора PostgreSQL:
CREATE USER tolktak WITH PASSWORD 'choose-a-password';
CREATE DATABASE tolktak OWNER tolktak;
TolkTak создаст таблицы при старте. Передайте серверу адрес:
- Compose: задайте
TOLKTAK_DATABASE_URLв.env, уберитеpostgresизCOMPOSE_PROFILES, затем выполнитеdocker compose up -dиdocker compose rm -sf postgres. docker run: добавьте к команде-e TOLKTAK_DATABASE_URL=....- Установка из исходников: добавьте строку в
/etc/tolktak/.envи перезапустите службу.
TOLKTAK_DATABASE_URL=postgres://tolktak:choose-a-password@db.example.com:5432/tolktak
Пароль из латинских букв и цифр не требует экранирования в URL. В остальных случаях символы @, :, /, # нужно кодировать через percent-encoding.
При удалённой базе разрешите доступ только серверу TolkTak через pg_hba.conf и файрвол. Задержка до базы влияет почти на каждый запрос. PostgreSQL на той же машине изнутри контейнера в установке через Compose доступен не по 127.0.0.1: он должен слушать адрес Docker-моста.
Перенос с SQLite
Сначала сделайте резервную копию. База назначения должна быть пустой: команда откажется писать в базу, где уже есть аккаунты. Сессии копируются вместе с остальными данными: участники остаются авторизованы.
Переезд с сервера docker run на установку через Compose описан в разделе «Переезд с docker run». Для установки из исходников:
sudo systemctl stop tolktak
sudo -u tolktak /opt/tolktak/server/.venv/bin/tolktak-server copy-db \
sqlite:///var/lib/tolktak/tolktak.db postgres://tolktak:<password>@127.0.0.1:5432/tolktak
Затем добавьте TOLKTAK_DATABASE_URL в /etc/tolktak/.env и выполните sudo systemctl start tolktak.
Не удаляйте SQLite-файл до проверки. Для возврата уберите TOLKTAK_DATABASE_URL, но учтите: новые записи, сделанные после переноса в PostgreSQL, не появятся в старом SQLite-файле. copy-db умеет переносить данные и в обратном направлении — в пустую базу.
Резервная копия
Копия состоит из дампа базы, загруженных файлов и .env. В установке через Compose, из каталога с compose.yaml:
docker compose exec -T postgres pg_dump -U tolktak -Fc tolktak > tolktak-db-$(date +%F).dump
pg_dump создаёт согласованный снимок без остановки базы. Файлы сохраняются по инструкции по обслуживанию. Для восстановления остановите TolkTak:
docker compose stop tolktak
docker compose exec -T postgres pg_restore -U tolktak -d tolktak --clean --if-exists < tolktak-db-2026-01-31.dump
docker compose start tolktak
Восстановление заменяет данные базы. Сначала проверьте его на отдельной тестовой базе.