MAATRIX / Блог / Apache Superset на Ubuntu 24.04: пошаговая установка

Apache Superset на Ubuntu 24.04: пошаговая установка

MAATRIX

Если аналитика в компании упирается в лицензии Tableau или Power BI, а Excel уже не тянет объём данных — Apache Superset закрывает этот разрыв бесплатно и без ограничений на число пользователей. Это open-source BI-платформа от Airbnb, которая умеет строить сложные дашборды поверх практически любой SQL-базы. Ниже — рабочая установка с нуля на чистом Ubuntu 24.04: от системных зависимостей до продакшен-запуска через Gunicorn и Nginx с SSL.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Superset и когда он оправдан

Superset — это веб-приложение на Flask и React, которое подключается к вашим базам данных (PostgreSQL, MySQL, ClickHouse, Snowflake и десяткам других через SQLAlchemy) и строит визуализации без единой строчки кода со стороны аналитика. У него SQL Lab для произвольных запросов, конструктор графиков с полусотней типов чартов и дашборды с фильтрами, drill-down и алертами.

Смысл ставить его именно на свой сервер, а не пользоваться облачным SaaS-аналогом — в двух вещах: данные не покидают вашу инфраструктуру, и вы не платите за место в дашборде каждому сотруднику. Минус тоже есть: Superset не такой отполированный из коробки, как Tableau, и первую неделю уйдёт на настройку прав, ролей и подключений — это не «поставил и забыл» инструмент.

Для установки хватит одного VPS: 2 vCPU и 4 ГБ RAM держат Superset с несколькими подключёнными источниками и десятком одновременных пользователей без проблем, но под тяжёлые дашборды с большими агрегациями и SQL Lab на постоянной основе комфортнее с 8 ГБ — сама база метаданных и Redis-кэш едят немного, а вот воркеры Gunicorn под нагрузкой могут раздуваться.

Подготовка сервера

Обновляем систему и ставим системные зависимости, без которых не соберутся Python-пакеты Superset (в первую очередь cryptography и клиенты баз данных):

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential python3-dev python3-venv python3-pip \
  libssl-dev libffi-dev libsasl2-dev libldap2-dev pkg-config \
  default-libmysqlclient-dev postgresql-client redis-server nginx git

redis-server и postgresql-client можно не ставить локально, если планируете вынести кэш и базу метаданных на отдельные сервисы — так и стоит делать в проде, но для одиночного VPS проще держать всё на одной машине.

Создаём отдельного системного пользователя — Superset не должен работать от root:

sudo useradd -r -m -d /opt/superset -s /bin/bash superset
sudo -iu superset

Дальше все команды до раздела про systemd выполняем от имени superset.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка PostgreSQL и Redis под метаданные

Superset по умолчанию хранит свои метаданные (пользователей, дашборды, права, историю запросов) в SQLite — этого достаточно для тест-драйва, но в проде SQLite не переживёт параллельные запросы и первая же миграция схемы станет риском. Ставим PostgreSQL отдельно — этот шаг подробно разобран в статье про установку PostgreSQL на Ubuntu 24.04, здесь только минимум для Superset:

sudo -u postgres psql -c "CREATE USER superset WITH PASSWORD 'замените_на_свой_пароль';"
sudo -u postgres psql -c "CREATE DATABASE superset OWNER superset;"

Redis нужен под кэш чартов и очередь для асинхронных запросов (Celery). Если Redis уже стоит на сервере под другие задачи — Superset прекрасно уживётся рядом на соседней логической базе (db=1, например), только учтите нюансы, разобранные в статье про частые ошибки Redis — переполнение памяти без maxmemory-policy там встречается регулярно и с Superset тоже.

Установка Python-окружения и Superset

Виртуальное окружение — обязательно, системный Python Ubuntu 24.04 (3.12) трогать не стоит:

python3 -m venv /opt/superset/venv
source /opt/superset/venv/bin/activate
pip install --upgrade pip setuptools wheel
pip install apache-superset psycopg2-binary redis

Версию Superset намеренно не фиксирую цифрой — берите актуальный релиз с PyPI (pip index versions apache-superset покажет список), к концу августа 2026 ветка наверняка ушла вперёд, а старые примеры конфигов быстро устаревают.

Генерируем секретный ключ — он шифрует cookies сессий и API-токены, без него Superset откажется стартовать в продакшен-режиме:

python -c "import secrets; print(secrets.token_hex(42))"

Создаём конфиг /opt/superset/superset_config.py:

import os
from cachelib.redis import RedisCache

SECRET_KEY = "вставьте_сгенерированный_ключ"

SQLALCHEMY_DATABASE_URI = (
    "postgresql+psycopg2://superset:замените_на_свой_пароль@localhost:5432/superset"
)

CACHE_CONFIG = {
    "CACHE_TYPE": "RedisCache",
    "CACHE_DEFAULT_TIMEOUT": 300,
    "CACHE_KEY_PREFIX": "superset_",
    "CACHE_REDIS_HOST": "localhost",
    "CACHE_REDIS_PORT": 6379,
    "CACHE_REDIS_DB": 1,
}
DATA_CACHE_CONFIG = CACHE_CONFIG

ENABLE_PROXY_FIX = True
WTF_CSRF_ENABLED = True

ENABLE_PROXY_FIX = True критичен, если Superset будет за Nginx — без него редиректы после логина будут ломаться на http вместо https, а реальный IP клиента в логах не появится.

Указываем путь к конфигу и накатываем миграции:

export SUPERSET_CONFIG_PATH=/opt/superset/superset_config.py
superset db upgrade

Инициализация: администратор, роли, примеры

Создаём первого администратора — без него в интерфейс не зайти:

export FLASK_APP=superset
superset fab create-admin \
  --username admin \
  --firstname Admin \
  --lastname Admin \
  --email admin@example.com \
  --password замените_на_свой_пароль

Инициализируем роли по умолчанию (Admin, Alpha, Gamma, Public) и права доступа:

superset init

По желанию можно подгрузить демонстрационные датасеты и дашборды — удобно, чтобы понять логику интерфейса до подключения реальных данных:

superset load_examples

Эта команда качает несколько мегабайт тестовых CSV и создаёт с десяток учебных дашбордов — на проде её обычно пропускают, но на первом запуске она экономит часы на «а как это вообще работает».

Продакшен-запуск: Gunicorn, systemd, Nginx и SSL

Запускать superset run годится только для разработки — однопоточный dev-сервер Flask не выдержит параллельных пользователей. В проде нужен Gunicorn с несколькими воркерами:

pip install gunicorn

Юнит systemd /etc/systemd/system/superset.service (создаётся от root):

[Unit]
Description=Apache Superset
After=network.target postgresql.service redis-server.service

[Service]
Type=simple
User=superset
Group=superset
WorkingDirectory=/opt/superset
Environment="SUPERSET_CONFIG_PATH=/opt/superset/superset_config.py"
ExecStart=/opt/superset/venv/bin/gunicorn \
  --workers 4 \
  --worker-class gthread \
  --threads 4 \
  --timeout 120 \
  --bind 127.0.0.1:8088 \
  "superset.app:create_app()"
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Число воркеров считайте от (2 × ядра) + 1, но не увлекайтесь на маленьком VPS — каждый воркер Superset может держать 150-300 МБ памяти под нагрузкой, и на 4 ГБ RAM четыре воркера плюс Postgres и Redis займут почти всё свободное место.

sudo systemctl daemon-reload
sudo systemctl enable --now superset
sudo systemctl status superset

Дальше — Nginx как reverse proxy перед Gunicorn, с деталями конфига разобрано в статье про Nginx как reverse proxy. Минимальный конфиг /etc/nginx/sites-available/superset:

server {
    listen 80;
    server_name superset.example.com;

    client_max_body_size 20M;

    location / {
        proxy_pass http://127.0.0.1:8088;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 120s;
    }
}
sudo ln -s /etc/nginx/sites-available/superset /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

SSL проще всего закрыть через Certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d superset.example.com

Не забудьте открыть только 80/443 наружу и закрыть 8088 файрволом — Superset за Nginx не должен быть доступен напрямую по внутреннему порту.

Подключение источника данных и первый дашборд

Заходим на https://superset.example.com, логинимся под администратором и в разделе Settings → Database Connections добавляем базу. Для PostgreSQL строка подключения выглядит так:

postgresql+psycopg2://readonly_user:пароль@db-host:5432/analytics_db

Практический совет: подключайте Superset к базе через отдельного read-only пользователя, а не под тем же логином, что у приложения — так случайный тяжёлый запрос из SQL Lab не заблокирует продакшен-таблицы на запись. Дальше — Datasets → добавить таблицу или view, и Charts → новый чарт на этом датасете. Дашборд собирается перетаскиванием готовых чартов на холст — с фильтрами, которые применяются сразу ко всем графикам на странице.

Если у вас уже стоит ClickHouse под аналитику — там своя специфика подключения через clickhouse-connect, и есть смысл заранее прикинуть, что выгоднее для аналитических нагрузок — ClickHouse или PostgreSQL, прежде чем тащить в Superset второй тип базы.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Superset действительно бесплатный?

Да, это проект Apache Software Foundation под лицензией Apache 2.0 — без ограничений на число пользователей, дашбордов или коннекторов к базам. Платите только за сервер, на котором он крутится.

Обязательно выносить базу метаданных на отдельный сервер?

Нет, для команды до 15-20 человек PostgreSQL и Redis прекрасно живут на том же VPS, что и сам Superset. Разносить стоит, когда нагрузка на SQL Lab и число дашбордов заметно вырастут.

Чем Superset отличается от Metabase?

Metabase проще в освоении и быстрее ставится (см. установку Metabase на Ubuntu 24.04), но Superset гибче в кастомизации визуализаций и лучше масштабируется на больших дашбордах с десятками чартов — за счёт более сложной настройки.

Как обновить Superset до новой версии?

Активируете venv, pip install --upgrade apache-superset, затем обязательно superset db upgrade для миграции схемы метаданных, и рестарт systemd-юнита. Перед обновлением бэкапьте базу метаданных PostgreSQL — миграции иногда необратимы.

Хватит ли 2 ГБ RAM на старте?

Формально Superset запустится, но с одним воркером Gunicorn и без запаса под Postgres — рискованно даже для одного пользователя. 4 ГБ — комфортный минимум для реальной работы.

Нужен ли Celery-воркер отдельно от веб-процесса?

Для синхронных запросов и небольших дашбордов — нет. Celery нужен под асинхронные тяжёлые запросы в SQL Lab и периодические алерты/отчёты по расписанию — это отдельный процесс, который тоже стоит завести под systemd по аналогии с Gunicorn.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →