fix: complete Douyin release remediation

This commit is contained in:
2026-09-16 01:51:14 +08:00
parent 977e541fef
commit 9095920a5b
56 changed files with 4530 additions and 518 deletions
+42 -4
View File
@@ -1,6 +1,6 @@
# CreatorHub 部署
本文档按 `feat/python-gateway-douyin` 当前代码说明单台 Linux 主机 Docker Compose 部署及离线检查,不证明新产品功能已实现。[plan01](plan01.md) 是业务范围与验收依据;离线结果不能替代抖音/小红书最终真机验收。
本文档按当前发布提交说明单台 Linux 主机 Docker Compose 部署及离线检查,不证明新产品功能已实现。[plan01](plan01.md) 是业务范围与验收依据;离线结果不能替代抖音/小红书最终真机验收。
当前控制面仍使用单用户 HTTP Basic Auth(除 `/healthz` 外,包括静态页面),不提供 RBAC 或多租户隔离。开发目标不新增认证/访问限制,但本轮未删除现有代码或配置;以下变量仍须填写,不新增认证 profile。
@@ -86,7 +86,11 @@ curl --fail --silent --show-error \
docker compose exec -T postgres \
psql -U creatorhub -d creatorhub -tAc \
'SELECT 1 FROM schema_migration WHERE version = 14;' \
'SELECT 1 FROM schema_migration WHERE version = 32;' \
| grep -qx 1
docker compose exec -T postgres \
psql -U creatorhub -d creatorhub -tAc \
'SELECT 1 FROM schema_migration WHERE version = 33;' \
| grep -qx 1
docker compose ps
@@ -340,6 +344,32 @@ docker compose exec -T postgres pg_restore --list \
< "$BACKUP_FILE" >/dev/null
```
PostgreSQL dump 之外,发布备份必须同时包含 credentials、materials 和动态 Profile 卷;这些归档存放在部署侧受限目录,不放进仓库或共享聊天。示例(`BACKUP_DIR` 使用独立磁盘或 Secret Manager 的受控挂载目录):
```bash
set -Eeuo pipefail
umask 077
BACKUP_DIR=/srv/creatorhub-backups/$(date +%Y%m%d-%H%M%S)
mkdir -p "$BACKUP_DIR/profiles"
# PostgreSQL dump
pg_dump_file="$BACKUP_DIR/creatorhub.dump"
docker compose exec -T postgres pg_dump -U creatorhub -d creatorhub --format=custom > "$pg_dump_file"
test -s "$pg_dump_file"
# Credential and material volumes
for volume in creatorhub_credentials creatorhub_materials; do
docker run --rm -v "$volume:/data:ro" -v "$BACKUP_DIR:/backup" alpine:3.22 \
tar czf "/backup/${volume}.tar.gz" -C /data .
done
# Dynamic browser Profile volumes; absence is an explicit empty set.
for volume in $(docker volume ls -q --filter name='^creatorhub-profile-'); do
docker run --rm -v "$volume:/data:ro" -v "$BACKUP_DIR/profiles:/backup" alpine:3.22 \
tar czf "/backup/${volume}.tar.gz" -C /data .
done
find "$BACKUP_DIR" -type f -exec sha256sum {} + > "$BACKUP_DIR/SHA256SUMS"
```
`CREATORHUB_CREDENTIAL_MASTER_KEY` 不写入上述归档;部署管理员必须在独立的 Secret Manager/OS Keyring 保留一份受访问控制的密钥托管记录,并确认恢复主机能注入同一值。恢复前核对 `SHA256SUMS`、主密钥记录和备份目录权限;恢复后在隔离 Compose 项目中还原四类卷,检查账号凭据可解密、材料文件可读、Profile 可挂载,再切换服务。任何一类缺失都判定为恢复失败,不把应用健康检查当作数据恢复证据。
拉取已审核版本后,重新执行部署和验证:
```bash
@@ -379,7 +409,11 @@ docker compose up --detach --build
< "$BACKUP_FILE"
docker compose exec -T postgres \
psql -U creatorhub -d creatorhub_restore_check -v ON_ERROR_STOP=1 -tAc \
'SELECT 1 FROM schema_migration WHERE version = 12;' \
'SELECT 1 FROM schema_migration WHERE version = 32;' \
| grep -qx 1
docker compose exec -T postgres \
psql -U creatorhub -d creatorhub_restore_check -v ON_ERROR_STOP=1 -tAc \
'SELECT 1 FROM schema_migration WHERE version = 33;' \
| grep -qx 1
docker compose exec -T postgres \
dropdb --force -U creatorhub creatorhub_restore_check
@@ -426,7 +460,11 @@ docker compose up --detach --build
< "$BACKUP_FILE"
docker compose exec -T postgres \
psql -U creatorhub -d creatorhub -v ON_ERROR_STOP=1 -tAc \
'SELECT 1 FROM schema_migration WHERE version = 12;' \
'SELECT 1 FROM schema_migration WHERE version = 32;' \
| grep -qx 1
docker compose exec -T postgres \
psql -U creatorhub -d creatorhub -v ON_ERROR_STOP=1 -tAc \
'SELECT 1 FROM schema_migration WHERE version = 33;' \
| grep -qx 1
git switch --detach "$RESTORE_REV"