Apache Superset Docker 설치 가이드: 엔터프라이즈 데이터 시각화 플랫폼




Apache Superset은 Airbnb에서 개발하고 Apache Foundation에서 관리하는 엔터프라이즈급 데이터 탐색 및 시각화 플랫폼입니다. 40가지 이상의 차트 타입, SQL 에디터, 대시보드 기능을 제공하며 대용량 데이터셋도 빠르게 처리합니다. ClickHouse, Druid, Presto 등 빅데이터 엔진과의 통합이 뛰어나 대규모 분석에 적합합니다.

Apache Superset 주요 특징

Superset은 엔터프라이즈 환경에 적합한 풍부한 기능을 제공합니다.

데이터 시각화

  • 40+ 차트 타입: 바, 라인, 파이, 히트맵, 지도, 선버스트 등
  • SQL Lab: 강력한 SQL IDE 내장
  • 시맨틱 레이어: 메트릭/차원 사전 정의
  • 대시보드: 드래그 앤 드롭 레이아웃
  • 필터: 크로스 필터링, 시간 범위 필터

엔터프라이즈 기능

  • RBAC (역할 기반 접근 제어)
  • SSO (OAuth, LDAP, OIDC)
  • 행 수준 보안 (Row Level Security)
  • 대시보드 임베딩
  • 알림 & 리포트 (Slack, 이메일)

데이터베이스 지원

  • ClickHouse, Druid, Presto, Trino
  • PostgreSQL, MySQL, BigQuery, Snowflake
  • Apache Spark, Hive, Impala
  • 40+ 데이터베이스 드라이버

사전 요구 사항

  • Docker 및 Docker Compose 설치
  • 최소 4GB RAM (8GB 권장)
  • 20GB 이상 저장 공간
  • Git 설치

Docker Compose로 Superset 설치

방법 1: 공식 저장소 클론 (권장)

# 저장소 클론
git clone --depth=1 https://github.com/apache/superset.git
cd superset

# 최신 안정 버전 체크아웃
git checkout tags/4.0.0

# Docker Compose로 실행
docker compose -f docker-compose-image-tag.yml up -d

방법 2: 간단한 Docker Compose

# docker-compose.yml
services:
  superset:
    image: apache/superset:latest
    container_name: superset
    restart: unless-stopped
    ports:
      - "8088:8088"
    environment:
      - SUPERSET_SECRET_KEY=${SECRET_KEY}
      - DATABASE_URL=postgresql://superset:${DB_PASSWORD}@superset-db:5432/superset
      - REDIS_URL=redis://superset-redis:6379/0
    volumes:
      - superset-home:/app/superset_home
    depends_on:
      - superset-db
      - superset-redis
    command: >
      bash -c "
      superset db upgrade &&
      superset fab create-admin --username admin --firstname Admin --lastname User --email admin@example.com --password admin &&
      superset init &&
      superset run -h 0.0.0.0 -p 8088
      "

  superset-db:
    image: postgres:16-alpine
    container_name: superset-db
    restart: unless-stopped
    environment:
      - POSTGRES_DB=superset
      - POSTGRES_USER=superset
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - superset-postgres:/var/lib/postgresql/data

  superset-redis:
    image: redis:alpine
    container_name: superset-redis
    restart: unless-stopped

volumes:
  superset-home:
  superset-postgres:

환경 변수 파일

# .env
# 필수: 강력한 시크릿 키 생성
SECRET_KEY=$(openssl rand -base64 42)
DB_PASSWORD=your_secure_password

시크릿 키 생성:

openssl rand -base64 42

설치 및 실행

# 디렉토리 생성
mkdir superset && cd superset

# docker-compose.yml 및 .env 생성

# 컨테이너 실행 (첫 실행 시 5-10분 소요)
docker compose up -d

# 로그 확인
docker compose logs -f superset

# 브라우저에서 접속
# http://localhost:8088
# 기본 로그인: admin / admin

초기 설정

1. 관리자 계정 변경

  1. http://localhost:8088 접속
  2. admin / admin 으로 로그인
  3. Settings → List Users → admin 편집
  4. 비밀번호 변경

2. 데이터베이스 연결

  1. Settings → Database Connections → + Database
  2. 데이터베이스 타입 선택 (PostgreSQL 등)
  3. 연결 정보 입력: Host: your-db-hostPort: 5432Database: your_databaseUsername: readonly_userPassword: ****
  4. Test Connection → Connect

3. 샘플 데이터 로드 (선택)

docker compose exec superset superset load_examples

프로덕션 설정

전체 스택 (Worker 포함)

# docker-compose.prod.yml
services:
  superset:
    image: apache/superset:4.0.0
    container_name: superset
    restart: always
    expose:
      - "8088"
    environment:
      - SUPERSET_SECRET_KEY=${SECRET_KEY}
      - DATABASE_URL=postgresql://superset:${DB_PASSWORD}@superset-db:5432/superset
      - REDIS_URL=redis://superset-redis:6379/0
    volumes:
      - ./superset_config.py:/app/pythonpath/superset_config.py
    depends_on:
      - superset-db
      - superset-redis
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.superset.rule=Host(`superset.yourdomain.com`)"
      - "traefik.http.routers.superset.entrypoints=websecure"
      - "traefik.http.routers.superset.tls.certresolver=letsencrypt"
    networks:
      - superset-net
      - traefik-public

  superset-worker:
    image: apache/superset:4.0.0
    container_name: superset-worker
    restart: always
    environment:
      - SUPERSET_SECRET_KEY=${SECRET_KEY}
      - DATABASE_URL=postgresql://superset:${DB_PASSWORD}@superset-db:5432/superset
      - REDIS_URL=redis://superset-redis:6379/0
    command: celery --app=superset.tasks.celery_app:app worker --pool=prefork -O fair -c 4
    depends_on:
      - superset
    networks:
      - superset-net

  superset-beat:
    image: apache/superset:4.0.0
    container_name: superset-beat
    restart: always
    environment:
      - SUPERSET_SECRET_KEY=${SECRET_KEY}
      - DATABASE_URL=postgresql://superset:${DB_PASSWORD}@superset-db:5432/superset
      - REDIS_URL=redis://superset-redis:6379/0
    command: celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid
    depends_on:
      - superset
    networks:
      - superset-net

  superset-db:
    image: postgres:16-alpine
    container_name: superset-db
    restart: always
    environment:
      - POSTGRES_DB=superset
      - POSTGRES_USER=superset
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - superset-postgres:/var/lib/postgresql/data
    networks:
      - superset-net

  superset-redis:
    image: redis:alpine
    container_name: superset-redis
    restart: always
    networks:
      - superset-net

volumes:
  superset-postgres:

networks:
  superset-net:
    driver: bridge
  traefik-public:
    external: true

superset_config.py

# superset_config.py
import os

SECRET_KEY = os.environ.get('SUPERSET_SECRET_KEY')
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')

# Redis 캐시
CACHE_CONFIG = {
    'CACHE_TYPE': 'RedisCache',
    'CACHE_DEFAULT_TIMEOUT': 300,
    'CACHE_KEY_PREFIX': 'superset_',
    'CACHE_REDIS_URL': os.environ.get('REDIS_URL'),
}

# Celery 설정
class CeleryConfig:
    broker_url = os.environ.get('REDIS_URL')
    result_backend = os.environ.get('REDIS_URL')

CELERY_CONFIG = CeleryConfig

# 보안 설정
WTF_CSRF_ENABLED = True
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = 'Lax'

# 기능 플래그
FEATURE_FLAGS = {
    'ENABLE_TEMPLATE_PROCESSING': True,
    'DASHBOARD_NATIVE_FILTERS': True,
    'DASHBOARD_CROSS_FILTERS': True,
}

관리 명령어

# 로그 확인
docker compose logs -f superset

# 관리자 계정 생성
docker compose exec superset superset fab create-admin \
  --username newadmin \
  --firstname New \
  --lastname Admin \
  --email newadmin@example.com \
  --password secure_password

# 데이터베이스 마이그레이션
docker compose exec superset superset db upgrade

# 권한 초기화
docker compose exec superset superset init

# 샘플 데이터 로드
docker compose exec superset superset load_examples

# 업데이트
docker compose pull
docker compose up -d

문제 해결

“SECRET_KEY must be set” 오류

# 시크릿 키 생성 후 .env에 추가
openssl rand -base64 42

메모리 부족

Superset은 메모리를 많이 사용합니다. 최소 4GB RAM 확보.

데이터베이스 드라이버 없음

커스텀 드라이버 설치가 필요한 경우 Dockerfile 확장:

FROM apache/superset:latest
RUN pip install clickhouse-connect

마무리

Apache Superset은 엔터프라이즈급 데이터 시각화가 필요한 조직에 적합합니다. SQL Lab으로 복잡한 쿼리를 작성하고, 40가지 이상의 차트 타입으로 데이터를 시각화할 수 있습니다. ClickHouse, Druid 등 빅데이터 엔진과의 통합이 뛰어나 대용량 데이터 분석에 최적화되어 있습니다.


참고 링크

  • 공식 사이트: https://superset.apache.org
  • GitHub: https://github.com/apache/superset
  • Docker Hub: https://hub.docker.com/r/apache/superset
  • 문서: https://superset.apache.org/docs



댓글 남기기