Dokploy 中升级 Plausible 的完整流程

Table of contents

本文记录一次在 Dokploy 中将 Plausible CE 从 v2.1.5 升级到 v3.2.1 的实际流程。
环境:Ubuntu 24.04、Docker、Dokploy、Traefik、PostgreSQL 16、ClickHouse。


1. 升级前确认

1docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}' \
2  | grep -Ei 'dokploy|plausible|clickhouse|postgres'

当前版本:

1Plausible:  ghcr.io/plausible/community-edition:v2.1.5
2ClickHouse: clickhouse/clickhouse-server:24.3.3.102-alpine
3PostgreSQL: postgres:16-alpine

先确认磁盘空间和数据卷:

1df -h
2docker system df
3
4docker volume ls --format '{{.Name}}'   | grep '^plausible-plausible-dr7zjz_'

应看到:

1plausible-plausible-dr7zjz_db-data
2plausible-plausible-dr7zjz_event-data
3plausible-plausible-dr7zjz_event-logs

2. 备份配置

在 Dokploy 中备份:

1Plausible
2→ General
3→ Provider
4→ Raw
5→ Compose File

保存:

  • 当前 Compose YAML
  • Environment 环境变量
  • BASE_URL
  • SECRET_KEY_BASE
  • 其他邮件、数据库相关变量

不要把密钥公开。


3. 创建服务器备份目录

1BACKUP_DIR="/root/plausible-backup-$(date +%Y%m%d-%H%M%S)"
2
3mkdir -p "$BACKUP_DIR"
4chmod 700 "$BACKUP_DIR"
5
6echo "$BACKUP_DIR" | tee /root/plausible-last-backup-dir.txt

4. 备份旧 ClickHouse 配置

1docker cp   plausible-plausible-dr7zjz-plausible_events_db-1:/etc/clickhouse-server/config.d/logging.xml   "$BACKUP_DIR/clickhouse-config.xml"
2
3docker cp   plausible-plausible-dr7zjz-plausible_events_db-1:/etc/clickhouse-server/users.d/logging.xml   "$BACKUP_DIR/clickhouse-user-config.xml"

5. 导出 PostgreSQL

1docker exec   plausible-plausible-dr7zjz-plausible_db-1   pg_dumpall -U postgres   > "$BACKUP_DIR/postgres-all.sql"

检查:

1test -s "$BACKUP_DIR/postgres-all.sql"   && echo "PostgreSQL 导出成功"   || echo "PostgreSQL 导出失败"

6. 停止 Plausible

在 Dokploy 中点击:

1Stop

检查是否停止:

1docker ps --format '{{.Names}}'   | grep '^plausible-plausible-dr7zjz-'   || echo "Plausible 已全部停止"

7. 备份三个 Docker Volume

PostgreSQL

1BACKUP_DIR=$(cat /root/plausible-last-backup-dir.txt)
2
3docker run --rm   -v plausible-plausible-dr7zjz_db-data:/source:ro   -v "$BACKUP_DIR:/backup"   alpine   sh -c 'tar -C /source -czf /backup/db-data.tar.gz .'

ClickHouse 统计数据

1docker run --rm   -v plausible-plausible-dr7zjz_event-data:/source:ro   -v "$BACKUP_DIR:/backup"   alpine   sh -c 'tar -C /source -czf /backup/event-data.tar.gz .'

ClickHouse 日志

1docker run --rm   -v plausible-plausible-dr7zjz_event-logs:/source:ro   -v "$BACKUP_DIR:/backup"   alpine   sh -c 'tar -C /source -czf /backup/event-logs.tar.gz .'

8. 验证备份

1ls -lh "$BACKUP_DIR"

应包含:

1clickhouse-config.xml
2clickhouse-user-config.xml
3postgres-all.sql
4db-data.tar.gz
5event-data.tar.gz
6event-logs.tar.gz

验证压缩包:

1for file in   "$BACKUP_DIR/db-data.tar.gz"   "$BACKUP_DIR/event-data.tar.gz"   "$BACKUP_DIR/event-logs.tar.gz"
2do
3  gzip -t "$file" && echo "OK: $file"
4done

生成校验值:

1sha256sum "$BACKUP_DIR"/* > "$BACKUP_DIR/SHA256SUMS"

打完整备份包:

1cd /root
2
3tar -czf plausible-backup-complete.tar.gz   "$(basename "$BACKUP_DIR")"

下载到本地 Windows:

1scp root@服务器IP:/root/plausible-backup-complete.tar.gz .

9. 准备新版 ClickHouse 配置

先找到原配置目录:

1EVENT_CONTAINER="plausible-plausible-dr7zjz-plausible_events_db-1"
2
3OLD_CONFIG_SOURCE=$(docker inspect "$EVENT_CONTAINER"   --format '{{range .Mounts}}{{if eq .Destination "/etc/clickhouse-server/config.d/logging.xml"}}{{.Source}}{{end}}{{end}}')
4
5CLICKHOUSE_FILES_DIR=$(dirname "$OLD_CONFIG_SOURCE")
6
7echo "$CLICKHOUSE_FILES_DIR"

下载 4 个新版配置文件:

1for file in   logs.xml   ipv4-only.xml   low-resources.xml   default-profile-low-resources-overrides.xml
2do
3  curl -fsSL     "https://raw.githubusercontent.com/plausible/community-edition/v3.2.1/clickhouse/$file"     -o "$CLICKHOUSE_FILES_DIR/$file"
4done

检查:

1ls -lh "$CLICKHOUSE_FILES_DIR"

10. 更新 Compose YAML

在 Dokploy 中将 Compose 替换为:

 1services:
 2  plausible_db:
 3    image: postgres:16-alpine
 4    restart: always
 5    volumes:
 6      - db-data:/var/lib/postgresql/data
 7    environment:
 8      - POSTGRES_PASSWORD=postgres
 9    healthcheck:
10      test: ["CMD-SHELL", "pg_isready -U postgres"]
11      start_period: 1m
12
13  plausible_events_db:
14    image: clickhouse/clickhouse-server:24.12-alpine
15    restart: always
16    volumes:
17      - event-data:/var/lib/clickhouse
18      - event-logs:/var/log/clickhouse-server
19      - ../files/clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro
20      - ../files/clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro
21      - ../files/clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro
22      - ../files/clickhouse/default-profile-low-resources-overrides.xml:/etc/clickhouse-server/users.d/default-profile-low-resources-overrides.xml:ro
23    ulimits:
24      nofile:
25        soft: 262144
26        hard: 262144
27    environment:
28      - CLICKHOUSE_SKIP_USER_SETUP=1
29    healthcheck:
30      test: ["CMD-SHELL", "wget --no-verbose --tries=1 -O - http://127.0.0.1:8123/ping || exit 1"]
31      start_period: 1m
32
33  plausible:
34    image: ghcr.io/plausible/community-edition:v3.2.1
35    restart: always
36    command: sh -c "/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
37    depends_on:
38      plausible_db:
39        condition: service_healthy
40      plausible_events_db:
41        condition: service_healthy
42    volumes:
43      - plausible-data:/var/lib/plausible
44    ulimits:
45      nofile:
46        soft: 65535
47        hard: 65535
48    environment:
49      - TMPDIR=/var/lib/plausible/tmp
50    env_file:
51      - .env
52
53volumes:
54  db-data:
55    driver: local
56  event-data:
57    driver: local
58  event-logs:
59    driver: local
60  plausible-data:
61    driver: local

先点击:

1Preview Compose

确认无报错后,再点击:

1Deploy

不要重复点击 Deploy,也不要反复 Reload Traefik。


11. 检查升级结果

查看容器:

1docker ps -a --format 'table {{.Names}}	{{.Image}}	{{.Status}}'   | grep '^plausible-plausible-dr7zjz-'

正常结果:

1Plausible    v3.2.1          Up
2ClickHouse   24.12-alpine    healthy
3PostgreSQL   16-alpine       healthy

检查重启次数:

1for container in   plausible-plausible-dr7zjz-plausible-1   plausible-plausible-dr7zjz-plausible_db-1   plausible-plausible-dr7zjz-plausible_events_db-1
2do
3  docker inspect "$container"     --format '{{.Name}} status={{.State.Status}} restart={{.RestartCount}}'
4done

正常应为:

1status=running restart=0

12. 检查日志

PostgreSQL

1docker logs --tail 100   plausible-plausible-dr7zjz-plausible_db-1

关键正常信息:

1database system is ready to accept connections

ClickHouse

1docker logs --tail 150   plausible-plausible-dr7zjz-plausible_events_db-1

关键正常信息:

1Database directory appears to contain a database
2Skipping initialization

Plausible

1docker logs --tail 200   plausible-plausible-dr7zjz-plausible-1

关键正常信息:

1All data are up to date now!
2Migration completed!

13. 检查 Volume

1docker volume ls --format '{{.Name}}'   | grep '^plausible-plausible-dr7zjz_'

升级后应有 4 个:

1plausible-plausible-dr7zjz_db-data
2plausible-plausible-dr7zjz_event-data
3plausible-plausible-dr7zjz_event-logs
4plausible-plausible-dr7zjz_plausible-data

检查挂载:

1docker inspect plausible-plausible-dr7zjz-plausible-1   --format '{{range .Mounts}}{{println .Type .Name .Source "->" .Destination}}{{end}}'

应看到:

1plausible-data -> /var/lib/plausible

14. 浏览器业务验证

升级完成后检查:

  • 原账号可以登录
  • 原来的站点仍存在
  • 历史数据正常
  • 最近 7 天、30 天数据正常
  • 来源、页面、国家等维度正常
  • Realtime 可以看到新访问
  • 统计请求返回 2xx

15. 清理建议

升级后不要立即清理。

至少稳定运行 7 天后,再考虑删除:

1旧 Plausible 镜像
2旧 ClickHouse 镜像
3服务器上的临时备份

不要删除:

1db-data
2event-data
3event-logs
4plausible-data
5Environment
6当前 Compose
7本地完整备份

禁止执行:

1docker volume prune
2docker system prune --volumes
3docker compose down -v

最终结果

本次升级完成状态:

1Plausible:   v3.2.1
2ClickHouse:  24.12-alpine
3PostgreSQL:  16-alpine
4容器状态:    running
5数据库状态:  healthy
6重启次数:    0
7数据迁移:    successful
8旧数据卷:    retained