Skip to content

Commit 6551f63

Browse files
OhYeeCopilot
andcommitted
docs: add certificate scripts directory for documentation
New certificate management scripts added to support documentation generation and certificate handling processes. 新建证书管理脚本以支持文档生成和证书处理流程。 Change-Id: I6f69a380638b23940b0db84ee2dd41d2eb63b0bd Co-authored-by: Copilot <copilot@github.com> Signed-off-by: OhYee <oyohyee@oyohyee.com>
1 parent a661122 commit 6551f63

12 files changed

Lines changed: 2619 additions & 0 deletions

File tree

scripts/cert/.fcignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
src/
2+
.env
3+
.env.*
4+
*.ts
5+
tsconfig.json
6+
vite.config.ts
7+
s.yaml
8+
.gitignore
9+
.fcignore
10+
README.md
11+
Makefile
12+
*.log
13+
*.md

scripts/cert/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules/
2+
dist/
3+
.env
4+
*.log

scripts/cert/README.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# 证书自动更新(Let's Encrypt + 阿里云 OSS)
2+
3+
基于 **Let's Encrypt**(ACME DNS-01)自动申请证书,并通过 **阿里云云解析** 完成域名验证,最后将证书与私钥上传到 **阿里云 OSS**。适用于部署在 **阿里云函数计算 3.0**,由定时触发器每月 1 号执行。
4+
5+
## 功能
6+
7+
- 使用 **DNS-01** 验证,域名需在 **阿里云云解析** 托管
8+
- 通过 **acme-client** 与 Let's Encrypt 通信,自动申请/续期证书
9+
- 证书与私钥上传到指定 OSS Bucket,路径:`{CERT_OSS_PREFIX}{域名}/fullchain.pem``privkey.pem`
10+
- 单文件构建(Vite + TypeScript),依赖打包进 `dist/index.js`,便于 FC 部署
11+
12+
## 环境变量
13+
14+
| 变量名 | 必填 | 说明 |
15+
|--------|------|------|
16+
| `CERT_DOMAIN` || 申请证书的域名,多域名逗号分隔,首项为主域名 |
17+
| `CERT_OSS_BUCKET` || 证书上传到的 OSS Bucket 名称 |
18+
| `CERT_OSS_REGION` || OSS 地域,默认 `oss-cn-hangzhou` |
19+
| `CERT_OSS_PREFIX` || OSS 对象前缀,如 `certs/` |
20+
| `ACME_ACCOUNT_EMAIL` || Let's Encrypt 账号邮箱 |
21+
| `ACME_DIRECTORY_URL` || ACME 目录 URL,不设则使用生产环境;测试可设为 `https://acme-staging-v02.api.letsencrypt.org/directory` |
22+
23+
函数计算通过 **RAM 角色** 注入临时凭证(`ACS_ACCESS_KEY_ID``ACS_ACCESS_KEY_SECRET``ACS_SECURITY_TOKEN`),无需在环境变量中配置 AK/SK。本地调试时可配置 `ALIBABA_CLOUD_ACCESS_KEY_ID``ALIBABA_CLOUD_ACCESS_KEY_SECRET`
24+
25+
## RAM 角色权限
26+
27+
函数使用的 RAM 角色需具备:
28+
29+
1. **云解析 DNS**`AddDomainRecord``DescribeDomainRecords``DeleteDomainRecord`(用于 DNS-01 的 TXT 记录添加与删除)
30+
2. **OSS**:目标 Bucket 的 `PutObject``GetObject``ListObjects`(上传与可选读取)
31+
32+
最小权限示例见 [阿里云文档](https://help.aliyun.com/document_detail/31883.html)
33+
34+
## 构建与部署
35+
36+
### 构建
37+
38+
```bash
39+
cd scripts/cert
40+
npm install
41+
npm run build
42+
```
43+
44+
产物为 `dist/index.js`(单文件,含依赖)。
45+
46+
### 部署(Serverless Devs)
47+
48+
1. 安装并配置 Serverless Devs:`npm install -g @serverless-devs/s``s config add` 配置阿里云密钥。
49+
2. 在项目根或 `scripts/cert` 下配置 `.env`(或导出环境变量),包含:
50+
- `CERT_DOMAIN`
51+
- `CERT_OSS_BUCKET`
52+
- `ACME_ACCOUNT_EMAIL`
53+
- `FC_ROLE_ARN`(RAM 角色 ARN)
54+
- 可选:`CERT_OSS_REGION``CERT_OSS_PREFIX`
55+
3. 部署:
56+
57+
```bash
58+
cd scripts/cert
59+
npm run build
60+
s deploy
61+
```
62+
63+
部署后,定时触发器将在 **每月 1 号 0 点(北京时间)** 执行一次。
64+
65+
## OSS 证书路径
66+
67+
- 全链证书:`{CERT_OSS_PREFIX}{主域名}/fullchain.pem`
68+
- 私钥:`{CERT_OSS_PREFIX}{主域名}/privkey.pem`
69+
70+
例如 `CERT_OSS_PREFIX=certs/`、主域名为 `example.com` 时,路径为 `certs/example.com/fullchain.pem``certs/example.com/privkey.pem`
71+
72+
## 注意事项与安全
73+
74+
- 私钥与证书仅上传到 OSS,不在日志或返回值中输出。
75+
- Let's Encrypt 有速率限制,每月 1 号执行一次在限制内;失败时避免短时间多次重试。
76+
- 确保 `CERT_DOMAIN` 已在阿里云云解析中托管,否则 DNS 写记录会失败。
77+
- 首次建议使用 `ACME_DIRECTORY_URL` 指向 staging 验证流程,再切回生产。

0 commit comments

Comments
 (0)