Конфигурация Liteset
superset_config.py
Liteset выставляет сотни настраиваемых параметров через config.py module. Переменные и объекты этого модуля — публичный интерфейс того, что вы можете настраивать. В этом Python-модуле найдёте параметры, разумные дефолты и подробные комментарии.
Чтобы конфигурировать приложение, создайте свой модуль конфигурации, в котором переопределите часть параметров. Не меняйте core-модуль — определите свой (обычно файл superset_config.py). Поместите его в PYTHONPATH либо задайте переменную окружения SUPERSET_CONFIG_PATH с полным путём:
export SUPERSET_CONFIG_PATH=/app/superset_config.py
Если используете свой Dockerfile с официальным образом Liteset как базой:
COPY --chown=superset superset_config.py /app/
ENV SUPERSET_CONFIG_PATH /app/superset_config.py
В Docker Compose-сборках конфигурация управляется по-другому — см. docker compose tips & configuration.
Минимальный пример параметров superset_config.py:
# Liteset-конкретный конфиг
ROW_LIMIT = 5000
# Конфиг Flask App Builder
# Секретный ключ для подписи session-cookie и шифрования чувствительных данных в БД.
# Обязательно меняйте под свой деплой на сильный ключ.
# Альтернативно — через ENV `SUPERSET_SECRET_KEY`.
# В продакшене обязательно — иначе сервер откажется стартовать с ошибкой в логах.
SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'
# SQLAlchemy connection string к БД метаданных
# Это БД, которая хранит метаданные Liteset (чарты, подключения, таблицы, дашборды).
# Подключения к источникам данных управляются через web UI.
SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db?check_same_thread=false'
# Flask-WTF: CSRF
WTF_CSRF_ENABLED = True
# Endpoint'ы, исключённые из CSRF
WTF_CSRF_EXEMPT_LIST = []
# CSRF-токен живёт 1 год
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365
# API-ключ Mapbox для геокарт
MAPBOX_API_KEY = ''
Обычная практика — копировать в superset_config.py только те части core superset/config.py, которые хотите изменить, вместе с комментариями.
Все параметры и значения по умолчанию из superset/config.py могут быть переопределены в вашем superset_config.py. Прочитайте этот файл, чтобы понять, что можно настраивать локально и какие там дефолты.
В Liteset superset_config.py загружается через pydantic-settings и обратно совместим с оригинальным Flask-стилем модуля Apache Superset 6.0.0. Те же UPPERCASE = value константы, что вы использовали с Flask, читаются в типизированную модель SupersetSettings.
Liteset асинхронный (Litestar/ASGI) и не запускает Flask, но портирует поверхность конфигурации 1:1:
SECRET_KEY,SQLALCHEMY_DATABASE_URI,CACHE_CONFIG,FEATURE_FLAGS,WTF_CSRF_*,AUTH_*,CELERY_CONFIG— всё сохранено.- Конфигурационные dict'ы
flask-wtf/flask-caching/flask-appbuilderчитаются собственными подсистемами Liteset (CSRF middleware, фабрика кэш-бэкенда,AsyncSecurityManager). flask-migrateне используется в runtime — Alembic вызывается напрямую через sync-драйвер psycopg2 во время миграций.
superset/config.py Apache Superset и Flask App Builder Documentation остаются полезными референсами — каждый ключ конфигурации Superset, упомянутый там, поддерживается Liteset.
Минимум, что вам нужно — поменять SECRET_KEY и SQLALCHEMY_DATABASE_URI. Подробнее — ниже.
Установка SECRET_KEY
Начальный SECRET_KEY
Liteset требует пользовательский SECRET_KEY при старте. Это требование было добавлено в 2.1.0 для безопасности. Добавьте в superset_config.py:
SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'
Сгенерировать сильный ключ: openssl rand -base64 42.
Этот ключ используется для подписи session-cookie и шифрования чувствительных данных в БД. Он должен быть сложным, уникальным и случайным.
Ротация SECRET_KEY
Чтобы поменять существующий SECRET_KEY, добавьте старый как PREVIOUS_SECRET_KEY и новый — как SECRET_KEY в superset_config.py. Узнать текущий ключ:
superset shell
from flask import current_app; print(current_app.config["SECRET_KEY"])
Сохраните superset_config.py с обоими значениями и запустите superset re-encrypt-secrets.
Настройка production БД метаданных
Liteset нужна БД для хранения определений чартов, дашбордов и многого другого.
По умолчанию настроена SQLite — самосодержащая single-file БД, простой и быстрый старт без установки. Однако для продакшена SQLite категорически не рекомендуется из-за безопасности, масштабируемости и целостности данных. Используйте только поддерживаемые движки и желательно — на отдельном хосте/контейнере.
Liteset поддерживает движки/версии:
| Движок | Поддерживаемые версии |
|---|---|
| PostgreSQL | 10.X, 11.X, 12.X, 13.X, 14.X, 15.X, 16.X |
| MySQL | 5.7, 8.X |
Драйверы и connection strings:
| БД | PyPI пакет | Connection String |
|---|---|---|
| PostgreSQL | pip install psycopg2 | postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name> |
| MySQL | pip install mysqlclient | mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name> |
Правильная настройка хранилища метаданных — за пределами этой документации. Рекомендуем managed-сервисы — Amazon RDS или Google Cloud Databases.
Установите connection string в SQLALCHEMY_DATABASE_URI в superset_config.
Запуск на ASGI HTTP-сервере
Liteset поставляется как ASGI-приложение и проектируется для запуска под Uvicorn с uvloop. Pre-forked модель Gunicorn + gevent, которую использует Apache Superset 6.0.0, не рекомендуется для Liteset — один Uvicorn-процесс заменяет N forked Flask-воркеров и использует один event loop.
Готовый production-сетап на одном хосте:
uvicorn superset.app:create_app \
--factory \
--host 0.0.0.0 \
--port 6666 \
--workers 1 \
--loop uvloop \
--http httptools \
--proxy-headers \
--forwarded-allow-ips '*' \
--log-config logging.json
Замечания:
--workers 1— намеренно. Параллелизм в Liteset обеспечивается event loop'ом, не форками. Если нужно использовать больше CPU — запустите несколько Uvicorn-инстансов за reverse proxy (или используйтеgunicorn -k uvicorn.workers.UvicornWorkerс несколькими воркерами — Liteset безопасен под этим воркер-классом).--proxy-headersвместе с--forwarded-allow-ipsнужны, когда Liteset за nginx / L7-балансировщиком; без них ломается определение схемы/хоста для редиректов и CSRF.- Dev-сервер (
uvicorn ... --reloadилиsuperset run) не для продакшена. flask-compressбольше не используется — компрессия ответа делается на reverse-proxy или через встроенный LitestarCompressionMiddleware.
Замечание про BigQuery + gevent в Apache Superset под Gunicorn не применимо к Liteset — нет monkey-patching'а Python core library на горячем пути.
HTTPS
Настройте HTTPS upstream через reverse-proxy (nginx, Traefik, Caddy) и делайте TLS-терминирование до того, как трафик дойдёт до Liteset — это рекомендуемый сетап. Локальный трафик от Celery-воркера, делающего скриншот для Alerts & Reports, может ходить по внутреннему http://-URL.
Если действительно нужно терминировать TLS внутри процесса — Uvicorn поддерживает это:
uvicorn superset.app:create_app --factory \
--ssl-certfile /etc/ssl/liteset.crt \
--ssl-keyfile /etc/ssl/liteset.key
Конфигурация за балансировщиком
Если вы за балансировщиком, вам может понадобиться передавать X-Forwarded-Proto. Для Apache:
RequestHeader set X-Forwarded-Proto "https"
Application root
Beta-фича.
Liteset поддерживает запуск под нерутовым URL-префиксом. Префикс задаётся одним из двух способов:
- Через ENV
SUPERSET_APP_ROOT. - Через Litestar app factory entrypoint, передав
superset_app_root.
Префикс должен начинаться с /.