Skip to content

Реляционная база данных

Для хранения внутренних данных SyncMaster требуется реляционная база данных .

В настоящее время SyncMaster поддерживает только PostgreSQL.

Миграции

После создания базы данных необходимо выполнить скрипт миграции. Для пустой базы данных он создает все необходимые таблицы и индексы. Для непустой базы данных он выполнит обновление структуры базы данных, используя Alembic.

ПРЕДУПРЕЖДЕНИЕ

Другие контейнеры (server, scheduler, worker) должны быть остановлены во время выполнения миграций, чтобы предотвратить вмешательство.

Требования

  • PostgreSQL 12 или выше. Рекомендуется использовать последнюю версию Postgres.

Установка и запуск

С Docker

  • Установите Docker

  • Установите docker-compose

  • Выполните следующую команду:

$ docker compose up -d db db-migrations
...

docker-compose загрузит образ PostgreSQL, создаст контейнер и том, а затем запустит контейнер. Точка входа образа создаст базу данных, если том пуст.

После этого будет запущен одноразовый контейнер со скриптом миграций.

Параметры можно установить через файл .env или раздел environment в docker-compose.yml

docker-compose.yml

services: db: image: postgres:17 restart: unless-stopped environment: POSTGRES_DB: syncmaster POSTGRES_USER: syncmaster POSTGRES_PASSWORD: changeme ports: - 5432:5432 volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: [CMD-SHELL, 'pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}'] start_period: 5s interval: 30s timeout: 5s retries: 3

db-migrations: image: mtsrus/syncmaster-server:${VERSION:-develop} restart: no build: dockerfile: docker/Dockerfile.server context: . target: prod entrypoint: [python, -m, syncmaster.db.migrations, upgrade, head] volumes: - ./config.docker.yml:/app/config.yml depends_on: db: condition: service_healthy volumes: postgres_data: rabbitmq_data:

config.yml

database: url: postgresql+asyncpg://syncmaster:changeme@localhost:5432/syncmaster

Без Docker

$ python -m venv /some/.venv  
$ source /some/.venv/activate
...
  • Установите пакет syncmaster со следующими дополнительными зависимостями:
$ pip install syncmaster[postgres]
...
$ export SYNCMASTER__DATABASE__URL=postgresql+asyncpg://syncmaster:changeme@db:5432/syncmaster
...

А затем прочитайте значения из этого файла:

$ source /some/.env
...
  • Запустите миграции:
$ python -m syncmaster.db.migrations upgrade head
...

Это тонкая оболочка вокруг alembic cli, опции и команды точно такие же.

Эта команда должна выполняться после каждого обновления до новой версии Data.SyncMaster.

Смотрите также