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

Umami迁移

简介

最近我购买了一台新的服务器,需要把 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

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

迁移数据库

备份

docker exec umami-db-1 sh -c 'pg_dump --username=umami umami > /umami.sql' && \
docker cp umami-db-1:/umami.sql /root/ && \
docker exec umami-db-1 rm /umami.sql

删除数据库

docker exec umami-db-1 psql --username=umami --dbname=postgres -c "DROP DATABASE IF EXISTS umami;"

创建新的数据库

docker exec umami-db-1 psql --username=umami --dbname=postgres -c "CREATE DATABASE umami;"

导入备份

docker cp /root/umami.sql umami-db-1:/umami.sql && \
docker exec -i umami-db-1 psql --username=umami --dbname=umami -f /umami.sql && \
docker exec umami-db-1 rm /umami.sql

重启 Umami 实例:

docker compose down
docker compose up -d

检查

现在可以检查数据库是否迁移成功了。打开新 Umami 的 URL,尝试用原来的账号登录。如果能登录,那数据库很可能迁移成功了(账号信息是存在数据库里的)。 为了进一步确认,你可以进入仪表盘,看看所有数据是否正常显示。 如果不正常,说明数据库没有成功迁移。你可以检查导出的备份文件(里面是否包含正确的数据?),以及导入的方式(看看备份文件是否成功导入到新的 Postgres)。

免责声明
⏱ 已运行: 加载中...