Apache Superset
Система бизнес-аналитики (BI), которая работает на своем сервере: дашборды из вашей SQL-базы вместо Power BI и Tableau, без платы за каждого, кто их смотрит. Развернули 6.1.0 на Fatmetal Cloud Server, замерили память и проверили подключение базы, график и дашборд.
Вердикт
- Команде в России, которая ищет замену Power BI после приостановки новых продаж Microsoft: дашборды из SQL-базы без лицензии на каждого читателя.
- Аналитику с PostgreSQL, которому нужно сохранить показатели и дать коллегам общий дашборд вместо еженедельной рассылки таблиц.
- Отделу, которому нужно сохранить привычные модели Power BI и отчеты Tableau без переделки.
- Аналитику, который работает только с разрозненными файлами и не собирается подключать SQL-базу.
BI и дашборды вместо Power BI и Tableau
Аналитик сохраняет графики, а коллеги открывают их в общем дашборде.
Если еженедельный отчет начинается с запуска SQL и пересылки таблицы, Superset собирает эти действия в одно рабочее место. Запрос становится датасетом, а его результат - графиком на дашборде.
Microsoft приостановила новые продажи в России. Superset дает команде свою BI: дашборды из вашей базы без зарубежной подписки.
В SQL Lab можно выбрать базу, посмотреть схему и выполнить запрос. Сохраненный датасет задает, какие столбцы и показатели доступны при построении визуализации.
Несколько графиков объединяются в отчет: например, общий показатель, динамика по годам и разбивка по странам. Читатель открывает страницу, вместо того чтобы собирать отдельные выгрузки.
Когда это НЕ ваш выбор
Сначала проверьте, совпадает ли Superset с вашим способом работать с данными.
Аналитика нужна человеку без SQL-базы
Superset не заменяет источник данных. Если показатели еще лежат в разрозненных файлах, сначала нужно собрать базу; готового бизнес-отчета установка сама не создаст.
Нужны русские экраны и готовые рассылки
В образе 6.1.0 нет скомпилированных переводов: переключение языка дает смесь русских меню и английских страниц. Alerts & Reports выключены, а браузера для снимков отчетов в worker нет.
Для закрытой сети есть еще одна особенность: подложки геокарт загружаются из интернета. Обычные SQL-таблицы и графики не требуют картографических тайлов, но географический отчет надо оценивать отдельно.
Нужны прежние отчеты Power BI или Tableau без переделки
Перенос моделей и отчетов - отдельная работа. В Superset нужно заново настроить источники и показатели для своих SQL-дашбордов.
Как начать с одного сервера без Kubernetes
Приложение, фоновые задачи, метабаза и кэш работают отдельно; Caddy дает HTTPS.
Apache рекомендует Kubernetes и не поддерживает Docker Compose для промышленной эксплуатации. При этом на одном сервере пять контейнеров Superset заняли в простое 1,2 ГБ памяти. Такой запуск позволяет начать с внутренних отчетов без кластера, но при отказе сервера отчеты будут недоступны.
| Компонент | Что он делает |
|---|---|
| Superset 6.1.0-dev | Принимает вход в браузере, выполняет SQL и строит визуализации. |
| Celery worker и beat | Выполняют фоновые задачи и запускают их по расписанию. |
| PostgreSQL 17 | Хранит пользователей, настройки подключений, датасеты и дашборды. |
| Redis 7 | Передает задания и хранит кэш результатов. |
| Caddy 2 | Выдает HTTPS и передает запросы приложению на локальный порт. |
PostgreSQL в этом составе - служебная база Superset. Ваша таблица продаж остается в подключенном источнике; график обращается к ней через сохраненное подключение.
Контейнер superset_init работает отдельно: применяет изменения схемы, создает администратора и роли, затем завершается. Его состояние Exited (0) после первого запуска нормально.
Используем образ с суффиксом -dev, потому что в нем есть необходимые для этого способа запуска зависимости PostgreSQL. Имя образа здесь не означает, что нужно включать отладку приложения.
Конфигурация и секреты лежат в каталоге /opt/superset. Данные PostgreSQL и рабочие файлы Superset сохраняются в томах Docker и переживают пересоздание контейнеров.
Какой сервер взять
Для начала выбирайте 4 ГБ памяти, для больших результатов SQL - 8 ГБ.
| Тариф | Когда выбирать | Цена в месяц |
|---|---|---|
| CPU2-RAM4-DISK50 | Подключить свою базу и начать работу с дашбордами. | 500 ₽ |
| CPU4-RAM8-DISK100 | Оставить больше памяти под объемные результаты запросов. | 1100 ₽ |
Замеры сделаны на CPU4-RAM8-DISK100 с Ubuntu 24.04.4. После запуска всего состава машина занимала 1,7 ГБ памяти, поэтому сам стек не требует восьми гигабайт для старта.
Память нужна и результатам SQL: Superset обрабатывает их внутри приложения. Сначала агрегируйте данные в запросе и ограничивайте выдачу, затем выбирайте сервер под объем, который действительно возвращает база.
На диске вместе с системой было занято 7,9 ГБ. Не нужно переносить весь SQL-склад на этот сервер только ради BI: источник можно подключить отдельно.
Для установки нужны доступ по SSH, чистая Ubuntu 24.04, свой домен с A-записью на IP сервера и доступные снаружи порты 80 и 443.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 450 ₽/мес
Развертывание на Fatmetal Cloud Server
Команды запускают официальный состав на чистой Ubuntu 24.04 и закрывают его HTTPS.
Подготовьте сеть и утилиты
Выполняйте команды от root: войдите по SSH и используйте sudo -i. Проверка MTU предотвращает зависание HTTPS, если путь пропускает пакеты меньшего размера, чем интерфейс.
IFACE=$(ip route show default | awk '{print $5; exit}') MTU=$(cat /sys/class/net/"$IFACE"/mtu); ping -4 -c 2 -W 2 -M do -s 1472 dns.google >/dev/null 2>&1 || MTU=1492 ip link set dev "$IFACE" mtu "$MTU" printf 'network:\n version: 2\n ethernets:\n %s:\n mtu: %s\n' "$IFACE" "$MTU" > /etc/netplan/99-superset-mtu.yaml chmod 600 /etc/netplan/99-superset-mtu.yaml apt-get update && apt-get install -y ca-certificates curl git gnupg opensslУстановите Docker и Compose
Официальный репозиторий дает Docker и плагин Compose; последний читает файлы запуска, которые будем использовать дальше.
install -m 0755 -d /etc/apt/keyrings curl -4 -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --yes --dearmor -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg printf 'deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable\n' > /etc/apt/sources.list.d/docker.list apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin printf '{"mtu":%s}\n' "$MTU" > /etc/docker/daemon.json; systemctl restart dockerЗакрепите Superset 6.1.0
Берем Compose из того же выпуска, что и образ. Прямой адрес Docker Hub обходит отказавший на стенде шлюз Scarf; порт приложения оставляем только на localhost.
git clone --depth 1 --branch 6.1.0 https://github.com/apache/superset.git /opt/superset cd /opt/superset cp docker-compose-image-tag.yml compose.yml sed -i 's|apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}|docker.io/apache/superset:6.1.0-dev|; s|8088:8088|127.0.0.1:8088:8088|' compose.ymlЗамените пароли и выключите примеры
Эти секреты создаются один раз на чистой установке. DATABASE_PASSWORD и POSTGRES_PASSWORD должны совпадать; демоданные отключаем, чтобы сначала запустить свой рабочий состав.
umask 077; DB_PASSWORD=$(openssl rand -hex 24) cat > docker/.env-local <<EOF DEV_MODE=false FLASK_DEBUG=false SUPERSET_SECRET_KEY=$(openssl rand -hex 48) DATABASE_PASSWORD=$DB_PASSWORD POSTGRES_PASSWORD=$DB_PASSWORD EXAMPLES_PASSWORD=$(openssl rand -hex 24) ADMIN_PASSWORD=$(openssl rand -hex 24) SUPERSET_LOAD_EXAMPLES=no EOF cat > docker/pythonpath_dev/superset_config_docker.py <<'EOF' ENABLE_PROXY_FIX = True SESSION_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SAMESITE = "Lax" FEATURE_FLAGS = {"ALERT_REPORTS": False} EOF chmod 644 docker/pythonpath_dev/superset_config_docker.pyДобавьте HTTPS и настройте проверку worker
Замените ваш-домен своим именем. Caddy получит сертификат автоматически, а проверка worker раз в две минуты снизит лишнюю загрузку процессора.
cat > compose.override.yml <<'EOF' services: superset-worker: healthcheck: {interval: 120s, timeout: 30s, start_period: 60s} caddy: image: caddy:2 restart: unless-stopped network_mode: host volumes: ["./Caddyfile:/etc/caddy/Caddyfile:ro", "caddy_data:/data", "caddy_config:/config"] volumes: caddy_data: caddy_config: EOF printf 'ваш-домен {\n reverse_proxy 127.0.0.1:8088\n}\n' > CaddyfileПоднимите стек и войдите
Дождитесь завершения инициализации и состояния healthy у приложения. Логин admin, пароль берет официальный init из .env-local; последняя команда покажет его для входа.
docker compose pull docker compose up -d --wait --wait-timeout 900 docker compose ps -a curl -fsS https://ваш-домен/health grep '^ADMIN_PASSWORD=' docker/.env-local
Откройте https://ваш-домен/login/ и войдите. Файл docker/.env-local содержит секреты: храните его вместе с резервной копией, а не в публичном репозитории.
Подключите базу и сохраните результат
Начните с PostgreSQL: его драйвер уже есть в выбранном образе.
Откройте Settings → Database Connections → + Database и выберите PostgreSQL. Нажмите Connect this database with a SQLAlchemy URI string instead, чтобы задать подключение одной строкой.
Адрес должен быть доступен из контейнера Superset. localhost в подключении означает сам контейнер приложения, поэтому для отдельного сервера базы указывайте его адрес.
В поле Display Name задайте имя «Отчеты PostgreSQL», в SQLAlchemy URI вставьте строку по образцу ниже со своими доступами. Нажмите Test connection, дождитесь Connection looks good! и нажмите Connect.
postgresql+psycopg2://bi_reader:пароль@сервер-базы:5432/имя-базы
Откройте SQL → SQL Lab, при первом входе нажмите Add a new tab, выберите подключение и выполните этот запрос. Он создает данные прямо в SQL: таблицу для первой проверки создавать не потребуется.
SELECT region, SUM(amount) AS total
FROM (VALUES ('north', 10), ('north', 20), ('south', 7)) AS sales(region, amount)
GROUP BY region ORDER BY region;
Результат должен содержать north = 30 и south = 7. Нажмите Create chart / Explore, выберите Table и оставьте Raw records с колонками region и total.
Нажмите Save, задайте названия графика и нового датасета, затем подтвердите сохранение. Так запрос становится сохраненным датасетом, а его результат - табличным графиком для повторного открытия.
Чтобы собрать дашборд, снова откройте Save у сохраненного графика. В Add to dashboard введите новое название, выберите его в списке и нажмите Save & go to dashboard.
Сколько занимает работающий Superset
Основной расход при старте дают образы и загрузка демонстрационных данных.
| Что измерили | Результат | Что это значит |
|---|---|---|
| Образы всего состава | 3,4 ГБ | Заложите время и место для первого скачивания. |
| Скачивание образов | 2 минуты 19 секунд | Время установки начинается до запуска контейнеров. |
| Инициализация с примерами | 11 минут 36 секунд | Из них 10 минут 26 секунд ушли на демоданные. |
| World Bank: 18 графиков | 3,4 секунды | Отчет открылся в браузере через публичный HTTPS. |
| SQL Lab: результат запроса | 3,2 секунды | Редактор и выдача работали через тот же адрес. |
Именно поэтому инструкция отключает SUPERSET_LOAD_EXAMPLES. Без загрузки примеров на миграции, администратора и роли ушла 71 секунда; затем приложению еще требуется время на старт.
При открытии трех демонстрационных дашбордов сумма памяти контейнеров выросла на 30 МБ. Добавлять восемь гигабайт только ради этих отчетов не понадобилось.
Разница между легкой страницей входа и открытым отчетом заметна: логин отдал HTTP-ответ за 60 мс, но графикам нужны запросы и отрисовка. Для пользователя важнее время готового дашборда.
Проверено на версии v6.1.0, 3 октября 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Ошибку драйвера, медленный init и сетевой таймаут исправляют в разных местах.
Причина. Шлюз apachesuperset.docker.scarf.sh дважды не отдал слой образа. Повтор обычного pull не помог.
Решение. Замените шлюз прямым Docker Hub и повторите скачивание. В инструкции эта замена уже выполнена.
sed -i 's|apachesuperset.docker.scarf.sh/apache/superset|docker.io/apache/superset|' compose.yml
docker compose pullПричина. Драйвера ClickHouse нет в базовом образе. После добавления пакета импорт также не сработает, пока bootstrap не закончит устанавливать зависимости.
Решение. Для нужного ClickHouse установите проверенный на стенде clickhouse-connect через локальные зависимости и пересоздайте приложение и worker.
printf 'clickhouse-connect>=0.13.0\n' >> docker/requirements-local.txt
docker compose up -d --force-recreate superset superset-worker
docker exec superset_app /app/.venv/bin/python -c 'import clickhouse_connect; print(clickhouse_connect.__version__)'Проверяйте импорт после завершения установки зависимостей в логе. Иначе проверка в еще запускающемся контейнере сама даст ModuleNotFoundError и скроет работающий механизм установки.
Причина. На первом входе SQL Lab еще не создал вкладку запроса, поэтому редактора и кнопки Run нет. Это не ошибка установки.
Решение. Нажмите Add a new tab, выберите базу и схему. После этого вставьте SQL и нажмите Run.
SQL → SQL Lab → Add a new tabКак сохранить настройки и обновить контейнеры
Копируйте метабазу, рабочий том и конфигурацию вместе.
Дашборды и пользователи лежат в PostgreSQL. Копия только репозитория их не сохранит; копия только базы не сохранит ключ шифрования подключений из .env-local.
Перед изменениями перейдите в /opt/superset и остановите приложение и фоновые процессы, оставив базу работать. Получатся согласованные копии; файлы ниже храните за пределами этого сервера.
cd /opt/superset
umask 077; docker compose stop superset superset-worker superset-worker-beat
docker exec superset_db pg_dump -U superset -Fc superset > /root/superset.dump
tar -czf /root/superset-config.tgz compose.yml compose.override.yml Caddyfile docker
docker run --rm --user 0 --entrypoint tar -v superset_superset_home:/data:ro -v /root:/backup apache/superset:6.1.0-dev -czf /backup/superset-home.tgz -C /data .
docker compose up -d
Для восстановления на этом же составе остановите процессы, верните конфигурацию, базу и рабочий том. Команда pg_restore заменяет сохраненные объекты метабазы; текущие изменения будут потеряны.
cd /opt/superset
docker compose stop superset superset-worker superset-worker-beat
tar -xzf /root/superset-config.tgz -C /opt/superset
docker exec -i superset_db pg_restore -U superset -d superset --clean --if-exists < /root/superset.dump
docker run --rm --user 0 --entrypoint tar -v superset_superset_home:/data -v /root:/backup:ro apache/superset:6.1.0-dev -xzf /backup/superset-home.tgz -C /data
docker compose up -d
После замены тега образа обновление требует миграции метабазы и синхронизации ролей. Сделайте резервную копию, остановите процессы и выполните команды; архив нужен для возврата прежней базы вместе с прежним образом.
cd /opt/superset
docker compose stop superset superset-worker superset-worker-beat
docker compose pull
docker compose run --rm --no-deps superset superset db upgrade
docker compose run --rm --no-deps superset superset init
docker compose up -d
docker compose ps -a; docker compose logs --tail 30 superset
После запуска войдите, повторите сохраненный SQL-запрос и откройте дашборд. Это проверит подключение и метаданные, которые один статус контейнера не показывает.
Superset, Power BI, Tableau и Preset
Для общих дашбордов сравните стоимость сервера с лицензиями на участников команды.
| Продукт | Оплата | Практический выбор |
|---|---|---|
| Apache Superset | Apache-2.0; сервер от 500 ₽/мес | Своя SQL-база, свои настройки и самостоятельное обслуживание. |
| Preset Cloud | Professional: $20 за пользователя/мес при годовой оплате; $25 помесячно | Управляемый Superset вместо собственного сервера; Starter бесплатен до пяти пользователей. |
| Power BI Pro | $14 за пользователя/мес при годовой оплате | Публикация отчетов и доступ к отчетам коллег по лицензии Pro. |
| Tableau Standard | От $15 за пользователя/мес при годовой оплате | Цена зависит от роли; для запуска требуется хотя бы одна лицензия Creator. |
Цены опубликованы у Microsoft, Tableau и Preset. Десять лицензий Power BI Pro стоят $140 в месяц при годовой оплате. В Superset оплачивается сервер, а лицензий на читателей нет.
Сервер в России оплачивается в рублях. Salesforce, владелец Tableau, сообщила о выходе из отношений с российскими клиентами в марте 2022 года. Собственная BI позволяет обойтись без иностранной подписки.
Лицензия Apache-2.0 позволяет добавлять читателей без лицензионной платы. Обновления, резервные копии и подключения обслуживаете вы; эти работы тоже входят в стоимость своей BI.
Если вместо SQL-редактора ищете более простой вход в BI, сравните с Metabase. Здесь основная ценность Superset - путь от произвольного запроса до сохраненного датасета и разных визуализаций.
FAQ
Короткие ответы для первой установки и подключения своей базы.
Нужно ли загружать примеры?
Нет. SUPERSET_LOAD_EXAMPLES=no оставляет рабочую установку без демонстрационных отчетов. Сначала подключите собственную базу через Settings → Database Connections.
Почему таблицы моей базы не появились после запуска?
Установка создает служебную метабазу. Подключение источника задается отдельно; затем в SQL Lab нужно выбрать именно его и нужную схему.
Можно ли подключить ClickHouse?
Добавьте clickhouse-connect в docker/requirements-local.txt по командам выше. В базовом образе 6.1.0-dev этого драйвера нет; одно название в списке Supported databases его не устанавливает.
Где взять пароль администратора?
В ручн