Metabase Docker 설치 가이드: 오픈소스 BI 도구 자체 호스팅




Metabase는 누구나 SQL 없이도 데이터를 시각화하고 대시보드를 만들 수 있는 오픈소스 BI(Business Intelligence) 도구입니다. 드래그 앤 드롭으로 차트를 생성하고, 복잡한 쿼리도 시각적 에디터로 작성할 수 있습니다. PostgreSQL, MySQL, MongoDB, BigQuery 등 다양한 데이터베이스를 연결하여 실시간 대시보드를 구축할 수 있습니다. GitHub Stars 40K+로 가장 인기 있는 오픈소스 BI 도구입니다.

Metabase 주요 특징

Metabase는 비개발자도 쉽게 사용할 수 있는 BI 도구입니다.

데이터 시각화

  • 노코드 쿼리 빌더: SQL 없이 클릭으로 쿼리 작성
  • 다양한 차트: 라인, 바, 파이, 지도, 퍼널 등
  • 대시보드: 여러 차트를 하나의 대시보드로 구성
  • 필터: 인터랙티브 필터로 실시간 데이터 탐색
  • 드릴다운: 데이터 상세 분석

협업 기능

  • 대시보드 공유 (링크, 임베드)
  • 알림 설정 (이메일, Slack)
  • 스케줄 리포트
  • 권한 관리

데이터베이스 지원

  • PostgreSQL, MySQL, MariaDB
  • MongoDB, BigQuery, Snowflake
  • Redshift, Presto, Druid
  • SQLite, SQL Server 등 20+ 지원

사전 요구 사항

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

Docker Compose로 Metabase 설치

기본 설치

# docker-compose.yml
services:
  metabase:
    image: metabase/metabase:latest
    container_name: metabase
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: metabase
      MB_DB_HOST: metabase-db
      MB_DB_PORT: 5432
      MB_DB_USER: metabase
      MB_DB_PASS: ${DB_PASSWORD}
    volumes:
      - metabase-data:/metabase-data
    depends_on:
      - metabase-db

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

volumes:
  metabase-data:
  metabase-postgres:

환경 변수 파일

# .env
DB_PASSWORD=your_secure_password

설치 및 실행

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

# docker-compose.yml 및 .env 생성

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

# 로그 확인 (첫 실행 시 초기화에 1-2분 소요)
docker compose logs -f metabase

# 브라우저에서 접속
# http://localhost:3000

초기 설정

  1. http://localhost:3000 접속
  2. “Let’s get started” 클릭
  3. 언어 선택 (영어/한국어 지원)
  4. 관리자 계정 생성 (이메일, 비밀번호)
  5. 데이터베이스 연결 (나중에 설정 가능)
  6. 설정 완료!

데이터베이스 연결

내부 PostgreSQL 연결 (Docker 네트워크)

Metabase와 같은 Docker 네트워크에 있는 DB 연결:

Host: your-db-container-name
Port: 5432
Database name: your_database
Username: your_user
Password: your_password

외부 데이터베이스 연결

Settings → Admin → Databases → Add database에서:

Database type: PostgreSQL
Display name: Production DB
Host: your-db-host.example.com
Port: 5432
Database name: analytics
Username: readonly_user
Password: ****

권장: 분석용 읽기 전용(Read-Only) 사용자 생성

고급 설정

프로덕션 환경 (Traefik 연동)

# docker-compose.yml
services:
  metabase:
    image: metabase/metabase:v0.50.0
    container_name: metabase
    restart: always
    expose:
      - "3000"
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: metabase
      MB_DB_HOST: metabase-db
      MB_DB_PORT: 5432
      MB_DB_USER: metabase
      MB_DB_PASS: ${DB_PASSWORD}
      MB_SITE_URL: https://metabase.yourdomain.com
      JAVA_OPTS: "-Xmx2g -Xms1g"
    depends_on:
      metabase-db:
        condition: service_healthy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.metabase.rule=Host(`metabase.yourdomain.com`)"
      - "traefik.http.routers.metabase.entrypoints=websecure"
      - "traefik.http.routers.metabase.tls.certresolver=letsencrypt"
      - "traefik.http.services.metabase.loadbalancer.server.port=3000"
    networks:
      - metabase-net
      - traefik-public

  metabase-db:
    image: postgres:16-alpine
    container_name: metabase-db
    restart: always
    environment:
      POSTGRES_DB: metabase
      POSTGRES_USER: metabase
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - metabase-postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U metabase"]
      interval: 10s
      retries: 5
    networks:
      - metabase-net

volumes:
  metabase-postgres:

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

Nginx 리버스 프록시

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

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

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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;
    }
}

관리 명령어

# 로그 확인
docker compose logs -f metabase

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

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

# 재시작
docker compose restart metabase

# 메모리 사용량 확인
docker stats metabase

주요 환경 변수

변수설명기본값
MB_DB_TYPE앱 DB 타입h2
MB_DB_HOSTDB 호스트
MB_DB_PORTDB 포트
MB_DB_DBNAMEDB 이름
MB_DB_USERDB 사용자
MB_DB_PASSDB 비밀번호
MB_SITE_URL외부 URL
JAVA_OPTSJVM 옵션

문제 해결

OutOfMemory 오류

environment:
  JAVA_OPTS: "-Xmx4g -Xms2g"

대시보드 로딩 느림

  • Metabase Admin → Settings → Caching 활성화
  • 자주 사용하는 쿼리에 캐시 설정

H2 데이터베이스 경고

프로덕션에서는 반드시 PostgreSQL 사용:

⚠️ H2 is not recommended for production use

마무리

Metabase는 비개발자도 쉽게 사용할 수 있는 강력한 BI 도구입니다. SQL을 몰라도 클릭 몇 번으로 데이터를 시각화하고 대시보드를 만들 수 있습니다. Docker로 쉽게 설치하고, 다양한 데이터베이스를 연결하여 조직 전체가 데이터 기반 의사결정을 할 수 있습니다.


참고 링크

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



댓글 남기기