쓸만한 오픈소스 Metabase(BI)
728x90

데이터 가공 및 시각화 기능을 제공하는 오픈소스 BI 솔루션.

 

환경

- CentOS 8

 

설치 및 DB 마이그레이션 방법

Linux 에서 docker를 사용하여 설치 하는 방법이 있다.

리눅스에 docker 설치는 여기

docker 에 metabase 설치는 여기

 

docker compose 로 metabase 및 mysql 설치 방법

version: "3"

services:
  db:
    image: mysql:8 # MySQL 5.7.7 이상만 가능
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=<password>
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    ports:
     - 8080:3306
    networks:
      - "backend"
      
  metabase-test:
    image: "metabase/metabase:v0.46.4"
    container_name: "metabase-test1"
    environment:
      - JAVA_OPTS=-Xmx1024m   # default 는 무한이 늘어나므로 터질 수 있다.
      - MB_DB_FILE=metabase.db
      - MB_DB_CONNECTION_URI=mysql://db:3306/metabase?user=<user>&password=<password>&allowPublicKeyRetrieval=true
    depends_on:
      - db
    links:
      - db
    networks:
      - "backend"
    ports: 
      - "9000:3000"
    restart: "on-failure"

networks:
  backend:

docker 설치 되어있다면 docker-compose.yml 이 존재하는 폴더에서 

docker compose up -d

하면 끝난다.

 

 

 

 

DB migration

MySQL 을 사용하는 이유

metabase 의 기본 application DB (metabase 안에서 설정한 모든 데이터를 저장하는 DB) 는 H2 이다.

H2인 경우 공식 홈페이지에서 CPU가 많이 올라간다는 포럼을 검색해보면 이렇게 나온다.

테스트 환경에서는 H2 를 써도 좋은데, 운영하는 곳에 배포할 때는 MySQL 또는 Postgre 로 변경하는게 좋다.

 

이미 H2를 사용하고 있는 유저이고 docker 로 설치한 경우에는 H2 -> RDB 로 migration 작업이 필요하다.

 

이 경우에는 docker container 에 올라가 있는 metabase 를 삭제해야하는데 삭제하기 전에 metabase.db 폴더를 백업 본을 떠서 컨테이너 밖으로 가져와야한다.

 

먼저 docker metabase container 에 접속

# metabase 의 컨테이너 이름 또는 id 확인
docker ps -a   

docker exec -it <container_name> /bin/sh

#metabase.db 폴더 찾기(제 경우에는 / 경로에 있었습니다.)

# 압축
tar -cvf metabaseDB.tar metabase.db

#container 나가기
exit

#docker container 내에 있는 metabaseDB.tar 파일 컨테이너 밖으로 옮기기
docker cp <container_name>:/metabaseDB.tar <docker 설치된 host의 경로>

#tar 파일 압축 해제
tar -xzvf metabaseDB.tar

 

 

docker에 띄운 metabase container 는 중지 시킨 후 metabase 홈페이지에서 현재 docker 에 올라간 metabase 이미지와 동일한 버전의 jar 파일을 받는다.

 

이렇게 하는 이유는 준비해놓은 MySQL 에다가 백업본을 밀어 넣은 뒤 docker container를 다시 생성해서 띄울 때 MySQL 옵션을 넣어서 하기 위해서다.

 

jar 파일을 다운로드 완료 했으면 이제 jar 파일을 실행 시키면 된다.

 

java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://<host>:<port>/<dbName>?user=<username>&password=<password>" -jar metabase.jar load-from-h2 metabase.db

h2 DB 는 metabase.db.mv.db 확장자로 파일이 저장되는데 이 때 명령어에 적을 때 metabase.db.mv.db 로 적는게 아니라 metabase.db 라고 적어야 한다.(중요)

 

이렇게 해서 성공하면 DB 마이그레이션 작업은 끝났다.

 

 

 

 

728x90