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 编译产物)
This commit is contained in:
1 parent
a3bc10c68c
commit
1427c47dcf
15 files changed
+1387
-52
No files matched your search
@@ -0,0 +1,38 @@
|
||||
# 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"]
|
||||
Reference in new issue
Block a user