June 3, 2023

Установка SuperSet на Ubuntu 20.04

Установка docker и docker-compose на Ubuntu 20.04

Обновляем существующий список пакетов

sudo apt update

Далее устанавливаем пакеты, которые позволят apt использовать пакеты через HTTPS:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Далее добавим ключ GPG для официального репозитория Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Добавляем ремозиторий докер в источники apt

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Обновляем базу данных пакетов и добавим в нее пакеты Docker из недавно добавленного репозитория

sudo apt update

Далее проверим, что установка будет выполняться из репозитория Docker, а не из репозитория Ubuntu по умолчанию

apt-cache policy docker-ce

Мы должны получить следующий ответ (номер версии Docker может отличаться):

# root@apache1superset:~# apt-cache policy docker-ce
# docker-ce:
# Installed: (none)
# Candidate: 5:20.10.6~3-0~ubuntu-focal
# Version table:
# 5:20.10.6~3-0~ubuntu-focal 500
# 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
# 5:20.10.5~3-0~ubuntu-focal 500
# 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
# 5:20.10.4~3-0~ubuntu-focal 500
# 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
# 5:20.10.3~3-0~ubuntu-focal 500
# ...

Далее устанавливаем докер командой (на доп.вопрос отвечаем "yes")

sudo apt install docker-ce

Проверить статус докера можно командой (что он running/active):

sudo systemctl status docker

Загружаем текущую стабильную версию Docker Compose (2.18.1)

sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Применяем разрешения для исполняемого файла к двоичному файлу

sudo chmod +x /usr/local/bin/docker-compose

Чтобы протестировать docker-compose (установилась версия или нет), запустим команду

docker-compose --version

Установка Apache Nginx и SSL Let's Encrypt

Предварительно направляем домен на IP где устанавливается SuperSet

Обновим

apt update

Установим Nginx

apt install nginx python3-certbot-nginx

Удалим ссылку nginx по умолчанию

unlink /etc/nginx/sites-enabled/default

Создадим конфиг SuperSet

nano /etc/nginx/sites-available/superset.conf

Меняем mydomain.com на ваш домен

server {
        listen 80;
        server_name mydomain.com;
        large_client_header_buffers 4 16k;

location / {
        proxy_buffers 16 4k;
        proxy_buffer_size 2k;
        proxy_set_header HTTP_PROXY_REMOTE_USER $1;
        proxy_set_header Host $host:8088;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:8088;
        }
}

Создаем симлинк на конфигурацию

ln -s /etc/nginx/sites-available/superset.conf /etc/nginx/sites-enabled/superset.conf

Проверим правильность

sudo nginx -t

Перегружаем

sudo nginx -s reload

Проверим статус

sudo systemctl status nginx

Устанавливаем SSL по инструкции

certbot --nginx

Установка Apache Superset 2.1.0

Клонируем проект из github

git clone https://github.com/apache/superset.git

Переходим в директорию

cd superset

Переключаемся на ветку релиза 2.1.0

git checkout 2.1.0

# Чекаем статус

git status

Теперь нужно поставить версию образа для развертывания с помощью docker-compose.

Для этого в файле docker-compose-non-dev.yml (в корне проекта) изменяем строчку

x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}

меняем на

x-superset-image: &superset-image apache/superset:2.1.0

В следующий файл  добавим

superset_config.py

Из инструкции

добавим текст

# Superset specific config

ROW_LIMIT = 5000

# Flask App Builder configuration
# Your App secret key will be used for securely signing the session cookie
# and encrypting sensitive information on the database
# Make sure you are changing this key for your deployment with a strong key.
# Alternatively you can set it with `SUPERSET_SECRET_KEY` environment variable.
# You MUST set this for production environments or the server will not refuse
# to start and you will see an error in the logs accordingly.

SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI

# SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db'

# Flask-WTF flag for CSRF

WTF_CSRF_ENABLED = True

# Add endpoints that need to be exempt from CSRF protection

WTF_CSRF_EXEMPT_LIST = []

# A CSRF token that expires in 1 year

WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

# Set this API key to enable Mapbox visualizations

MAPBOX_API_KEY = ''

В строке

SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'

Заменим

YOUR_OWN_RANDOM_GENERATED_SECRET_KEY

на код из команды

openssl rand -base64 42

Получится примерно так:

SECRET_KEY = 'VLQUOGB5DhYr62dAYafrLTxMzG+Z6FNF9hwzkSfFk0yXMqeZ1tlndJeI'

Строку закомментировал, так как она уже была в основном тексте конфига файла superset_config.py

# SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db'

Сохраняем файл

Выполняем команду

docker-compose -f docker-compose-non-dev.yml pull

После выполняем команду

docker-compose -f docker-compose-non-dev.yml up

Ждем когда появится надпись что все задачи 4/4 выполнены

По команде

docker ps -a

Должно быть так

Заходим в браузер по домену

Вводим

Пользователь: admin

Пароль: admin

Логин и пароль можем поменять в приложении