mcpField
H
huawei-cloud-sac-dify

huawei-cloud-sac-dify

github.com/huaweicloud云与 DevOps5959 次安装2 天前更新
代码仓库

关于 huawei-cloud-sac-dify

这是一个使用 Terraform 在 Huawei Cloud 部署 Dify LLM 应用开发平台的技能,面向需要配置并验证云端 Dify 环境的用户。它通过模板创建网络、ECS 和 EIP,并以 cloud-init 安装服务;支持多个 Dify 版本及 flexus-ai-agent 模式。

主要功能

  1. 01提取解决方案信息与估价
  2. 02下载并规范化 Terraform 模板
  3. 03配置 Huawei Cloud 参数
  4. 04通过 Terraform 部署和清理资源
  5. 05验证部署状态与服务可达性

适用场景

  1. 01在 Huawei Cloud 配置 Dify 平台
  2. 02检查部署方案信息和预计价格
  3. 03部署后检查 Terraform 资源及服务响应
  4. 04移除已部署资源并清理凭据文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-sac-dify

安装后在 Claude Code 中输入/huawei-cloud-sac-dify确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acceptance-criteria.md
cli-installation-guide.md
iam-policies.md
related-commands.md
verification-method.md
scripts/
extract_sac_deploy_info.py
list_tf_variables.py
normalize_tf_providers.py
playwright_utils.py
scripts/templates/
extract_sac_deploy_info.js

详细介绍

华为云 Dify LLM 应用开发平台

概述

使用 Terraform 在华为云上端到端部署“构建 Dify LLM 应用开发平台” SAC 解决方案。

架构: VPC + 子网 + 安全组(允许 ICMP/HTTP/HTTPS 入站),一台 ECS 实例和一个 EIP(1-300 Mbit/s)。Cloud-init 会在 Ubuntu 上安装并启动 Dify 服务。模板支持 Dify 社区版本和 flexus-ai-agent 模式(由 dify_version 控制)。

工具链: Playwright CLI(提取价格/解决方案元数据)+ Python 3.8+(辅助脚本)+ Terraform(基础设施预配)。不使用 KooCLI;部署和生命周期操作仅通过 Terraform 处理。

前提条件

  • Python 3.8+、Playwright CLI、Terraform 1.15.4+ — 参见CLI 安装指南
  • 通过环境变量提供华为云 AK/SK(HW_ACCESS_KEY、HW_SECRET_KEY);如果未设置,请提示用户手动编辑 <temp_dir>/dify-workdir/terraform.auto.tfvars.json 并填写 AK/SK
  • 具有足够权限的 IAM 用户或 rf_admin_trust 委托 — 参见 IAM 策略
安全
  • 🚫 切勿在对话或输出中暴露 AK/SK
  • 🚫 切勿要求用户在聊天中输入 AK/SK
  • ✅ 优先使用 IAM 用户,而非主账号
  • ✅ 修改操作(apply、destroy)需要用户明确确认

核心命令

占位符值(按操作系统解析,参见参数):

占位符Linux / macOSWindows
<python>python3python
<script_dir>./scripts./scripts
<temp_dir>/tmp$env:TEMP
# 1. Extract solution info
<python> <script_dir>/extract_sac_deploy_info.py \
  --url "https://www.huaweicloud.com/solution/implementations/building-a-dify-llm-application-development-platform.html" \
  --out <temp_dir>/sac_selected.json

# 2. Download and normalize template
mkdir -p <temp_dir>/dify-workdir
curl -fsSL "https://documentation-samples.obs.cn-north-4.myhuaweicloud.com/solution-as-code-publicbucket/solution-as-code-moudle/flexus/dify-ecs.tf" \
  -o <temp_dir>/dify-workdir/dify-ecs.tf

<python> <script_dir>/normalize_tf_providers.py <temp_dir>/dify-workdir \
  --region "cn-north-4"

# 3. List variables for review
<python> <script_dir>/list_tf_variables.py <temp_dir>/dify-workdir

# 4. Deploy
terraform init
terraform plan
# ⛔ STOP — Review the plan output above. Do NOT auto-apply.
# Confirm with the user (AskUserQuestion or equivalent) before proceeding.
# Only after explicit user confirmation:
terraform apply

# 5. Verify
terraform state list
terraform output -json

# 6. Cleanup
terraform destroy
# Only after terraform destroy succeeds:
# Linux / macOS
rm -f <temp_dir>/dify-workdir/terraform.auto.tfvars.json
# Windows PowerShell
Remove-Item -Force <temp_dir>/dify-workdir/terraform.auto.tfvars.json

工作流

1. 提取解决方案信息
<python> <script_dir>/extract_sac_deploy_info.py \
  --url "<solution_detail_page_url>" \
  --out <temp_dir>/sac_selected.json

提取完成后,向用户展示结果:

  • 解决方案名称:输出 JSON 中的 title 字段
  • 预估价格:estimated_price_text 字段
  • 如果 title 或 estimated_price_text 为空,请警告用户,并建议在解决方案页面手动核实
2. 下载并规范化模板
mkdir -p <temp_dir>/dify-workdir
curl -fsSL "https://documentation-samples.obs.cn-north-4.myhuaweicloud.com/solution-as-code-publicbucket/solution-as-code-moudle/flexus/dify-ecs.tf" \
  -o <temp_dir>/dify-workdir/dify-ecs.tf

<python> <script_dir>/normalize_tf_providers.py <temp_dir>/dify-workdir \
  --region "cn-north-4"

优先从上方明确指定的 Dify Terraform URL 下载模板。仅当该 URL 不可用时,才将提取出的模板候选项用作备用。

normalize_tf_providers.py 会写入 <temp_dir>/dify-workdir/terraform.auto.tfvars.json(包括区域和其他参数)。 如果未设置环境变量 HW_ACCESS_KEY/HW_SECRET_KEY,则 AK/SK 字段会留空。 提示用户手动编辑文件并填写 AK/SK,然后继续下一步。

3. 确认变量
<python> <script_dir>/list_tf_variables.py <temp_dir>/dify-workdir

与用户一起检查。如果敏感变量为空或强度不足,则阻止执行 apply。 对密码等敏感值进行部分遮蔽,避免将其泄露到 LLM 上下文中。

4. 部署

⛔ 停止 — 运行 terraform apply 前,请检查 terraform plan 输出并与用户确认(使用 AskUserQuestion 或等效方式)。 切勿自动应用。仅在获得用户明确确认后继续。

5. 验证

参见验证方法和验收标准。

6. 清理

运行 terraform destroy 以移除受管理的资源。 仅在 terraform destroy 成功后删除 <temp_dir>/dify-workdir/terraform.auto.tfvars.json,这样销毁失败时仍可复用现有凭据文件重试。

Linux / macOS:

rm -f <temp_dir>/dify-workdir/terraform.auto.tfvars.json

Windows PowerShell:

Remove-Item -Force <temp_dir>/dify-workdir/terraform.auto.tfvars.json

参数

参数必填默认值约束
access_key是<NO_DEFAULT>来自环境变量 HW_ACCESS_KEY 或本地文件 <temp_dir>/dify-workdir/terraform.auto.tfvars.json;切勿在聊天中打印
secret_key是<NO_DEFAULT>来自环境变量 HW_SECRET_KEY 或本地文件 <temp_dir>/dify-workdir/terraform.auto.tfvars.json;切勿在聊天中打印
solution_name否dify-ecs-demo4-24 个字符,仅限小写字母、数字和连字符,且必须以小写字母开头
region_id是cn-north-4主区域参数。允许的值:cn-north-4,cn-southwest-2,cn-north-12,ap-southeast-3,cn-east-3,cn-north-9,cn-south-2,cn-south-1,tr-west-1,cn-south-4,ap-southeast-1,cn-north-2,cn-north-1,cn-east-4。确保 normalize_tf_providers.py --region 与此值一致
dify_version否1.11.4允许的值:1.11.4,1.8.1,1.6.0,1.4.1,1.1.3,0.15.8,flexus-ai-agent
ecs_flavor否t6.xlarge.2ECS/Flexus 规格格式必须符合模板的正则表达式验证
ecs_password是""8-26 个字符,且至少包含大写字母、小写字母、数字、特殊字符中的 3 种
dify_admin_password有条件必填""当 dify_version=flexus-ai-agent 时生效;8-26 个字符,且包含字母和数字
system_disk_size否10040-1024(GB)
bandwidth_size否3001-300(Mbit/s)
charging_mode否postPaidpostPaid 或 prePaid
charging_unit有条件必填month当 charging_mode=prePaid 时必填;month 或 year
charging_period有条件必填1当 charging_mode=prePaid 时必填;按月:1-9,按年:1-3

部署后输出

  • terraform output -json — 包含 Dify 平台 URL 的 access_instructions
  • Dify 界面:http://<EIP>(cloud-init 大约需要 10 分钟)

输出格式

所有脚本输出均为 JSON 格式:extract_sac_deploy_info.py 输出解决方案信息 JSON,list_tf_variables.py 输出变量列表 JSON。

验证

按步骤验证部署结果:

  1. 提取模板 — 检查 <temp_dir>/sac_selected.json 是否包含 solution_name、price 字段
  2. 下载模板 — 确认 <temp_dir>/sac-workdir 下存在 .tf 文件,且 terraform validate 通过
  3. 确认变量 — list_tf_variables.py 的输出中敏感变量(AK/SK、密码)不为空
  4. 部署 — terraform plan 无错误;用户已确认部署;执行 apply 后,terraform state list 显示所有预期资源
  5. 服务可访问性 — 等待 10-15 分钟让 cloud-init 完成,然后 curl -s http://<EIP> 返回 200

详情请参阅验证方法和验收标准。

最佳实践

  • 始终先执行 terraform plan,再执行 apply
  • 先使用 charging_unit=month;验证通过后再切换为 year
  • 部署后预留 10-15 分钟让 cloud-init 完成

参考文档

文档说明
CLI 安装指南安装 Python、Playwright CLI、Terraform
IAM 策略权限、委托配置、故障处理
验证方法按工作流步骤逐步验证
验收标准完整的部署验收清单
相关命令Terraform、脚本、远程访问参考

注意事项

  • <temp_dir>/dify-workdir/terraform.auto.tfvars.json 包含敏感信息,切勿提交到 VCS
  • 成功执行 terraform destroy 后,删除 <temp_dir>/dify-workdir/terraform.auto.tfvars.json,避免凭据留在磁盘上
  • normalize_tf_providers.py 会将区域写入 tfvars;如果未设置环境变量,AK/SK 将留空,用户必须手动填写
  • 工具链:Playwright CLI + Python + Terraform — 不使用 KooCLI

评论

支持 Markdown