site-migration-toolkit/docs/BackUP/Site-Migration/implementation_plan.md

74 lines
3.8 KiB
Markdown
Raw 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.

# 全站单向数据流迁移与环境复制方案 (Implementation Plan)
该方案旨在构建一套**声明式、单向数据流Source -> Target、域名支持参数化**的自动化环境迁移与恢复体系。基于你提供的需求,整体设计分为三个核心部分。
## Proposed Changes
### 1. 声明式迁移配置文件模板 (Declarative YAML Spec)
`playbooks/roles/site_migration/defaults/main.yml` 中定义全局单向数据流配置:
```yaml
# 迁移数据流方向声明
migration_flow:
source:
host: "install.svc.plus"
domain_base: "svc.plus"
ssh_user: "root"
target:
host: "{{ target_env_ip }}" # IAC 流水线动态传入
domain_base: "{{ target_domain }}" # IAC 流水线动态传入 (例如 contabo-xyz.svc.plus)
ssh_user: "root"
# 定义需要迁移的数据模块
modules:
- name: "ai_core_db"
type: "postgresql"
port: 15432
databases: ["account", "litellm", "openclaw", "qmd", "rag", "notification", "scheduler", "audit", "artifact", "vault_storage"]
- name: "zitadel_db"
type: "postgresql_docker"
container: "zitadel-db-1"
- name: "gitea_data"
type: "gitea"
pg_port: 5434
data_dirs: ["/var/lib/gitea/data"]
- name: "caddy_configs"
type: "file_sync"
paths: ["/etc/caddy/conf.d/"]
# 核心特性:自动将 source 的域名(如 api.svc.plus替换为 target 的域名(如 api.contabo.svc.plus
domain_rewrite: true
```
### 2. 迁移与恢复 Ansible Role
#### [NEW] `playbooks/roles/site_migration/`
创建用于执行全站备份、传输与恢复的专用 Ansible 角色。
- **数据提取 (Extract)**: 登录源环境,并行执行数据库 `pg_dump`,打包 Gitea 文件系统和 Caddy 配置。
- **动态转换 (Transform)**: 利用 Ansible `replace``sed` 模块,在恢复前对 Caddy 配置和数据库 Dump 中的老域名 (`svc.plus`) 进行全局替换,实现域名参数化。
- **装载恢复 (Load)**: 通过 `synchronize` (rsync) 单向推送到新环境,执行 `psql` 导入与 `systemctl/docker` 重启。
#### [NEW] `playbooks/migrate_site.yml`
作为入口 Playbook加载上述 role执行单向数据流迁移。
### 3. CI/CD IaC 流水线
#### [NEW] `playbooks/.github/workflows/deploy-env-migration.yaml`
参考现有的 `deploy-ai-workspace-iac.yaml`,我们将在 `playbooks/.github/workflows/` 下新建一条流水线。该流水线的核心逻辑为:
1. **Provision (Terraform)**: 接收输入参数(如新大区、配置),调用底层 IaC 申请新机器并渲染出新的 IP 与域名。
2. **Deploy (Ansible)**: 对新机器执行全新的基础环境构建 (run-on-host-bootstrap)。
3. **Data Sync (Ansible Migration)**: 新环境 ready 后,以原生产环境为 source新机器为 target调用 `migrate_site.yml` 将数据和配置全量平滑克隆过去。
---
## User Review Required
> [!IMPORTANT]
> 这是一个高危 / 核心架构级的操作,请审阅以下问题:
1. **域名替换风险**: 直接在 SQL dump 和 Caddy 配置中查找替换 `domain_base`(如把 `svc.plus` 换成 `xxx.svc.plus`)是否满足你的预期?(注意某些数据库字段中可能包含硬编码的老域名)。
2. **密钥库同步**: Vault Storage 的数据也会被原封不动克隆到新环境,这意味着新环境使用的解密密钥 (Unseal keys) 必须和原环境保持一致,这符合你的要求吗?
3. **Pipeline 位置**: 你要求在 `playbooks/.github/workflows/` 下建立流水线。这是否意味着 playbooks 目录本身作为一个独立的 Git 仓库进行 Action 触发,还是随 `ai-workspace-infra` 整体触发?
如果设计方向无误,请批准此计划,我将开始为你生成 YAML 模板、Ansible Role 和 Pipeline 文件。