Cách cài đặt Metabase trên Ubuntu 22.04 bằng Docker

theanh

Administrator
Nhân viên
Metabase là một công cụ Business Intelligence (BI) mã nguồn mở dựa trên Java. Công cụ này kết nối với một số cơ sở dữ liệu và sử dụng trình xây dựng câu hỏi để ẩn đi sự phức tạp của các truy vấn SQL lớn cho phép bạn trực quan hóa dữ liệu khách hàng ở định dạng dễ đọc và phân tích dữ liệu đó. Bạn có thể đặt câu hỏi về dữ liệu của mình hoặc nhúng dữ liệu vào ứng dụng để khách hàng tự khám phá dữ liệu của họ. Công cụ này có thể tạo bảng thông tin và hình ảnh trực quan và gửi cảnh báo đến kênh Slack của bạn. Công cụ này có thể kết nối với nhiều nền tảng cơ sở dữ liệu và nguồn dữ liệu, bao gồm MySQL, Google Analytics, MongoDB, PostgreSQL, ClickHouse, Amazon Athena, Amazon Redshift và nhiều nền tảng khác nữa.

Sử dụng Docker, bạn sẽ học cách cài đặt Metabase trên máy chủ Ubuntu 22.04.

Điều kiện tiên quyết​


  • Một máy chủ chạy Ubuntu 22.04 với tối thiểu 2 lõi CPU và 2GB bộ nhớ. Bạn sẽ cần nâng cấp máy chủ theo yêu cầu.

  • Người dùng không phải root có quyền sudo.

  • Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ của bạn. Đối với mục đích của chúng tôi, chúng tôi sẽ sử dụng metabase.example.com làm tên miền.

  • Metabase gửi thông báo qua email cho người dùng. Chúng tôi khuyên bạn nên sử dụng dịch vụ thư giao dịch của bên thứ 3 như Mailgun, Sendgrid, Amazon SES hoặc Sparkpost. Hướng dẫn trong hướng dẫn sẽ sử dụng Amazon SES.

  • Đảm bảo mọi thứ đều được cập nhật.
Mã:
$ sudo apt update
[*]
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Mã:
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Ubuntu đi kèm với ufw (Uncomplicated Firewall) theo mặc định.

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Bạn sẽ nhận được kết quả sau.
Mã:
Status: inactive
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Mã:
$ sudo ufw allow OpenSSH
Cho phép cả cổng HTTP và HTTPS.
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Kích hoạt Tường lửa
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy trạng thái tương tự đầu ra.
Mã:
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)

Bước 2 - Cài đặt Docker và Docker Compose​

Ubuntu 22.04 đi kèm với phiên bản Docker cũ hơn. Để cài đặt phiên bản mới nhất, trước tiên, hãy nhập khóa GPG của Docker.
Mã:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Tạo tệp kho lưu trữ Docker.
Mã:
$ 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
Cập nhật kho lưu trữ hệ thống danh sách.
Mã:
$ sudo apt update
Cài đặt phiên bản Docker mới nhất.
Mã:
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Xác minh rằng đó là đang chạy.
Mã:
$ 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
Theo mặc định, Docker yêu cầu quyền root. Nếu bạn muốn tránh sử dụng sudo mỗi khi bạn chạy lệnh docker, hãy thêm tên người dùng của bạn vào docker nhóm.
Mã:
$ sudo usermod -aG docker $(whoami)
Bạn sẽ cần phải đăng xuất khỏi máy chủ và đăng nhập lại với cùng một người dùng để kích hoạt thay đổi này hoặc sử dụng lệnh sau lệnh.
Mã:
$ su - ${USER}
Xác nhận rằng người dùng của bạn đã được thêm vào nhóm Docker.
Mã:
$ groups
navjot wheel docker

Bước 3 - Tạo tệp Docker Compose cho Metabase​

Tạo thư mục cho Metabase.
Mã:
$ mkdir ~/metabase
Tạo và mở tệp Docker compose để chỉnh sửa.
Mã:
$ nano docker-compose.yml
Dán mã sau vào nó.
Mã:
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
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tệp Docker compose ở trên sẽ lấy phiên bản mới nhất của hình ảnh Metabase Docker và hiển thị ứng dụng qua cổng 3000. Tệp này được kết nối với hình ảnh PostgreSQL. Tên người dùng và mật khẩu cơ sở dữ liệu PostgreSQL được lưu trữ trong các tệp db_user.txtdb_password.txt tương ứng.

Tạo và mở db_user.txt tệp để chỉnh sửa.
Mã:
$ nano db_user.txt
Dán tên người dùng của bạn vào đó và lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo và mở db_password.txt tệp để chỉnh sửa.
Mã:
$ nano db_password.txt
Dán mật khẩu của bạn vào đó và lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước 4 - Cấu hình Tệp môi trường và Khởi động Metabase​

Tạo khóa mã hóa bằng lệnh sau.
Mã:
$ openssl rand -base64 32
aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=
Sao chép khóa để sử dụng sau.

Tạo và mở tệp metabase.env cho chỉnh sửa.
Mã:
$ nano metabase.env
Dán mã sau vào đó. Dán khóa bí mật bạn đã tạo vào biến MB_ENCRYPTION_SECRET_KEY. Điền tên miền Metabase của bạn bao gồm giao thức https. Điền thông tin SMTP của bạn bằng bất kỳ nhà cung cấp nào bạn sử dụng. Chúng tôi đang sử dụng Amazon SES. Biến MB_PASSWORD_COMPLEXITY được đặt thành mạnh, nghĩa là mật khẩu Metabase của bạn phải có độ dài tối thiểu là 8 ký tự, với 2 chữ thường, 2 chữ hoa, 1 chữ số và 1 ký tự đặc biệt.
Mã:
MB_SITE_URL=https://metabase.example.com
MB_SITE_NAME="Howtoforge"
[emailprotected]
[emailprotected]
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
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi chạy vùng chứa Docker.
Mã:
$ docker compose up -d
Bạn có thể theo dõi trạng thái của vùng chứa bằng lệnh sau.
Mã:
$ watch docker ps
Bạn sẽ nhận được kết quả tương tự. Chờ cho đến khi trạng thái của cả hai container trở nên ổn định, sau đó nhấn Ctrl + C để thoát khỏi màn hình.
Mã:
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

Bước 5 - Cài đặt Nginx​

Ubuntu 22.04 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.

Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ 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
Cập nhật kho lưu trữ hệ thống.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.22.1
Khởi động Nginx máy chủ.
Mã:
$ sudo systemctl start nginx
Kiểm tra trạng thái của máy chủ.
Mã:
$ 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.

Bước 6 - Cài đặt SSL​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.

Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật. Đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot chạy bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Chạy lệnh sau để tạo SSL Chứng chỉ.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d metabase.example.com
Lệnh trên sẽ tải chứng chỉ xuống thư mục /etc/letsencrypt/live/metabase.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Thực hiện chạy thử quy trình để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không.
Mã:
$ sudo certbot renew --dry-run
Nếu không thấy lỗi, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 7 - Cấu hình Nginx​

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo và mở tệp /etc/nginx/conf.d/metabase.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/metabase.conf
Dán mã sau vào đó.
Mã:
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; }
}
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh cú pháp tệp cấu hình Nginx.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Khởi động lại Nginx máy chủ.
Mã:
$ sudo systemctl restart nginx

Bước 8 - Cài đặt và truy cập Metabase​

Mở URL https://metabase.example.com để khởi chạy trình hướng dẫn thiết lập Metabase.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22619%22%20height=%22511%22%3E%3C/svg%3E


Nhấp vào nút Bắt đầu để tiến hành bước tiếp theo. Trang tiếp theo sẽ liệt kê một số bước. Chọn ngôn ngữ của bạn và nhấp vào Tiếp theo để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22664%22%20height=%22658%22%3E%3C/svg%3E


Nhập thông tin chi tiết về quản trị viên Metabase của bạn.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22684%22%20height=%22750%22%3E%3C/svg%3E


Tiếp theo, bạn sẽ được yêu cầu thêm dữ liệu vào Metabase để khám phá. Bạn có thể thêm dữ liệu ngay bây giờ hoặc thực hiện sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22732%22%20height=%22639%22%3E%3C/svg%3E


Nhấp vào Tôi sẽ thêm dữ liệu sau để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22715%22%20height=%22356%22%3E%3C/svg%3E


Bỏ chọn Cho phép Metabase thu thập các sự kiện sử dụng ẩn danh, hãy đánh dấu và nhấp vào nút Hoàn tất để hoàn tất quy trình.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22704%22%20height=%22488%22%3E%3C/svg%3E


Nhấp vào nút Đưa tôi đến Metabase để khởi chạy bảng điều khiển Metabase.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22553%22%3E%3C/svg%3E


Bạn có thể bắt đầu sử dụng Metabase ngay bây giờ.

Bước 9 - Sao lưu Metabase​

Nếu bạn muốn sao lưu cơ sở dữ liệu Metabase, hãy sử dụng lệnh sau.
Mã:
$ docker exec -t postgres pg_dumpall -c -U navjot > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
Thay thế navjot bằng tên người dùng cơ sở dữ liệu của bạn và postgres bằng tên vùng chứa docker của bạn cho PostgreSQL.

Để khôi phục cơ sở dữ liệu, hãy sử dụng lệnh sau lệnh.
Mã:
$ cat dump_*.sql | docker exec -i your-db-container psql -U navjot

Bước 10 - Nâng cấp Metabase​

Việc nâng cấp Metabase cần thực hiện một số bước. Bước đầu tiên là sao lưu cơ sở dữ liệu Metabase bằng lệnh từ bước 9.

Sau đó, chuyển sang thư mục.
Mã:
$ cd /opt/metabase
Kéo các hình ảnh chứa mới nhất cho Mastodon.
Mã:
$ docker compose pull metabase/metabase:latest
Thực hiện bất kỳ thay đổi nào trong docker-compose.yml nếu bạn muốn.

Khởi động lại các thùng chứa Mastodon.
Mã:
$ docker compose up -d
Các hướng dẫn trên là hướng dẫn cập nhật chung. Luôn kiểm tra trang phát hành GitHub của Mastodon để tìm kiếm bất kỳ tác vụ và lệnh cập nhật cụ thể nào giữa các phiên bản để đảm bảo mọi thứ diễn ra suôn sẻ.

Kết luận​

Bài hướng dẫn cài đặt Metabase trên máy chủ Ubuntu 22.04 của chúng tôi đã kết thúc. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên