侧边栏壁纸
博主头像
Leuの小站 博主等级

如果呢

  • 累计撰写 27 篇文章
  • 累计创建 6 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

将 Docker 部署的 Umami 从一台服务器迁移到另一台服务器

Leu
Leu
2025-06-03 / 0 评论 / 4 点赞 / 21 阅读 / 0 字

简介

最近我从 netcup GmbH 购买了一台新的 ARM 服务器,需要把 Umami 服务器从旧服务器迁移到新服务器上。但我是用 Docker 安装的 Umami。

version: '3'
services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:umami@db:5432/umami
      DATABASE_TYPE: postgresql
      APP_SECRET: replace-me-with-a-random-string
    depends_on:
      db:
        condition: service_healthy
    restart: always
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: umami
    volumes:
      - umami-db-data:/var/lib/postgresql/data
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5
volumes:
  umami-db-data:

迁移中最困难和重要的部分就是导出 Umami 的数据。我们有几种方法可以实现:

  • 导出 Docker 卷(非常复杂)

  • 导出数据库(我的选择)

  • 复制整个路径(不推荐)

比较方法

首先,我们要知道 Umami 的数据是存储在卷(Volume)中的。因为 docker-compose.yml 指定了:

services:
  db:
    volumes:
      - umami-db-data:/var/lib/postgresql/data
volumes:
  umami-db-data:

如果我把路径挂载到容器里而不是卷,那就可以直接把路径复制到新机器上。比如:

services:
  db:
    volumes:
      - /root/umami/data:/var/lib/postgresql/data

最后,我决定只导出数据库并导入到新实例中。让我们一步一步来。

迁移数据库

首先,让我们进入旧容器的 Shell。

docker exec -it umami-db-1 /bin/sh

将数据库导出为 .sql 文件。

cd /
pg_dump --username=umami umami > umami.sql

现在数据库备份在 umami.sql 文件中,但它在容器内部。按 Ctrl + D 退出容器 Shell,然后把文件复制到宿主机。

docker cp umami-db-1:/umami.sql /root

接着,你需要把这个备份文件传输到新主机上。在新主机上 docker compose up -d 后,umami-db-1 容器就会被创建。然后你可以通过以下命令把数据库备份文件复制到容器中:

docker cp /root/umami.sql umami-db-1:/

进入新的 umami-db-1 容器:

docker exec -it umami-db-1 /bin/sh

要把备份导入 Postgres,我们需要以 umami 用户登录 psql

psql --username=umami -d postgres

psql Shell 中,我们先删除原有数据库,再创建一个空白数据库以准备导入。

DROP DATABASE umami;
CREATE DATABASE umami;

然后退出 psql Shell,运行以下命令导入备份文件:

cd /
psql --username=umami -f umami.sql umami

最后,重启 Umami 实例:

docker compose down
docker compose up -d

检查

现在可以检查数据库是否迁移成功了。打开新 Umami 的 URL,尝试用原来的账号登录。如果能登录,那数据库很可能迁移成功了(账号信息是存在数据库里的)。

为了进一步确认,你可以进入仪表盘,看看所有数据是否正常显示。

如果不正常,说明数据库没有成功迁移。你可以检查导出的备份文件(里面是否包含正确的数据?),以及导入的方式(看看备份文件是否成功导入到新的 Postgres)。

4

评论区