Trống Đồng Đông Sơn

你是否曾经迁移过一个复杂的 Supabase 系统,现在是时候面对下一个挑战: Metabase. 。如果 Supabase 将数据明确存储在 bind-mount 文件夹中,那么 Metabase 默认情况下通常将数据小心隐藏在 Docker Volumes 隐形之中。这使得备份或迁移到新 VPS 对于非专业人士来说变得更加“棘手”。.

在本文中,我们将一起解决这个问题:如何从旧 VPS 深处隐藏的 Docker Volume 中“拔出”整个 Metabase 数据(图表、仪表板、用户),迁移到一个全新的 VPS,特别是将其转换为文件夹 (Bind Mount) 形式,以便以后更容易永久管理。.

问题: “隐形”数据 (Docker Volumes)

当你使用命令安装 Metabase 时 docker run 或者网络上的 compose 示例文件,数据通常存储在 Docker Volume (Managed Volume) 中。你不会在 ls /opt 还是 ls /home. 看到它。它深藏在 /var/lib/docker/volumes/....

将Docker Volume转换为本地文件夹
战术:从封闭 Volume 转向开放文件夹

这在你想要备份(必须使用专用的 volume 备份命令)或直接修改配置时会造成困难。我们今天的战术是: 释放数据.

步骤1: “侦探” Docker – 查找数据 & 密码

在迁移之前,你必须知道数据位于何处以及打开它的钥匙(密码)是什么。很多情况下迁移完成后忘记了旧数据库密码,导致新 Metabase 无法读取数据。.

旧 VPS, 请使用命令 docker inspect 来查看信息:

使用Docker Inspect查找密码
在环境变量中查找隐藏的数据库密码
# 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

请记录下密码字符串(例如: ExAmPlE_P@ssw0rd...) 和源 volume 路径(例如: /var/lib/docker/volumes/metabase_data/_data)。我们将在后续步骤中使用它们。.

步骤2: Rsync – 数据的大迁徙

在确定了旧VPS上数据的“家庭地址”后,我们将使用 rsync 直接将其传输到新VPS。在新VPS上,我们将创建一个合适的文件夹来接收它。.

在新VPS上:

mkdir -p /opt/metabase/pgdata

在旧VPS上(运行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/

此时,您宝贵的数据已安全地存放在文件夹中 /opt/metabase/pgdata 在新服务器上。它已成为您可以看到、复制和备份的物理文件!

步骤3: 搭建新家 (Docker Compose 干净设置)

与其重复使用旧的杂乱配置,我们将编写一个 docker-compose.yml 新文件,更干净、更标准。这个文件将连接Metabase应用程序与我们刚刚迁移的数据库数据。.

新 Docker Compose Metabase 结构
连接模型:App -> Database -> Local Folder

创建文件 /opt/metabase/docker-compose.yml 内容如下(记得将PASSWORD替换为步骤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

然后启动:

docker compose up -d

步骤4: 配置域名 & SSL

使用 Nginx Proxy Manager (您已在之前的指南中安装)以安全地将Metabase公开到互联网。.

  • 域名: data.your-domain.com
  • Forward IP: 172.17.0.1
  • Forward Port: 3000
  • SSL: Let’s Encrypt (Force SSL)
Metabase 在新 VPS 上成功运行
系统运行完美,仪表板数据完好无损

总结

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.

祝您在新家中拥有强大稳定的商业智能系统!

DPS媒体

Ý kiến bạn đọc (9)

DPS SECURITY

Đăng nhập để bình luận

Đăng nhập nhanh 1-chạm bằng Google để chia sẻ ý kiến của bạn về bài viết.