本文记录一次在 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_URLSECRET_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