Реляционная база данных
Для хранения внутренних данных 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
-
Для установки PostgreSQL следуйте инструкции по установке.
-
Установите Python 3.11 или выше
-
Создайте виртуальное окружение
$ python -m venv /some/.venv
$ source /some/.venv/activate
...
- Установите пакет
syncmasterсо следующими дополнительными зависимостями:
$ pip install syncmaster[postgres]
...
- Настройте подключение к базе данных с помощью переменных среды, например, создав файл
.env:
$ 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.