本页目录
wildwindstudio.com 接入 EdgeOne(EO)运维手册
站点 zone:wildwindstudio.com =
zone-31ojren22baa(腾讯云 EO,个人版 plan-personal,dnsPodAccess 接入,DNS 记录在 DNSPod) 覆盖两类操作:① 把后端 API 域名反代进 EO;② 把前端静态站用 COS 桶 + EO 托管。
0. 凭证地图(脱敏)
| 凭证 | 用途 | 值存放位置 |
|---|---|---|
主账号密钥(appid 1258895932,标 tencent_sms) | 管 EO / DNSPod / COS / CAM,本手册所有管理操作都用它 | 项目 resflow/config.toml 的 [tencent_sms](勿入库) |
| tencent_email 密钥 | 另一个账号(appid 1392608203),与本 zone 无关 | 同上 [tencent_email] |
| 前端上传凭证 | CAM 子用户 cos_op(Uin 100049168554),前端 coscli 上传 + EO 刷缓存 | 前端侧持有;策略见 §4 |
| CLB 源站证书(certbot) | EO→CLB 回源那一段的证书 | bj-middleware-1,见另一手册《wildwindstudio.com 证书自动续签》 |
⚠️ tccli 调
teo写操作必须带--endpoint teo.tencentcloudapi.com,否则默认会解析到国际站teo.intl.tencentcloudapi.com连接超时。 ⚠️ tccli 没有 cos 服务、机器上无 coscli/SDK;COS 操作用手写 HMAC-SHA1 签名 + pythonrequests直调 XML API(脚本见 §5)。
设置管理凭证到环境变量(后续命令假设已 export):
# 从 config.toml 的 [tencent_sms] 读取,避免明文粘贴
1. 场景 A:把后端 API 域名反代进 EO
以 cn-reserve-api.wildwindstudio.com 为例(回源腾讯云 CLB)。
步骤(顺序:先建回源+证书,等证书 deployed 再切 DNS,避免空窗 5xx):
ZONE=zone-31ojren22baa
DOMAIN=cn-reserve-api.wildwindstudio.com
CLB=lb-mm70ra69-ihl1vfoqucp93sma.clb.bj-tencentclb.com
# ① 建加速域名(IP_DOMAIN 回源到 CLB,强制 HTTPS:443;CLB 的 80 是强制 302 跳转,别回源到 80)
# 返回 OwnershipVerification=null 即无需归属校验(子域从 zone 继承)
# ② 开边缘免费证书(EO 自动签发 + 自动续期)
# 轮询直到 certStatus=deployed(约 4~10 分钟)
|
# ③ 证书 deployed 后,改 DNSPod 里该记录指向 EO 入口 <domain>.eo.dnse1.com
# —— 找到 RecordId 后用 ModifyRecord(只改这一条)
验证(切 DNS 前可用 EO 边缘 IP 预检):
IP=
防护:新 host 无独立域名级策略时,回落到站点级 ZoneDefaultPolicy(CC 自适应频控 on/Loose/Challenge + 托管 WAF on/DetectionOnly)。这是基础防护,未配精细限速。查看:
tccli teo DescribeSecurityPolicy ... --Entity ZoneDefaultPolicy。
注意 CC 动作是 JSChallenge,非浏览器客户端(如游戏客户端直连 API)触发时解不了挑战;Loose 下仅极端异常才触发,可接受。
2. 场景 B:COS 静态前端 + EO 托管
以 cn-reservation.wildwindstudio.com 为例,桶 cn-reservation-webui-1258895932(ap-nanjing)。参照桶 game-reserve-webui-1258895932(ap-tokyo,reservation 站)。
步骤:
# ① 建桶(公有读)+ ② 开静态网站(index.html + AutoAddressing)
# —— 用 §5 的 cos_admin.py(手写签名),或控制台操作
# ③ EO 建加速域名(COS 回源;OriginType=COS 时【不能】传 HostHeader,EO 自动填)
ZONE=zone-31ojren22baa
WEP=cn-reservation-webui-1258895932.cos-website.ap-nanjing.myqcloud.com
# ④ 开边缘证书(同场景 A ②)
# ⑤ DNS:全新子域用 CreateRecord(不动任何现有记录)
验证(空桶回源应返回 COS 404,证明链路通;传了 index.html 即 200):
DOM=cn-reservation.wildwindstudio.com
IP=
| |
# subject=CN=<域名> 即边缘证书已铺好(未铺好时先服 *.cdn.myqcloud.com 默认证书、TLS 握不上)
3. 前端部署(coscli 上传 + EO 刷缓存)
前端两件套(每个站一份,改 bucket / 改 purge 目标域名即可):
coscli 配置(cn-reservation-coscli.yaml):
cos:
base:
secretid: <cos_op 的 SecretId,脱敏>
secretkey: <cos_op 的 SecretKey,脱敏>
sessiontoken: ""
protocol: https
buckets:
- name: cn-reservation-webui-1258895932 # 换新桶
alias: website
region: ap-nanjing # 换区域
endpoint: cos.ap-nanjing.myqcloud.com # 换 endpoint
ofs: false
刷缓存脚本(TC3 签名调 teo CreatePurgeTask,改新站只需改 Targets 域名):
# payload 里 Targets 改成目标域名:
# {"ZoneId":"*","Type":"purge_host","Targets":["cn-reservation.wildwindstudio.com"]}
发布流程:coscli sync <构建产物目录> cos://website/ -c cn-reservation-coscli.yaml → 跑刷缓存脚本。
4. 前端上传凭证的 CAM 授权(新桶必做)
前端子用户 cos_op 的权限由单条自定义策略 cos_full_permission(PolicyId 274095472)控制。
每上一个新桶,都要把新桶资源加进这条策略的 cos:* 语句,否则 coscli 上传报 403 AccessDenied。
(teo:CreatePurgeTask 已授权 *,purge 任意域名不用再动。)
# 读当前策略
# 更新(保留旧桶资源,追加新桶资源;resource 格式 qcs::cos:<region>:uid/<appid>:<bucket-appid>/*)
定位子用户:
cam ListUsers→ 对候选cam ListAccessKeys --TargetUin <uin>匹配 AK →cam ListAttachedUserPolicies --TargetUin <uin>找策略。
5. 附:COS 管理脚本(手写签名,无需 coscli)
本机无 coscli/SDK 时,用 python requests + COS HMAC-SHA1 签名直调 XML API。核心签名函数:
= or ; = or
=; =f
=
=; =
=
=f
=f
=
return
- GET Service(列所有桶):host
service.cos.myqcloud.com,GET/ - PUT Bucket + 公有读:host
<bucket>.cos.<region>.myqcloud.com,PUT/,签并发x-cos-acl: public-read - PUT 静态网站:PUT
/?website,body 见下,需content-md5(base64(md5(body)))+content-type: application/xml - 验证:GET
/?acl、GET/?website
静态网站 body(与参照桶一致):
index.html
Enabled
6. 常见坑速查
| 现象 | 原因 / 处理 |
|---|---|
teo.intl... timed out | tccli teo 写操作没带 --endpoint teo.tencentcloudapi.com |
UnSupportChangeHostHeaderWithThisOriginType | OriginType=COS 时不能传 HostHeader,去掉即可(EO 自动填) |
切 DNS 后 TLS 握手失败、HTTP 000 | 边缘证书未铺开,边缘先服 *.cdn.myqcloud.com;等 certStatus=deployed 且边缘 subject=本域名(几分钟~几十分钟) |
coscli 上传 403 AccessDenied | cos_op 策略没加该桶资源,见 §4 |
DomainStatus 长时间 process | EO 加速域名 provisioning 中,不影响已 deployed 的证书功能;会自动翻 online |
DescribeDnsRecords(teo) 返回 0 条 | dnsPodAccess 模式 DNS 记录在 DNSPod,用 dnspod DescribeRecordList 查 |
附:本 zone 现有加速域名
| 域名 | 回源 | 用途 |
|---|---|---|
| cn-reserve-api.wildwindstudio.com | CLB lb-mm70ra69(HTTPS:443) | 国服后端 API |
| cn-reservation.wildwindstudio.com | COS cn-reservation-webui(ap-nanjing) | 国服预约前端 |
| reservation / meltdown / www | COS 静态桶 | 日服/官网前端 |