Bạn đã từng di dời một hệ thống Supabase phức tạp, và giờ là lúc đối mặt với thử thách tiếp theo: Metabase. Nếu như Supabase lưu dữ liệu rõ ràng trong các folder bind-mount, thì Metabase mặc định lại thường giấu dữ liệu kỹ càng trong các Docker Volumes vô hình. Điều này khiến việc backup hay di chuyển sang VPS mới trở nên “khó nhằn” hơn với những người không chuyên.

Trong bài viết này, chúng ta sẽ cùng giải quyết bài toán: Làm sao để “bứng” toàn bộ dữ liệu Metabase (Biểu đồ, Dashboard, Users) từ một Docker Volume ẩn sâu trong VPS cũ, sang một VPS mới tinh, và đặc biệt là chuyển nó thành dạng Folder (Bind Mount) để dễ dàng quản lý mãi mãi về sau.

Vấn Đề: Dữ Liệu “Vô Hình” (Docker Volumes)

Khi bạn cài Metabase bằng lệnh docker run hoặc các file compose mẫu trên mạng, dữ liệu thường được lưu trong Docker Volume (Managed Volume). Bạn sẽ không thấy nó khi ls /opt hay ls /home. Nó nằm sâu trong /var/lib/docker/volumes/....

Chuyển đổi Docker Volume sang Local Folder
Chiến thuật: Chuyển từ Volume kín sang Folder mở

Điều này gây khó khăn khi bạn muốn backup (phải dùng lệnh backup volume chuyên biệt) hoặc khi muốn sửa config trực tiếp. Chiến thuật của chúng ta hôm nay là: Giải phóng dữ liệu.

Bước 1: “Thám Tử” Docker – Tìm Dữ Liệu & Mật Khẩu

Trước khi di dời, bạn phải biết dữ liệu đang nằm ở đâu và chìa khóa (mật khẩu) để mở nó là gì. Rất nhiều trường hợp di dời xong nhưng quên mật khẩu database cũ, dẫn đến Metabase mới không thể đọc được dữ liệu.

Tại VPS Cũ, hãy dùng lệnh docker inspect để soi thông tin:

Dùng Docker Inspect để tìm mật khẩu
Tìm mật khẩu Database ẩn trong biến môi trường
# 1. Tìm mật khẩu Database (Quan trọng nhất!)
docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' metabase_container_name | grep MB_DB_PASS

# 2. Xác định chính xác đường dẫn Volume
docker inspect -f '{{ json .Mounts }}' metabase_db_container_name

Hãy ghi lại chuỗi mật khẩu (ví dụ: ExAmPlE_P@ssw0rd...) và đường dẫn source volume (ví dụ: /var/lib/docker/volumes/metabase_data/_data). Chúng ta sẽ cần chúng ở bước sau.

Bước 2: Rsync – Cuộc Di Cư Của Dữ Liệu

Sau khi đã xác định được “địa chỉ nhà” của dữ liệu trên VPS cũ, chúng ta sẽ dùng rsync để bắn thẳng nó sang VPS mới. Tại VPS mới, chúng ta sẽ tạo một folder đàng hoàng để đón nhận nó.

Trên VPS Mới:

mkdir -p /opt/metabase/pgdata

Trên VPS Cũ (Chạy lệnh rsync):

# Lưu ý đường dẫn nguồn lấy từ bước 1
# IP_VPS_MOI: Thay bằng IP server mới

rsync -avzP /var/lib/docker/volumes/metabase_data/_data/ root@IP_VPS_MOI:/opt/metabase/pgdata/

Lúc này, toàn bộ dữ liệu quý giá của bạn đã nằm an toàn trong thư mục /opt/metabase/pgdata trên server mới. Nó đã trở thành các file vật lý mà bạn có thể nhìn thấy, copy và backup dễ dàng!

Bước 3: Dựng Nhà Mới (Docker Compose Clean Setup)

Thay vì tái sử dụng cấu hình cũ rắm rối, chúng ta sẽ viết một file docker-compose.yml mới, sạch đẹp và chuẩn chỉ hơn. File này sẽ kết nối Metabase Application với dữ liệu Database chúng ta vừa mang sang.

Cấu trúc Docker Compose Metabase mới
Mô hình kết nối: App -> Database -> Local Folder

Tạo file /opt/metabase/docker-compose.yml với nội dung sau (Nhớ thay PASSWORD bằng pass bạn tìm được ở Bước 1):

version: '3.9'
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_PORT: 5432
      MB_DB_USER: metabase
      MB_DB_PASS: YOUR_SECRET_PASSWORD_HERE
      MB_DB_HOST: metabase-db
    depends_on:
      - metabase-db

  metabase-db:
    image: postgres:15
    container_name: metabase-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: metabase
      POSTGRES_DB: metabase
      POSTGRES_PASSWORD: YOUR_SECRET_PASSWORD_HERE
    volumes:
      # KẾT NỐI QUAN TRỌNG NHẤT:
      # Mount folder dữ liệu vừa rsync vào trong database
      - ./pgdata:/var/lib/postgresql/data

Sau đó khởi chạy:

docker compose up -d

Bước 4: Cấu Hình Domain & SSL

Sử dụng Nginx Proxy Manager (mà bạn đã cài ở bài hướng dẫn trước) để public Metabase ra internet một cách an toàn.

  • Domain: data.your-domain.com
  • Forward IP: 172.17.0.1
  • Forward Port: 3000
  • SSL: Let’s Encrypt (Force SSL)
Metabase hoạt động thành công trên VPS mới
Hệ thống hoạt động hoàn hảo, dữ liệu dashboard còn nguyên vẹn

Kết Luận

Việc chuyển đổi từ Docker Managed Volume sang Bind Mount (Folder) không chỉ giúp bạn migrate thành công mà còn là một bước nâng cấp lớn cho việc quản trị hệ thống. Từ nay về sau, việc backup dữ liệu Metabase chỉ đơn giản là copy folder /opt/metabase/pgdata.

Chúc bạn có một hệ thống Business Intelligence mạnh mẽ và ổn định trên nhà mới!

DPS.MEDIA