Docker를 사용하여 Ubuntu 22.04에 메타베이스를 설치하는 방법
이 페이지에서
- 전제 조건
- 1단계 - 방화벽 구성\n
- 2단계 - Docker 및 Docker Compose 설치
- 3단계 - 메타베이스용 Docker Compose 파일 만들기
- 4단계 - 환경 파일 구성 및 메타베이스 시작\n
- 5단계 - Nginx 설치
- 6단계 - SSL 설치
- 7단계 - Nginx 구성
- 8단계 - 메타베이스 설치 및 액세스
- 9단계 - 백업 메타베이스
- 10단계 - 메타베이스 업그레이드
- 결론
Metabase는 Java 기반 오픈 소스 비즈니스 인텔리전스(BI) 도구입니다. 여러 데이터베이스에 연결하고 질문 빌더를 사용하여 고객 데이터를 읽을 수 있는 형식으로 시각화하고 분석할 수 있는 대규모 SQL 쿼리의 복잡성을 숨깁니다. 데이터에 대해 질문하거나 데이터를 앱에 포함하여 고객이 스스로 데이터를 탐색할 수 있도록 할 수 있습니다. 대시보드와 시각화를 생성하고 Slack 채널에 알림을 보낼 수 있습니다. MySQL, Google Analytics, MongoDB, PostgreSQL, ClickHouse, Amazon Athena, Amazon Redshift 등을 비롯한 많은 데이터베이스 플랫폼 및 데이터 소스에 연결할 수 있습니다.
Docker를 사용하여 Ubuntu 22.04 서버에 Metabase를 설치하는 방법을 배웁니다.
전제 조건
-
A server running Ubuntu 22.04 with a minimum of 2 CPU cores and 2GB of memory. You will need to upgrade the server as per requirements.
-
A non-root user with sudo privileges.
-
A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use
metabase.example.com
as the domain name. -
Metabase sends email notifications to users. We recommend you use a 3rd party Transactional mail service like Mailgun, Sendgrid, Amazon SES, or Sparkpost. The instructions in the guide will be using Amazon SES.
-
Make sure everything is updated.
$ sudo apt update
-
Install basic utility packages. Some of them may already be installed.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
1단계 - 방화벽 구성
첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(복잡하지 않은 방화벽)와 함께 제공됩니다.
방화벽이 실행 중인지 확인하십시오.
$ sudo ufw status
다음 출력을 얻어야 합니다.
Status: inactive
방화벽이 활성화 시 현재 연결을 끊지 않도록 SSH 포트를 허용합니다.
$ sudo ufw allow OpenSSH
HTTP 및 HTTPS 포트도 허용합니다.
$ sudo ufw allow http
$ sudo ufw allow https
방화벽 활성화
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
방화벽의 상태를 다시 확인하십시오.
$ sudo ufw status
비슷한 출력이 표시되어야 합니다.
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
2단계 - Docker 및 Docker Compose 설치
Ubuntu 22.04는 이전 버전의 Docker와 함께 제공됩니다. 최신 버전을 설치하려면 먼저 Docker GPG 키를 가져옵니다.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Docker 리포지토리 파일을 만듭니다.
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
시스템 저장소 목록을 업데이트하십시오.
$ sudo apt update
최신 버전의 Docker를 설치합니다.
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
실행 중인지 확인합니다.
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2023-01-05 05:55:23 UTC; 2min 16s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 2116 (dockerd)
Tasks: 8
Memory: 22.5M
CPU: 252ms
CGroup: /system.slice/docker.service
??2116 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
기본적으로 Docker에는 루트 권한이 필요합니다. sudo
명령을 실행할 때마다 sudo
를 사용하지 않으려면 docker
그룹에 사용자 이름을 추가하세요.
$ sudo usermod -aG docker $(whoami)
이 변경 사항을 활성화하려면 서버에서 로그아웃하고 동일한 사용자로 다시 로그인하거나 다음 명령을 사용해야 합니다.
$ su - ${USER}
사용자가 Docker 그룹에 추가되었는지 확인합니다.
$ groups
navjot wheel docker
3단계 - 메타베이스용 Docker Compose 파일 만들기
Metabase용 디렉터리를 만듭니다.
$ mkdir ~/metabase
편집을 위해 Docker 작성 파일을 만들고 엽니다.
$ nano docker-compose.yml
다음 코드를 붙여넣습니다.
version: '3.9'
services:
metabase:
image: metabase/metabase:latest
container_name: metabase
hostname: metabase
volumes:
- /dev/urandom:/dev/random:ro
ports:
- 3000:3000
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER_FILE: /run/secrets/db_user
MB_DB_PASS_FILE: /run/secrets/db_password
MB_DB_HOST: postgres
env_file:
- metabase.env
healthcheck:
test: curl --fail -I http://localhost:3000/api/health || exit 1
interval: 15s
retries: 5
start_period: 10s
timeout: 5s
networks:
- metanet1
depends_on:
- postgres
secrets:
- db_password
- db_user
postgres:
image: postgres:latest
container_name: postgres
hostname: postgres
environment:
POSTGRES_USER_FILE: /run/secrets/db_user
POSTGRES_DB: metabase
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'postgres']
volumes:
- ./postgresql:/var/lib/postgresql/data
networks:
- metanet1
secrets:
- db_password
- db_user
networks:
metanet1:
driver: bridge
secrets:
db_password:
file: db_password.txt
db_user:
file: db_user.txt
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
위의 Docker 작성 파일은 최신 버전의 메타베이스 Docker 이미지를 가져오고 포트 3000을 통해 앱을 노출합니다. PostgreSQL 이미지에 연결됩니다. PostgreSQL 데이터베이스 사용자 이름과 비밀번호는 각각 db_user.txt
및 db_password.txt
파일에 저장됩니다.
편집을 위해 db_user.txt
파일을 만들고 엽니다.
$ nano db_user.txt
사용자 이름을 붙여넣고 Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
편집을 위해 db_password.txt
파일을 만들고 엽니다.
$ nano db_password.txt
암호를 붙여넣고 Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
4단계 - 환경 파일 구성 및 메타베이스 시작
다음 명령을 사용하여 암호화 키를 생성합니다.
$ openssl rand -base64 32
aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=
나중에 사용할 수 있도록 키를 복사합니다.
편집을 위해 metabase.env
파일을 만들고 엽니다.
$ nano metabase.env
다음 코드를 붙여넣습니다. 생성한 비밀 키를 MB_ENCRYPTION_SECRET_KEY
변수에 붙여넣습니다. https 프로토콜을 포함하여 메타베이스 도메인을 입력합니다. 사용하는 공급자를 사용하여 SMTP 세부 정보를 입력합니다. Amazon SES를 사용하고 있습니다. MB_PASSWORD_COMPLEXITY
변수는 strong로 설정됩니다. 즉, 메타베이스 암호는 소문자 2개, 대문자 2개, 숫자 1개 및 특수 문자 1개를 포함하여 길이가 최소 8자여야 합니다.
MB_SITE_URL=https://metabase.example.com
MB_SITE_NAME="Howtoforge"
MB_EMAIL_FROM_NAME=Howtoforge
MB_EMAIL_SMTP_HOST=email-smtp.us-west-2.amazonaws.com
MB_EMAIL_SMTP_USERNAME=AWS_USERID
MB_EMAIL_SMTP_PASSWORD=AWS_KEY
MB_EMAIL_SMTP_PORT=587
MB_EMAIL_SMTP_SECURITY=starttls
MB_ENCRYPTION_SECRET_KEY=aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=
MB_ANON_TRACKING_ENABLED=false
MB_APPLICATION_NAME=Howtoforge Metabase
MB_PASSWORD_COMPLEXITY=strong
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
Docker 컨테이너를 시작합니다.
$ docker compose up -d
다음 명령을 사용하여 컨테이너의 상태를 볼 수 있습니다.
$ watch docker ps
비슷한 출력을 받게 됩니다. 두 컨테이너의 상태가 정상이 될 때까지 기다린 다음 Ctrl + C를 눌러 화면을 종료합니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15698ae2de6a metabase/metabase:latest "/app/run_metabase.sh" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp metabase
ee2d03dc3a00 postgres:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 5432/tcp postgres
5단계 - Nginx 설치
Ubuntu 22.04는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.
Nginxs 서명 키를 가져옵니다.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Nginxs 안정 버전용 리포지토리를 추가합니다.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
시스템 리포지토리를 업데이트합니다.
$ sudo apt update
Nginx를 설치합니다.
$ sudo apt install nginx
설치를 확인하십시오.
$ nginx -v
nginx version: nginx/1.22.1
Nginx 서버를 시작합니다.
$ sudo systemctl start nginx
서버의 상태를 확인하십시오.
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2023-01-05 07:21:46 UTC; 1s ago
Docs: https://nginx.org/en/docs/
Process: 13197 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 13198 (nginx)
Tasks: 3 (limit: 2237)
Memory: 2.6M
CPU: 7ms
CGroup: /system.slice/nginx.service
??13198 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??13199 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
??13200 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Jan 05 07:21:46 metabase systemd[1]: Starting nginx - high performance web server...
Jan 05 07:21:46 metabase systemd[1]: Started nginx - high performance web server.
6단계 - SSL 설치
SSL 인증서를 생성하려면 Certbot을 설치해야 합니다. Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.
Ubuntu 22.04는 기본적으로 Snapd가 설치된 상태로 제공됩니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오. Snapd 버전이 최신인지 확인하세요.
$ sudo snap install core
$ sudo snap refresh core
Certbot을 설치합니다.
$ sudo snap install --classic certbot
다음 명령을 사용하여 /usr/bin
디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령이 실행되도록 합니다.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
다음 명령을 실행하여 SSL 인증서를 생성합니다.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d metabase.example.com
위의 명령은 서버의 /etc/letsencrypt/live/metabase.example.com
디렉토리에 인증서를 다운로드합니다.
Diffie-Hellman 그룹 인증서를 생성합니다.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 테스트 실행하십시오.
$ sudo certbot renew --dry-run
오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.
7단계 - Nginx 구성
편집을 위해 /etc/nginx/nginx.conf
파일을 엽니다.
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
줄 앞에 다음 줄을 추가합니다.
server_names_hash_bucket_size 64;
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
편집을 위해 /etc/nginx/conf.d/metabase.conf
파일을 만들고 엽니다.
$ sudo nano /etc/nginx/conf.d/metabase.conf
다음 코드를 붙여넣습니다.
server {
# Redirect any http requests to https
listen 80;
listen [::]:80;
server_name metabase.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name metabase.example.com;
access_log /var/log/nginx/metabase.access.log;
error_log /var/log/nginx/metabase.error.log;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/metabase.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/metabase.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/metabase.example.com/chain.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3000;
}
}
완료되면 Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
Nginx 구성 파일 구문을 확인합니다.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginx 서버를 다시 시작합니다.
$ sudo systemctl restart nginx
8단계 - 메타베이스 설치 및 액세스
URL https://metabase.example.com
을 열어 메타베이스 설정 마법사를 시작합니다.

Lets get started 버튼을 클릭하여 다음 단계로 진행합니다. 다음 페이지에는 여러 단계가 나열됩니다. 언어를 선택하고 다음을 클릭하여 계속 진행합니다.

메타베이스 관리자 세부 정보를 입력합니다.

다음으로 탐색할 데이터를 메타베이스에 추가하라는 메시지가 표시됩니다. 데이터를 지금 추가하거나 나중에 추가할 수 있습니다.

계속 진행하려면 나중에 내 데이터를 추가하겠습니다를 클릭합니다.

메타베이스가 사용 이벤트를 익명으로 수집하도록 허용 체크 표시를 해제하고 마침 버튼을 클릭하여 프로세스를 완료합니다.

메타베이스로 이동 버튼을 클릭하여 메타베이스 대시보드를 시작합니다.

지금 Metabase를 사용할 수 있습니다.
9단계 - 백업 메타베이스
Metabase 데이터베이스를 백업하려면 다음 명령을 사용하십시오.
$ docker exec -t postgres pg_dumpall -c -U navjot > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
navjot
를 데이터베이스 사용자 이름으로 바꾸고 postgres
를 PostgreSQL용 도커 컨테이너 이름으로 바꿉니다.
데이터베이스를 복원하려면 다음 명령을 사용하십시오.
$ cat dump_*.sql | docker exec -i your-db-container psql -U navjot
10단계 - 메타베이스 업그레이드
Metabase를 업그레이드하려면 여러 단계가 필요합니다. 첫 번째 단계는 9단계의 명령을 사용하여 메타베이스 데이터베이스를 백업하는 것입니다.
그런 다음 디렉터리로 전환합니다.
$ cd /opt/metabase
Mastodon의 최신 컨테이너 이미지를 가져옵니다.
$ docker compose pull metabase/metabase:latest
원하는 경우 docker-compose.yml
을 변경합니다.
Mastodon 컨테이너를 다시 시작합니다.
$ docker compose up -d
위의 지침은 일반적인 업데이트 지침입니다. 항상 Mastodon의 GitHub 릴리스 페이지를 확인하여 모든 것이 원활하게 진행되도록 버전 간의 특정 업데이트 작업 및 명령을 찾습니다.
결론
이것으로 Ubuntu 22.04 서버에 Metabase를 설치하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.