site-migration-toolkit/docs/ZH/BackUP/Site-Migration/walkthrough.md

58 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 站点迁移与数据同步实施总结 (Walkthrough)
我已经按照你确认的设计思路,完整实现了**全站单向数据流迁移与环境复制体系**。这一体系完全支持多环境部署,并且以声明式、参数化的方式自动改写域名(例如将 `svc.plus` 迁移至 `onwalk.net`)。
---
## 核心实现结构
### 1. 声明式配置模板 (YAML)
**文件**: [defaults/main.yml](file:///Users/shenlan/workspaces/ai-workspace-infra/playbooks/roles/site_migration/defaults/main.yml)
在这里,我为你定义了基于数据流方向的全局变量 `migration_flow`。其中 `source.domain_base``destination.domain_base` 是完全参数化的,可以通过流水线按需覆盖。配置中清晰地拆分了 `ai_core_db`、`zitadel_db`、`gitea_data` 以及 `caddy_configs` 等四大模块,后续只需增删此处的 List 即可扩展迁移内容,无需改动底层逻辑代码。
### 2. 核心执行引擎 (Ansible Role)
**角色目录**: [roles/site_migration](file:///Users/shenlan/workspaces/ai-workspace-infra/playbooks/roles/site_migration/)
**入口剧本**: [migrate_site.yml](file:///Users/shenlan/workspaces/ai-workspace-infra/playbooks/migrate_site.yml)
该角色分为两阶段执行:
- **Phase 1 (Extract)**: 登录 `migration_source` 机器,根据 YAML 配置执行并发的 `pg_dump`,并自动打包需要同步的文件路径。最终调用 Ansible 的拉取机制 (`fetch/synchronize pull`),将所有制品安全缓存到执行机 (Runner)。
- **Phase 2 (Load)**: 将制品通过推送机制 (`synchronize push`) 发送到 `migration_target` 机器上。执行阶段会自动拦截含有 `domain_rewrite: true` 的制品模块,利用流式替换 (`sed` 替换 SQL dumpfile、Caddy 配置文件内容以及重命名文件名),彻底将类似 `svc.plus` 冲刷为 `onwalk.net`。随后按需恢复并自动重启 Gitea, Caddy 及相关的 Docker 服务。
### 3. CI/CD IaC 协同流水线
**流水线**: [.github/workflows/deploy-env-migration.yaml](file:///Users/shenlan/workspaces/ai-workspace-infra/playbooks/.github/workflows/deploy-env-migration.yaml)
在 Github Actions 中,我为你搭建了一条包含了 `workflow_dispatch` 的新流水线。你可以直接在 UI 上填入 `source_domain_base`(如 `svc.plus`)和 `target_domain_base`(如 `onwalk.net`)。
流水线完整编排了:
1. **Provision**: 调用底层 Terraform 申请新服务器。
2. **Deploy Base**: 执行最初的 Bootstrap 环境搭建。
3. **Data Migration**: 生成动态的 Ansible inventory随后触发上述编写的 `migrate_site.yml` 完成旧环境数据与配置克隆。
### 4. 运行前置条件 (Vault OIDC 授权)
由于我们新建了独立的 `site-migration-toolkit` 仓库,该仓库需要通过 GitHub Actions 的 OIDC 身份认证到 Vault 获取凭证。在首次运行流水线之前,你必须使用拥有管理员权限的凭据在你的终端(或 Vault 所在的 `vault.svc.plus` 主机)执行以下操作,以授权新的流水线拉取密钥:
```bash
export VAULT_ADDR=https://vault.svc.plus
export VAULT_TOKEN="hvs.xxxxxxxxx" # 请替换为你拥有管理员权限的真实 Token
vault write auth/jwt/role/github-actions-site-migration-toolkit - <<EOF
{
"role_type": "jwt",
"user_claim": "repository",
"bound_audiences": ["vault"],
"bound_claims_type": "glob",
"bound_claims": {
"repository": "ai-workspace-infra/site-migration-toolkit",
"sub": "repo:ai-workspace-infra/site-migration-toolkit:*"
},
"token_policies": ["github-actions-xworkspace-console"],
"token_ttl": "20m",
"token_max_ttl": "30m"
}
EOF
```
> [!TIP]
> 如果你在已经申请好并构建好的机器之间进行单纯的“灾备演练”或“环境数据同步”,你可以取消勾选流水线中的 `run_provision_and_deploy`,流水线将直接执行最核心的**数据克隆阶段**,速度会非常快。