Установка и запуск бэкенда
С помощью Docker
Требования
Процесс установки
Docker загрузит образ бэкенда Horizon и Postgres, и запустит их.
Опции могут быть установлены через файл .env или раздел environment в docker-compose.yml
docker-compose.yml
services:
db:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_DB: horizon
POSTGRES_USER: horizon
POSTGRES_PASSWORD: 123UsedForTestOnly
POSTGRES_INITDB_ARGS: --encoding=UTF-8 --lc-collate=C --lc-ctype=C
ports:
- 5432:5432
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: pg_isready
start_period: 5s
interval: 30s
timeout: 5s
retries: 3
backend:
image: mtsrus/horizon-backend:${VERSION:-latest}
restart: unless-stopped
env_file: .env.docker
environment:
# перечислите здесь имена пользователей, которым должна быть назначена роль SUPERADMIN при запуске приложения
HORIZON__ENTRYPOINT__ADMIN_USERS: admin
# PROMETHEUS_MULTIPROC_DIR требуется для нескольких рабочих процессов, см.:
# https://prometheus.github.io/client_python/multiprocess/
PROMETHEUS_MULTIPROC_DIR: /tmp/prometheus-metrics
# каталог tmpfs очищается при каждом перезапуске контейнера
tmpfs:
- /tmp/prometheus-metrics:mode=1777
ports:
- 8000:8000
depends_on:
db:
condition: service_healthy
volumes:
postgres_data:
.env.docker
# См. документацию по конфигурации бэкенда
HORIZON__DATABASE__URL=postgresql+asyncpg://horizon:123UsedForTestOnly@db:5432/horizon
HORIZON__AUTH__PROVIDER=horizon.backend.providers.auth.dummy.DummyAuthProvider
HORIZON__AUTH__ACCESS_TOKEN__SECRET_KEY=234UsedForTestOnly
HORIZON__AUTH__LDAP__URL=ldap://ldap:389
HORIZON__AUTH__LDAP__BASE_DN=ou=people,dc=ldapmock,dc=local
HORIZON__AUTH__LDAP__LOOKUP__CREDENTIALS__USER=uid=adminuser1,ou=people,dc=ldapmock,dc=local
HORIZON__AUTH__LDAP__LOOKUP__CREDENTIALS__PASSWORD=password
HORIZON__SERVER__DEBUG=true
HORIZON__SERVER__LOGGING__PRESET=colored
HORIZON_TEST_SERVER_URL=http://backend:8000
HORIZON__SERVER__CORS__ENABLED=True
HORIZON__SERVER__CORS__ALLOW_ORIGINS=["http://localhost:3000"]
HORIZON__SERVER__CORS__ALLOW_CREDENTIALS=True
HORIZON__SERVER__CORS__ALLOW_METHODS=["*"]
HORIZON__SERVER__CORS__ALLOW_HEADERS=["*"]
HORIZON__SERVER__CORS__EXPOSE_HEADERS=["X-Request-ID","Location","Access-Control-Allow-Credentials"]
После запуска и готовности контейнера, откройте http://localhost:8000/docs.
Пользователям, перечисленным в переменной среды HORIZON__ENTRYPOINT__ADMIN_USERS, будет автоматически присвоена роль SUPERADMIN.
Без Docker
Требования без Docker
- Python 3.7 или выше
- Pydantic 2.x
libldap2-dev,libsasl2-dev,libkrb5-dev(для LDAP провайдера аутентификации)- Экземпляр реляционной базы данных, например Postgres
Процесс установки без Docker
Установите пакет data-horizon со следующими дополнительными зависимостями:
$ pip install data-horizon[backend,postgres,ldap]
...
Доступные дополнения:
backend- основные требования бэкенда, такие как FastAPI, SQLAlchemy и так далее.postgres- требования, необходимые для использования Postgres в качестве хранилища данных бэкенда.ldap- требования, используемые LDAP провайдером аутентификации.
ПРИМЕЧАНИЕ
Для пользователей macOS требуется дополнительный шаг. Вам необходимо установить библиотеку Python "bonsai" из исходного кода. Эта установка необходима для работы с LDAP.
Запуск базы данных
Запустите экземпляр Postgres где-нибудь и настройте URL базы данных, используя переменные среды:
HORIZON__DATABASE__URL=postgresql+asyncpg://user:password@postgres-host:5432/database_name
Вы можете использовать практически любую базу данных, поддерживаемую SQLAlchemy, но единственная, которую мы действительно тестировали, это Postgres.
См. Настройки базы данных для дополнительных опций.
Запуск миграций
Для применения миграций (изменений структуры базы данных) вам нужно выполнить следующую команду:
$ python -m horizon.backend.db.migrations upgrade head
...
Это тонкая обертка вокруг CLI alembic, опции и команды точно такие же.
ПРИМЕЧАНИЕ по запуску миграций
Эту команду следует выполнять после каждого обновления до новой версии Horizon.
Запуск бэкенда
Для запуска сервера бэкенда вам нужно выполнить следующую команду:
$ python -m horizon.backend --host 0.0.0.0 --port 8000
...
Это тонкая обертка вокруг CLI uvicorn, опции и команды точно такие же.
После запуска и готовности сервера, откройте http://localhost:8000/docs.
Добавление администраторов
Чтобы повысить определенных пользователей до роли SUPERADMIN, запустите следующий скрипт:
$ python -m horizon.backend.scripts.manage_admins add admin1 admin2
...
См. документацию Скрипты.