Подписывайтесь на канал @apache_superset_bi, чтобы быть в курсе последних новостей про Apache Superset
Руководство «Настройка Nginx для Apache Superset 3.1.1» (инструкция, guide, tutorial)
В этом руководстве будет приведен пример того, как настроить Nginx в качестве обратного прокси-сервера для Apache Superset, гарантируя безопасный и эффективный доступ. Пример будет реализован на VPS сервере с Ubuntu 20.04.
Что будет использовано при реализации примера:
- VPS сервер с Ubuntu 20.04
- Nginx локально установленный вне докера
- Установка Apache Superset 3.1.1 с помощью docker compose утилиты (т.е. через контейнеры)
- Настройка Talisman
- Установка сертификата https для домена
- Перенаправление домена на ip VPS сервера
Обратный прокси-сервер Nginx действует как промежуточный сервер, который перехватывает клиентские запросы и перенаправляет их на соответствующий вышестоящий серверный сервер, а затем пересылает ответ от сервера обратно клиенту. Обратный прокси-сервер предоставляет различные преимущества в качестве абстрактного уровня над вышестоящими серверами.
Настройка A DNS записи домена на IP адрес VPS сервера
В настройках DNS вашего хостинга меняем A-запись для домена (или поддомена):
После некоторого времени, DNS записи обновятся и адрес домена будет перенаправляться на IP адрес VPS сервера.
Установка Docker Community Edition и Docker Compose v2
В версии Docker Compose v2 отсутствует дефис в команде docker compose
.
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update # Установка sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Проверка версий docker и docker compose:
docker --version docker compose version
Установка и настройка Apache Superset
Заходим на VPS сервер:
ssh root@5.35.84.12
Заходим в opt:
cd /opt
Качаем репозиторий:
git clone https://github.com/apache/superset.git
Переходим в директорию
cd superset
Переключаемся на ветку релиза 3.1.1
git checkout 3.1.1
Меняем версию суперсета в файле docker-compose-non-dev.yml
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:3.1.1
и убираем установку демо примеров:
SUPERSET_LOAD_EXAMPLES=no
Настройка параметров Apache Superset для https и Nginx
В файл /opt/superset/docker/pythonpath_dev/superset_config.py
вносим блок с настройками:
#======================================================== #---------------- Start: CUSTOM SETTINGS ---------------- SECRET_KEY = 'FSCEAhVDPfdAH53tifAEvSTO4IioHaaz0ia23KdzigWMVPsGi2Q6v' # 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 # Talisman settings TALISMAN_ENABLED = True TALISMAN_CONFIG = { "content_security_policy": { "default-src": ["'self'"], "img-src": ["'self'", "blob:", "data:"], "worker-src": ["'self'", "blob:"], "connect-src": [ "'self'", "https://api.mapbox.com", "https://events.mapbox.com", "https://gravatar.com/", ], "object-src": "'none'", "style-src": ["'self'", "'unsafe-inline'"], "script-src": ["'self'", "'unsafe-inline'", "'unsafe-eval'"], }, "content_security_policy_nonce_in": ["script-src"], "force_https": False, "session_cookie_secure": False } ENABLE_PROXY_FIX = True PROXY_FIX_CONFIG = {"x_for": 1, "x_proto": 1, "x_host": 1, "x_port": 1, "x_prefix": 1} #---------------- End: CUSTOM SETTINGS ------------------ #========================================================
Параметры Superset для активации фич и отключение HTML_SANITIZATION
FEATURE_FLAGS = { "ALERT_REPORTS": True, "DATAPANEL_CLOSED_BY_DEFAULT": True, "DASHBOARD_VIRTUALIZATION": True, "DASHBOARD_RBAC": True, "ENABLE_TEMPLATE_PROCESSING": True, "ESCAPE_MARKDOWN_HTML": True, "LISTVIEWS_DEFAULT_CARD_VIEW": True, "THUMBNAILS": True, "DRILL_BY": True, "DRILL_TO_DETAIL": True, "HORIZONTAL_FILTER_BAR": True, "ESTIMATE_QUERY_COST": True, "TAGGING_SYSTEM": True, "HTML_SANITIZATION": False, }
Запуск Apache Superset с помощью Docker Compose
Запустим развертывание контейнеров с помощью docker compose:
docker compose -f docker-compose-non-dev.yml up
До настройки Nginx суперсет будет доступен по адресу
http://nginx.superset-bi.ru:8088/login/
Ликбез по Docker: Различия между Docker Compose up, up -d, stop, start, down и down -v
docker compose -f docker-compose-non-dev.yml up
развёртывает сервисы Superset и создаёт из docker-образа новые контейнеры, а также сети, тома и все конфигурации, указанные в файле Docker Compose. Добавляя флаг -d, вы выполняете команду в раздельном или фоновом режиме, сохраняя возможность управления терминалом.docker compose -f docker-compose-non-dev.yml stop
останавливает все сервисы, связанные с определённой конфигурацией Docker Compose. Она НЕ удаляет ни контейнеры, ни связанные с ними внутренние тома и сети.docker compose -f docker-compose-non-dev.yml start
запускает любые остановленные сервисы в соответствии с параметрами остановленной конфигурации, указанными в том же файле Docker Compose.docker compose -f docker-compose-non-dev.yml down
останавливает все сервисы, связанные с определённой конфигурацией Docker Compose. В отличие от команды stop, она также удаляет все контейнеры и внутренние сети, связанные с этими сервисами — но НЕ указанные внутри тома. Чтобы очистить и их, надо дополнить команду down флагом -v.
Установка NGinx
sudo apt update sudo apt install nginx
Nginx настройка на http (без ssl сертификата)
Создаем конфиг файл Nginx для superset:
sudo nano /etc/nginx/sites-available/superset
Вставляем следующий код, при этом необходимо заменить домен nginx.superset-bi.ru
на ваш собственный:
server { listen 80; server_name nginx.superset-bi.ru; location / { proxy_pass http://localhost:8088; proxy_set_header Host $http_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; } }
Далее запускаем команду:
sudo ln -s /etc/nginx/sites-available/superset /etc/nginx/sites-enabled
при повторном обновлении нужно запустить другую команду с -sf
:
sudo ln -sf /etc/nginx/sites-available/superset /etc/nginx/sites-enabled
Затем запускаем проверку конфига:
sudo nginx -t
Рестартуем Nginx
sudo systemctl restart nginx
После этого Superset станет доступен на http адресе домена:
http://nginx.superset-bi.ru/
Как мы видим порт 8088 не отображается, хотя сам Superset контейнер доступен по этому порту:
Настройка Nginx и ssl Let’s Encrypt для использования https для Apache Superset
Установка сертификата SSL от Let’s Encrypt для домена Superset (https ssl сертификат)
Для этого установим пакет Certbot Nginx с помощью команды:
sudo apt install python3-certbot-nginx
Далее запускаем команду генерации ssl сертификата:
sudo certbot --nginx -d nginx.superset-bi.ru
Результат генерации ssl сертификата:
Проверить сгенерированные сертификаты и ключи:
ls /etc/letsencrypt/live/nginx.superset-bi.ru/
Изменяем настройки Nginx для https с сертификатом
После установки сертификата certbot может изменить конфиг файл самостоятельно.
Должно получиться следующая конфигурация:
server { server_name nginx.superset-bi.ru; location / { proxy_pass http://localhost:8088; proxy_set_header Host $http_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; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginx.superset-bi.ru/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginx.superset-bi.ru/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
После этого суперсет будет работать как и ожидается, без порта 8088 в url и с защищенным https трафиком:
cat /etc/letsencrypt/options-ssl-nginx.conf
Что находится в файле с настройками option-ssl-nginx.conf. Запускаем команду cat /etc/letsencrypt/options-ssl-nginx.conf
# This file contains important security parameters. If you modify this file # manually, Certbot will be unable to automatically provide future security # updates. Instead, Certbot will print and log an error message with a path to # the up-to-date file that you will need to refer to when manually updating # this file. ssl_session_cache shared:le_nginx_SSL:10m; ssl_session_timeout 1440m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";
Итоговая настройка Nginx с сертификатом ssl для https Apache Superset
server { server_name nginx.superset-bi.ru; location / { proxy_pass http://localhost:8088; proxy_set_header Host $http_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; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginx.superset-bi.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nginx.superset-bi.ru/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { if ($host = nginx.superset-bi.ru) { return 301 https://$host$request_uri; } listen 80; server_name nginx.superset-bi.ru; return 404; }
Подписывайтесь на канал @apache_superset_bi, чтобы быть в курсе последних новостей про Apache Superset
Leave a Reply