Redash Docker 설치 가이드: SQL 기반 데이터 시각화




Redash는 SQL 쿼리를 작성하고 결과를 시각화하여 대시보드로 공유할 수 있는 데이터 시각화 도구입니다. 50개 이상의 데이터 소스를 지원하며, SQL을 아는 사람이라면 누구나 쉽게 대시보드를 만들 수 있습니다. 쿼리 결과를 자동으로 새로고침하고 알림을 설정할 수 있어 데이터 모니터링에도 적합합니다. GitHub Stars 26K+의 성숙한 프로젝트입니다.

Redash 주요 특징

Redash는 SQL 기반 분석에 특화된 도구입니다.

쿼리 & 시각화

  • SQL 에디터: 자동완성, 스키마 브라우저
  • 50+ 데이터 소스: PostgreSQL, MySQL, BigQuery, Snowflake 등
  • 다양한 차트: 라인, 바, 파이, 지도, 피벗 테이블
  • 대시보드: 드래그 앤 드롭 레이아웃
  • 쿼리 파라미터: 동적 필터

협업 & 공유

  • 쿼리 포크 & 공유
  • 대시보드 임베딩
  • 팀 권한 관리
  • 쿼리 스니펫 (재사용 가능한 조각)

자동화

  • 스케줄 쿼리 실행
  • 조건부 알림 (이메일, Slack, Webhook)
  • REST API

사전 요구 사항

  • Docker 및 Docker Compose 설치
  • 최소 2GB RAM (4GB 권장)
  • PostgreSQL (메타데이터 저장)
  • Redis (작업 큐)

Docker Compose로 Redash 설치

방법 1: 공식 설치 스크립트 (권장)

# 설치 스크립트 다운로드 및 실행
curl -O https://raw.githubusercontent.com/getredash/setup/master/setup.sh
chmod +x setup.sh
sudo ./setup.sh

방법 2: 수동 Docker Compose

# docker-compose.yml
services:
  server:
    image: redash/redash:latest
    container_name: redash-server
    restart: unless-stopped
    depends_on:
      - postgres
      - redis
    ports:
      - "5000:5000"
    environment:
      REDASH_LOG_LEVEL: INFO
      REDASH_SECRET_KEY: ${REDASH_SECRET_KEY}
      REDASH_COOKIE_SECRET: ${REDASH_COOKIE_SECRET}
      REDASH_DATABASE_URL: postgresql://redash:${POSTGRES_PASSWORD}@postgres/redash
      REDASH_REDIS_URL: redis://redis:6379/0
      PYTHONUNBUFFERED: 0
    command: server

  scheduler:
    image: redash/redash:latest
    container_name: redash-scheduler
    restart: unless-stopped
    depends_on:
      - server
    environment:
      REDASH_SECRET_KEY: ${REDASH_SECRET_KEY}
      REDASH_DATABASE_URL: postgresql://redash:${POSTGRES_PASSWORD}@postgres/redash
      REDASH_REDIS_URL: redis://redis:6379/0
    command: scheduler

  worker:
    image: redash/redash:latest
    container_name: redash-worker
    restart: unless-stopped
    depends_on:
      - server
    environment:
      REDASH_SECRET_KEY: ${REDASH_SECRET_KEY}
      REDASH_DATABASE_URL: postgresql://redash:${POSTGRES_PASSWORD}@postgres/redash
      REDASH_REDIS_URL: redis://redis:6379/0
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
    command: worker

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

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

volumes:
  redash-postgres:

환경 변수 파일

# .env
POSTGRES_PASSWORD=your_secure_password
REDASH_SECRET_KEY=your_random_secret_key
REDASH_COOKIE_SECRET=your_cookie_secret

시크릿 키 생성:

# REDASH_SECRET_KEY
pwgen -1s 32

# REDASH_COOKIE_SECRET
pwgen -1s 32

# 또는 openssl 사용
openssl rand -hex 16

데이터베이스 초기화 및 실행

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

# docker-compose.yml 및 .env 생성

# 데이터베이스 테이블 생성
docker compose run --rm server create_db

# 컨테이너 실행
docker compose up -d

# 로그 확인
docker compose logs -f server

# 브라우저에서 접속
# http://localhost:5000
# 관리자 계정 설정

초기 설정

1. 관리자 계정 생성

  1. http://localhost:5000 접속
  2. Admin 계정 정보 입력:
    • Name
    • Email
    • Password
    • Organization Name
  3. “Setup” 클릭

2. 데이터 소스 추가

  1. Settings → Data Sources → New Data Source
  2. 데이터베이스 타입 선택 (예: PostgreSQL)
  3. 연결 정보 입력: Host: your-db-hostPort: 5432Database: your_databaseUser: readonly_userPassword: ****
  4. “Test Connection” → “Save”

3. 첫 쿼리 작성

  1. Create → Query
  2. SQL 입력: SELECT date, COUNT(*) as visitsFROM page_viewsWHERE date >= '2024-01-01'GROUP BY dateORDER BY date
  3. “Execute” 클릭
  4. 시각화 추가: “+ New Visualization”
  5. 차트 타입 선택 및 설정

고급 설정

Traefik 연동

# docker-compose.yml
services:
  server:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.redash.rule=Host(`redash.yourdomain.com`)"
      - "traefik.http.routers.redash.entrypoints=websecure"
      - "traefik.http.routers.redash.tls.certresolver=letsencrypt"
      - "traefik.http.services.redash.loadbalancer.server.port=5000"
    networks:
      - redash-net
      - traefik-public

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

Nginx 리버스 프록시

server {
    listen 443 ssl http2;
    server_name redash.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/redash.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/redash.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:5000;
        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;
    }
}

이메일 설정

# .env 또는 환경 변수
REDASH_MAIL_SERVER=smtp.yourdomain.com
REDASH_MAIL_PORT=587
REDASH_MAIL_USE_TLS=true
REDASH_MAIL_USERNAME=your_smtp_user
REDASH_MAIL_PASSWORD=your_smtp_password
REDASH_MAIL_DEFAULT_SENDER=redash@yourdomain.com

Google OAuth 설정

# .env
REDASH_GOOGLE_CLIENT_ID=your_google_client_id
REDASH_GOOGLE_CLIENT_SECRET=your_google_client_secret

Admin → Settings → General에서:

  • Google Apps Domain: yourdomain.com (자동 사용자 생성)

쿼리 기능

파라미터 사용

SELECT *
FROM orders
WHERE created_at >= '{{ start_date }}'
  AND created_at <= '{{ end_date }}'
  AND status = '{{ status }}'

스니펫 (재사용 가능한 쿼리 조각)

-- 스니펫: date_range
AND created_at >= '{{ start_date }}' AND created_at <= '{{ end_date }}'

쿼리에서: {% snippet "date_range" %}

쿼리 결과를 다른 쿼리에서 사용

SELECT *
FROM query_123
WHERE column > 100

알림 설정

  1. 쿼리 실행 후 “Add Alert”
  2. 조건 설정:
    • Column: count
    • Condition: greater than
    • Value: 1000
  3. 알림 대상:
    • Email
    • Slack Webhook
    • Custom Webhook

관리 명령어

# 로그 확인
docker compose logs -f server

# 데이터베이스 백업
docker compose exec postgres pg_dump -U redash redash > backup_$(date +%Y%m%d).sql

# 사용자 생성 (CLI)
docker compose run --rm server create_user --org default admin@example.com admin

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

# 워커 재시작
docker compose restart worker scheduler

# 테스트 메일 발송
docker compose run --rm server send_test_mail

주요 환경 변수

변수설명필수
REDASH_SECRET_KEY암호화 키
REDASH_COOKIE_SECRET쿠키 암호화
REDASH_DATABASE_URLPostgreSQL 연결
REDASH_REDIS_URLRedis 연결
REDASH_HOST외부 URL
REDASH_MAIL_*이메일 설정
REDASH_GOOGLE_*Google OAuth

지원 데이터 소스

관계형 DB

  • PostgreSQL, MySQL, MariaDB
  • SQL Server, Oracle, SQLite

빅데이터

  • BigQuery, Snowflake, Redshift
  • Presto, Trino, Athena
  • ClickHouse, Druid

NoSQL & 기타

  • MongoDB, Elasticsearch
  • Google Sheets, CSV
  • REST API (JSON)

문제 해결

“relation does not exist” 오류

데이터베이스 초기화 필요:

docker compose run --rm server create_db

쿼리 실행 안 됨

Worker 상태 확인:

docker compose logs -f worker
docker compose restart worker

스케줄 쿼리 실행 안 됨

Scheduler 확인:

docker compose logs -f scheduler
docker compose restart scheduler

Metabase vs Redash 비교

항목RedashMetabase
사용자SQL 사용자비개발자도 가능
쿼리 방식SQL 필수노코드 + SQL
데이터 소스50+20+
알림쿼리 기반대시보드 기반
임베딩

마무리

Redash는 SQL을 아는 데이터 분석가와 엔지니어에게 최적의 도구입니다. 50개 이상의 데이터 소스를 연결하고, SQL 쿼리로 데이터를 시각화하여 팀과 공유할 수 있습니다. 스케줄 실행과 알림 기능으로 데이터 모니터링 자동화도 가능합니다.


참고 링크

  • 공식 사이트: https://redash.io
  • GitHub: https://github.com/getredash/redash
  • Docker Hub: https://hub.docker.com/r/redash/redash
  • 문서: https://redash.io/help



댓글 남기기