TL;DR: ставим WSL2 и Docker Desktop, клонируем Superset, генерируем SECRET_KEY, поднимаем стек через docker compose и не наступаем на грабли с down -v, неприменяемым конфигом и занятым портом 8088.
Apache Superset — открытая BI-платформа от Apache: дашборды, SQL Lab, десятки коннекторов к базам. Если вы под Windows и не хотите портить систему пачкой зависимостей Python — самый спокойный путь это WSL2 + Docker. Ниже — рабочий рецепт от первого включения виртуализации до открытого в браузере логина, плюс ошибки, на которые я наткнулся сам.
1. Подготовка
Проверка виртуализации
Откройте Диспетчер задач → Производительность → ЦП. Параметр «Виртуализация» должен быть «Включено». Если выключен — перезагрузитесь, зайдите в BIOS (обычно Del или F2 при старте) и включите Intel VT-x / AMD SVM в разделе Advanced CPU Configuration.
Затем нажмите Win + R, введите optionalfeatures и убедитесь, что включены три компонента:
Hyper-V;
Подсистема Windows для Linux;
Платформа виртуальной машины.

Установка WSL
В PowerShell от администратора:
wsl --install -d Ubuntu
Если WSL уже установлен:
wsl --update
После перезагрузки Ubuntu попросит задать имя пользователя и пароль — это локальная учётка для sudo. Если автоматически в неё не перешло — закройте окно Ubuntu и откройте заново.
Установка Docker Desktop
Скачайте установщик с официального сайта . При установке отметьте Use WSL 2 based engine. После установки зайдите в Settings → Resources → WSL Integration и включите интеграцию для вашей Ubuntu.
Проверка:
docker --version docker compose version
2. Установка Superset в Ubuntu
Создайте папку в \\wsl.localhost\Ubuntu\home\<ваш_пользователь> — у меня она называется nrk_data_stack (путь удобно открывать прямо из Проводника Windows).
Открываем терминал Ubuntu:
sudo apt update && sudo apt upgrade -y cd ~/nrk_data_stack git clone https://github.com/apache/superset.git cd superset
Совет: зафиксируйтесь на конкретной версии, чтобы статья и репозиторий не разъехались со временем. Я ставил релиз 6.1.0:
В Ubuntu
git checkout tags/6.1.0
3. Создание и настройка файлов
Оба файла конфигурации лежат (и создаются) в клонированном репозитории.
Файл .env — переменные окружения, откуда приложение берёт секреты и настройки. Он находится тут: \\wsl.localhost\Ubuntu\home\<ваш_пользователь>\nrk_data_stack\superset\docker
Файл superset_config_docker.py — Python-конфиг, который монтируется внутрь контейнера и задаёт поведение приложения. Создаётся тут: ...\superset\docker\pythonpath_dev
Генерируем в Ubuntu секретный ключ:
openssl rand -base64 42
Добавляем в конец файла .env:
SUPERSET_SECRET_KEY=<ваш ключ> SCARF_ANALYTICS=false
Той же командой можно сгенерировать ключ для GLOBAL_ASYNC_QUERIES_JWT_SECRET — он нужен для подписи JWT-токенов асинхронных запросов. Если эту функцию не используете — ключ не генерировать и соответствующие параметры в superset_config_docker.py добавлять не нужно.
Итоговый рабочий superset_config_docker.py я выложил здесь: https://github.com/NorkaOleg/nrk_data_stack/tree/main/Superset
После изменений перезапускаем стек:
docker compose -f docker/docker-compose-non-dev.yml up -d
Первый запуск занимает 5–10 минут: скачиваются образы, применяются миграции, создаётся админ по умолчанию (admin/admin).
4. Типичные ошибки и решения
«Refusing to start due to insecure SECRET_KEY» — ключ не задан или остался дефолтным. Сгенерируйте openssl rand -base64 42 и пропишите его и в .env (SUPERSET_SECRET_KEY), и в superset_config_docker.py (SECRET_KEY). Если ключ менялся уже после первого запуска — добавьте в конфиг строку PREVIOUS_SECRET_KEY = 'старый_ключ', иначе зашифрованные ранее данные не расшифруются.
Изменения в конфиге не применяются — файлы из docker/ подхватываются при старте контейнера, а не на лету. Нужен down + up. Если правили образ (например, добавляли драйвер БД в requirements-local.txt) — нужен rebuild:
docker compose -f docker/docker-compose-non-dev.yml build --no-cache superset_app
Порт 8088 занят — либо остановите процесс, либо смените порт в .env (SUPERSET_PORT / маппинг в docker-compose).
docker compose down -v удалил все данные — флаг -v сносит тома, включая метастазу Superset и ваши дашборды. Если данные нужны — просто down без -v.
Конфиг «не виден» — проверьте, что файл лежит именно в docker/superset_config_docker.py и имя не содержит опечаток: контейнер монтирует его в /app/superset_config_docker.py.
Полезная привычка при разборе проблем — смотреть логи инициализации:
docker logs superset_init
Не стесняйтесь просить помощи у нейроассистентов: я скидывал Алисе (AI-помощник Яндекса) свои логи и скриншоты — и в итоге пришли к решению, Superset запустился. Часто свежий взгляд на стектрейс экономит час гугления.
5. Проверка работы
Смотрим статус сервисов:
docker compose -f docker/docker-compose-non-dev.yml ps
Все сервисы (superset_app, postgres, redis) должны быть в состоянии Up. Если что-то не так — логи приложения:
docker compose -f docker/docker-compose-non-dev.yml logs superset_app | tail -30
Открываем в браузере http://localhost:8088, логин admin, пароль admin (в non-dev сборке создаётся автоматически — смените его в настройках профиля). Если вместо страницы «connection refused» — просто ждём ещё пару минут: миграции при первом старте идут до 10 минут.
После перезагрузки ПК
Docker Desktop должен стартовать сам (проверьте автозапуск в настройках), а дальше:
bashcd ~/nrk_data_stack/superset docker compose -f docker/docker-compose-non-dev.yml up -d
Остановка всех контейнеров:
docker compose -f docker/docker-compose-non-dev.yml down


Ссылка на ВК видео с установкой Superset https://vkvideo.ru/video-242717920_456239017
