현상
2023.02.21 - [Superset] 설치 및 실행 글 이후 새로 superset을 설치하려고 한다. pip install로 설치한 이후 설치 확인을 했더니 다음과 같은 메시지가 발생했다.
참고로 설치에 사용한 명령어는 다음과 같다.
# 패키지 설치
apt update
apt install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev
# 가상 환경 생성 및 활성화
python3 -m venv superset
source superset/bin/activate
# 빌드 라이브러리 설치
pip install wheel
# superset 설치
pip install apache-superset==2.1.0 -c https://raw.githubusercontent.com/apache/superset/2.1.0/requirements/base.txt
해결 방법을 알아보자.
superset_config.py
경고 메세지에 따르면 안전하지 않은 기본 시크릿 키를 사용하고 있으니 openssl 명령어를 사용해 키를 생성하고 그 값을 superset_config.py에 설정하라고 되어 있다. 공식 문서에 따르면 애플리케이션을 구성할 수 있도록 superset_config.py를 생성하고 PYTHONPATH에 추가해야 된다고 한다.
superset이 제공하는 다양한 기능은 설정 파일을 통해 관리되고 있는데, 그 기본값은 아래의 URL에 정의되어 있다.
기본 설정 : https://github.com/apache/superset/blob/master/superset/config.py
기본적으로 비활성화되어 있는 기능이 많아 superset_config.py를 통해 재정의할 수 있다. 아무래도 버전이 올라가면서 기존에서 설치했던 2.0.1과 달리 해당 설정 구성을 필수로 요구하고 있는 것 같다.
superset_config.py 구성
superset_config.py 구성 방법은 아래와 같다.
1. $SUPERSET_HOME에 superset_config.py 생성
이 글의 경우 ~/venv/superset 아래에 설치되어 있어, 해당 경로에 작성한다.
기본값은 https://superset.apache.org/docs/installation/configuring-superset/ 을 참조한다.
vi $SUPERSET_HOME/superset_config.py
############## 기본값 ##############
# Superset specific config
ROW_LIMIT = 5000
SUPERSET_WEBSERVER_PORT = 8088
# 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.
# You can generate a strong key using `openssl rand -base64 42`.
# Alternatively you can set it with `SUPERSET_SECRET_KEY` environment variable.
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 = ''
2. SECRET_KEY 생성 및 정의
경고 메세지에서 안내받은 대로 openssl 명령을 사용해 키를 생성한다.
openssl rand -base64 42
생성한 값을 superset_config.py의 SECRET_KEY에 복사한다.
주석에 따르면 SECRET_KEY는 Flask App Builder 구성이며 세션 쿠키에 서명하고 데이터베이스를 암호화하는 데 사용된다고 한다.
+ 이 설정은 superset_config.py로도 구성할 수 있지만 SUPERET_SECRET_KEY 환경변수로도 구성할 수 있다.
export SUPERET_SECRET_KEY='GtuTNvIAuPjTe/SZENzcp4CpiDZa2zypVxxtoZZF2x7Cpwp0ZlT6FBN4'
3. 데이터베이스 연결 설정
기본 superset_config.py를 보면 superset 백엔드 데이터베이스 설정인 SQLALCHEMY_DATABASE_URI가 sqlite:////path/to/superset.db으로 설정되어 있다.
만약 별도의 데이터베이스를 사용한다면 해당 URI로 지정해준다. 이 글의 경우 아예 기본값인 sqlite://~/.superset/superset.db를 사용할 것이기 때문에 주석 처리하도록 한다.
4. PYTHONPATH에 superset_config.py를 등록
PYTHONPATH는 주로 execution directory, PYTHONPATH 환경 변수, 모듈의 기본 설치 디렉터리에 의해 정의된다고 한다. PYTHONPATH 변수는 대부분 superset 애플리케이션에 의해 설정된다고 하는데 유감스럽게도 현재 시스템 상에 설정된 변수는 없어 보였다.
echo $PYTHONPATH
echo $pythonpath
또는 아래 명령어로 PYTHONPATH를 확인할 수 있다.
python -c "import sys; print('\n'.join(sys.path))"
여기서 구성 방법을 다르게 할 수 있는데, 할 수 있는 구성을 전부 적어둔다.
4-1. superset_config.py를 PYTHONPATH로 이동
위에서 확인한 경로로 설정 파일을 옮긴다.
mv $SUPERSET_HOME/superset_config.py $PYTHONPATH
4-2. 환경변수 PYTHONPATH 설정
PYTHONPATH 변수를 $SUPERSET_HOME 경로로 설정한다.
export PYTHONPATH=$SUPERSET_HOME
4-3. 환경변수 SUPERSET_CONFIG_PATH 설정
SUPERSET_CONFIG_PATH 변수를 superset_config.py의 경로로 설정한다. 이 글에서는 superset이 설치된 경로에 superset_config.py이 있어서 $SUPERSET_HOME/superset_config.py로 설정하지만, 아예 다른 경로에 설정 파일이 위치해도 괜찮다.
export SUPERSET_CONFIG_PATH=$SUPERSET_HOME/superset_config.py
세 가지 방법 중 적절한 방법을 골라 선택하면 된다. 다만 환경변수를 명령어로 설정하면 재접속 시 설정이 초기화되므로 .bashrc 등에 등록하여 설정을 유지해주어야 한다.
구성 확인
superset_config.py가 정상적으로 인식된다면 무언가 경고 메시지와 함께 superset이 정상적으로 동작하는 모습을 볼 수 있다.
superset --help
이제 나머지 설치 과정을 진행할 수 있게 되었다.
참고 문서
https://superset.apache.org/docs/installation/configuring-superset/
https://stackoverflow.com/questions/59195394/apache-superset-config-py-on
https://tedparkdev.tistory.com/7