news 2026/8/29 15:01:49

Openship域名与SSL排障:DNS解析、证书续期与action required处理指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Openship域名与SSL排障:DNS解析、证书续期与action required处理指南

Openship域名与SSL排障:DNS解析、证书续期与action required处理指南

【免费下载链接】openshipSelf-hosted deployment platform项目地址: https://gitcode.com/GitHub_Trending/ope/openship

本文是 Openship 自托管部署平台的域名与 SSL 排障指南,面向新手覆盖三大高频问题:DNS 解析验证失败、证书卡在 Provisioning 无法续期、以及部署出现action required(需要人工处理)状态时的处理方法,帮助你在不阅读源码的情况下快速定位并修复 HTTPS 相关故障。

一、先搞懂 Openship 域名与证书的工作机制

在排查之前,先理解 Openship 的域名/SSL 流程,能帮你快速判断问题卡在哪一环:

  1. DNS 记录:每个自定义域名需要两条记录——一条路由记录(自托管用A记录指向服务器公网 IP,Cloud 用CNAME指向 Cloud 目标),一条归属证明记录(主机名为_openship-challengeTXT记录,内容是 Openship 给出的密钥串)。
  2. 验证(Verify):Openship 会分别查询这两条记录,哪条不匹配就会明确告诉你具体是哪条、期望值是什么。
  3. 证书签发:验证通过后,由管理端 OpenResty 边缘上的Certbot走 ACME 协议(默认 Let's Encrypt)签发证书,并自动重写现有路由加上 TLS。
  4. 自动续期ssl:renew定时任务会扫描临期证书(约到期前两周窗口内)批量续期;签发过程带按域名的锁,避免并发 ACME 请求烧掉 Let's Encrypt 配额。

💡 域名状态字段sslStatus的取值含义:none(无证书)→provisioning(签发中)→active(正常)或error(失败)。看懂这个状态机,排障就成功了一半。

二、DNS 解析验证失败的快速修复

症状:点击 Verify 一直不通过

"Verification failed" 提示会精确指出失败记录,常见三种:

看到的提示哪条记录出问题原因
A record not pointing to server for …路由A记录(自托管)缺失,或指向的 IP 与服务器公网 IP 不一致
CNAME record not found for …路由CNAME记录(Cloud)缺失或指向错误目标
TXT record _openship-challenge.… must equal "…"归属TXT记录缺失或密钥串复制不完整

最快修复步骤

  1. 打开项目的Domains页签,重新打开该域名的DNS Records面板,对照注册商处的实际记录。
  2. 从 Openship 面板直接复制记录值,不要手动输入——多一个空格都会验证失败。
  3. 先删除同名旧记录(残留的旧A/CNAME是常见元凶),再保存新值。
  4. 等待生效后点击Verify

⚠️ 自托管特别提醒:A记录必须解析到"外部世界实际看到的"公网 IP。如果服务器在 NAT 或代理之后改变了地址,指向内网 IP 会永远验证失败。

三、DNS 尚未生效(传播延迟)怎么办

记录看起来填对了,但 Verify 仍提示记录不存在?这是 DNS 传播延迟,不是 Openship 的问题

  • 面板本身也会提示:"DNS 变更最多需要 48 小时才能在全球生效",通常几分钟即可。
  • 可以用dig A app.example.comdig TXT _openship-challenge.app.example.com自查:如果公网查不到新值,Openship 同样查不到。
  • 不用干等:Openship 默认开启Domain DNS verification后台任务,每 13 分钟运行一次,对创建满 10 分钟的待验证域名自动重试验证和证书签发;手动点Verify只是更快的显式重试。

四、证书卡在 Provisioning 与续期排障

症状:域名已 Verified,SSL 徽章却停在 Provisioning

Provisioning表示签发仍在进行、结果未观测到、或首次尝试失败。处理顺序:

  1. 等一小会,点域名菜单的Recheck SSL——这是只读检查(不重新签发、不消耗限流配额),证书就位后状态立即翻成Active
  2. 若提示 "No valid certificate found… give Let's Encrypt a moment, then recheck",说明证书确实还没签发完,稍后再 Recheck。
  3. 想要立即重试就点Renew SSL:真实失败原因(DNS 未就绪、端口被封、Let's Encrypt 限流、ACME 故障)都会在这个动作里明确报出。

关于自动续期,你需要知道的

  • 证书Active后通常完全不用管:临期证书由续期任务自动处理。
  • 手动上传的证书(BYO)不会被 certbot 续期,到期前需自行更换。
  • 若提示Domain must be verified before SSL can be managed,说明域名还没通过验证——先完成上面的 DNS 修复。
  • 正常情况下Verify 后不需要重新部署:证书提供者会把已有路由重新注册为 TLS。如果只有重新部署后 HTTPS 才生效,说明存在边缘/路由对账问题,需保留部署日志与验证日志排查。

五、action required 状态是什么、怎么处理

Openship 把"系统自己修不了、必须有人动手"的问题统一标记为action required(区别于纯failed和普通告警)。你可以在两个地方看到它:

  • Issues 统一问题面板:合并了容器故障、部署阻塞、路由未同步、未验证域名证书错误等所有检查项,按严重度排序(outage>action_required>advisory)。关键点是:每条问题都带resolveWith字段——可以直接调用的修复动作(已替你把参数填好),照着执行即可。
  • 部署详情:部署失败若属于阻塞类错误(如路由冲突),状态会是action_required而非failed,意味着"部署被挂起等待你的决定"。它带pendingPromptexpiresAt——在超时前用build/respond(或面板上的待决操作)回复该 action id,部署会继续;超时则自动中止。

🎯 排障黄金路径:先打开 Issues 面板看整体计数(outage / actionRequired / advisory),再按resolveWith给的调用或面板按钮逐项处理,而不是在单个项目里盲目翻日志。

六、特殊场景:外部 Ingress(你的边缘自己终结 TLS)

如果应用已经挂在 Cloudflare Tunnel、负载均衡器或 Traefik/Caddy 之后由你自己的边缘处理 HTTPS,而 Openship 仍在要求 A/CNAME 记录并尝试签发证书——请在添加域名时打开External ingress & TLS开关:

  • 只需添加_openship-challengeTXT记录做归属验证,无需路由记录;
  • 验证成功后 SSL 状态显示External TLS,这是正确且最终的状态——Openship 不会为其运行 certbot;
  • 只有当你的边缘确实终结 TLS 时才开启此开关,否则域名会验证通过但只有裸 HTTP。

七、进阶:更换证书颁发机构(ACME CA)

Openship 默认使用 Let's Encrypt 生产环境,也可通过环境变量切换为ZeroSSLLet's Encrypt staging(测试用)或step-ca 私有 CA,支持 EAB(外部账户绑定)凭据与ec256/rsa2048等密钥类型。要点:

  • 更换 CA 后,旧证书无法跨 CA 续期——Openship 会在下次续期时为该域名在新 CA 下一次性重新签发,期间旧证书继续服务,不中断流量。
  • 详细配置项与环境变量说明见官方文档apps/web/content/docs/中的 ACME 说明(docs/acme.md),以及私有 CA 信任根挂载方式。

八、关键文件速查

内容文件路径
域名 SSL 签发/续期/验证核心逻辑apps/api/src/lib/domain-ssl.ts
SSL 自动续期定时任务apps/api/src/lib/ssl-scheduler.ts
签发并发锁(防限流/端口冲突)apps/api/src/lib/provision-lock.ts
action required 状态判定apps/api/src/modules/deployments/blocking-errors.ts
统一 Issues 面板与严重度定义apps/api/src/modules/issues/issues.service.ts
域名数据模型(sslStatus 等字段)packages/db/src/schema/domain.ts
官方排障文档(域名/DNS/SSL)apps/web/content/docs/troubleshooting/domains-ssl.mdx
自定义域名完整指南apps/web/content/docs/guides/custom-domains.mdx
ACME CA 配置文档docs/acme.md

九、排障清单(30 秒自检)

  1. ✅ A/CNAME 路由记录指向的 IP/目标与面板一致吗?(复制而非手输)
  2. _openship-challengeTXT 记录的值与面板密钥串完全一致吗?
  3. ✅ 用dig在公网能查到新值吗?查不到就等传播。
  4. ✅ 域名是 Verified 了吗?SSL 操作的前提条件。
  5. ✅ Provisioning 卡住时:先 Recheck SSL(免费),再 Renew SSL(看真实报错)。
  6. ✅ 看到 action required:打开 Issues 面板,按resolveWith执行,别猜 id。
  7. ✅ TLS 由你自己的边缘终结?开启 External ingress & TLS,只做 TXT 验证。

按以上顺序排查,绝大多数 Openship 域名与 SSL 问题都能在不重启、不重新部署的情况下解决。

【免费下载链接】openshipSelf-hosted deployment platform项目地址: https://gitcode.com/GitHub_Trending/ope/openship

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 14:59:50

LLM辅助教材写作:从初稿生成到质量验证的工程化实践

这次我们要讨论的不是某个新开的图像模型或一键启动包,而是一个偏思辨、但又非常工程化的话题:一位作者写了一本 AI 教材,然后问“AI 多久能做得更好”。这个提问看起来像一篇博客的开场白,但它背后牵扯到 LLM 写作能力评估、教材…

作者头像 李华
网站建设 2026/8/29 14:59:25

连续扩散语言模型与昇腾算力:ELF架构解析及实践指南

最近 AI 圈有两个方向热度很高:一个是 Meta 何恺明团队提出的 ELF——一种利用扩散模型直接生成任意长度的连续语义特征的语言模型,架构简洁到极致,却在同等参数规模下超越了主流自回归模型;另一个是国内 AI 算力生态的快速成熟—…

作者头像 李华
网站建设 2026/8/29 14:55:12

RuView 指南:穿墙感知人在、呼吸与心率

RuView 指南:穿墙感知人在、呼吸与心率 【免费下载链接】RuView π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video. 项目地址: https://git…

作者头像 李华
网站建设 2026/8/29 14:53:58

低功耗MEMS气压传感器LPS22DF:从选型到驱动实现与避坑指南

最近一个便携气象站项目要选气压计,需求卡得比较死:电池供电、持续工作电流必须尽量小、板面积紧张、精度还不能太拉胯。ST 的 LPS22DF 就这样进入了选型清单。它作为一颗 MEMS nano 压力传感器,把压阻式敏感芯体、温度补偿、24 位 ADC、I2C/…

作者头像 李华