你是否曾经迁移过一个复杂的 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. 查找数据库密码 (最重要!)
docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' metabase_container_name | grep MB_DB_PASS

# 2. 精确确定 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命令):

# 注意源路径来自步骤1
# IP_VPS_MOI: 替换为新服务器IP

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:
      # 最重要的连接:
      # 将刚刚rsync的数据文件夹挂载到数据库中
      - ./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 上成功运行
系统运行完美,仪表板数据完好无损

总结

从Docker Managed Volume转换为Bind Mount(文件夹)不仅帮助您成功迁移,还大大提升了系统管理。从今以后,备份Metabase数据只需简单复制文件夹 /opt/metabase/pgdata.

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

DPS.MEDIA