Files
blog/deploy/cn-certkeeper/Dockerfile
T
zqlit 1427c47dcf feat(ssl): 证书签发链路搬到国内机 Docker,清理 1Panel 过期证书
架构定案(B+C):CF Worker 免费版 CPU 硬顶 10ms(cron 同),
不再购买 Paid($5/月≈¥36),改为——
  B. Worker 留免费版 + 代码优化(把 CPU 压进预算)
  C. 签发+部署整条链路搬国内机 Docker 容器

代码
- acme.ts: 缓存 signingKey 为 Promise,单次签发 importKey 12→1 次
  (实测 importKey 126µs / sign 84µs;一次签发 3.3ms → 1.4ms)
- deployer.ts: 新增 DogeCloudDeployer.ping();修正 cert_id → id 的注释
- dnsprovider.ts: 新增 RemoteDns(把 DNS-01 写 TXT 委托给国内机 cn-dns-helper)
- tools/certkeeper-config.mjs: 域名配置抽为唯一事实源(两个消费方共用)
- tools/export-certkeeper-data.mjs: 导出国内机数据目录

新增部署单元
- deploy/cn-certkeeper: 签发+部署容器(只绑 127.0.0.1:8019,compose 管理)
  含 FileKV(文件系统版 KVNamespace)、带鉴权 HTTP、每日 4:10 续期
- deploy/cn-dns-helper: DNS-01 写 TXT 助手(只绑 127.0.0.1:8018)

文档
- 函数版证书管家-方案.md 新增第九章:B+C 定案、实测 CPU 数据、
  容器验收记录、1Panel 过期证书清理记录、t-t.live 两套管理冲突
- 标注旧 8.3 节「免费版跑不了签发」为未实测误判

一并纳入:.gitignore 忽略 deploy/cn-certkeeper/lib/(tsc 编译产物)
2026-10-06 18:28:55 +08:00

39 lines
1.6 KiB
Docker
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.
# cn-certkeeper 镜像 —— 零 npm 依赖,所以没有 package.json / 锁文件 / npm ci
#
# 作用:在国内机上跑证书的「探针 → 签发 → 部署」整条链路。
# 为什么不在 Worker 里跑:见 src/serve.mjs 顶部注释 ——
# Workers 免费版 CPU 硬顶 10ms(Cron 也是 10ms),付费版 $5/月≈¥36。
# 实测一次签发的密码学工作量约 3~4ms,乘上「Workers 比本地慢」的系数后
# 正好擦着 10ms 上限跑。国内机 CPU 不受限、Docker 也现成,搬过来更划算。
#
# ★ lib/ 是 blog-admin 的 tsc 编译产物,**不随仓库走**(已 gitignore)。
# 构建前先在 blog-admin 里跑 `npm run selftest:ssl:build`,
# 再 `cp -r blog-admin/.selftest-ssl/lib deploy/cn-certkeeper/lib`。
# 好处是:业务代码只有一份(blog-admin/src/lib/*.ts),Worker 与国内机
# 跑的是同一份编译产物,不会出现「两边逻辑漂移」。
#
# ★ apk 源换阿里云:国内机器直连 dl-cdn.alpinelinux.org 慢到不可用。
FROM node:22-alpine
ARG APK_MIRROR=mirrors.aliyun.com
RUN if [ -n "$APK_MIRROR" ]; then \
sed -i "s#dl-cdn.alpinelinux.org#$APK_MIRROR#g" /etc/apk/repositories; \
fi \
&& apk add --no-cache ca-certificates tzdata
WORKDIR /app
ENV NODE_ENV=production
COPY lib/ ./lib/
COPY src/ ./src/
# 数据目录(compose 里挂卷进来)
VOLUME ["/data"]
EXPOSE 8019
# 缺 AUTH_TOKEN / TOKEN_SECRET 时 serve.mjs 会自己 process.exit(1),容器随即退出 ——
# 刻意的:宁可起不来,也不能以「无鉴权」或「解不开凭据」的状态空转。
CMD ["node", "src/serve.mjs"]