Compare commits
301 Commits
v2_singlet
...
v1.38.9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b30cb5d7dc | ||
|
|
7113c4622b | ||
|
|
bd8caff0b7 | ||
|
|
519bf3184a | ||
|
|
79c77ce3a3 | ||
|
|
2f40f795ee | ||
|
|
02f89a9c9d | ||
|
|
d286c040a5 | ||
|
|
99f5b8ebc1 | ||
|
|
9ac33f9b9b | ||
|
|
6ab1fcaf89 | ||
|
|
8d57063e9d | ||
|
|
104d646c7c | ||
|
|
9ddbf79d9e | ||
|
|
a9ec4c5c28 | ||
|
|
914d860197 | ||
|
|
23b3e5c731 | ||
|
|
cdf04c2402 | ||
|
|
3535e44337 | ||
|
|
0b245d3885 | ||
|
|
4fda6cbcde | ||
|
|
2bbba897ec | ||
|
|
0cfb94b0ba | ||
|
|
3f7ac93932 | ||
|
|
96c36b4f6a | ||
|
|
febd6d32cf | ||
|
|
cbd8699801 | ||
|
|
74400aacc6 | ||
|
|
9f55c3605a | ||
|
|
8d61e8179f | ||
|
|
f250889c3e | ||
|
|
00f67d86d6 | ||
|
|
5b580d2a17 | ||
|
|
083dd7d1a3 | ||
|
|
03bd4755ce | ||
|
|
29d37075dd | ||
|
|
f311bac580 | ||
|
|
beb7a4c992 | ||
|
|
4d86fb319b | ||
|
|
5ea4f46de7 | ||
|
|
1d8d5251ae | ||
|
|
54c8217808 | ||
|
|
ba623903e0 | ||
|
|
907af3ae18 | ||
|
|
24ae8a6b66 | ||
|
|
1646a5cdd2 | ||
|
|
814f17d10b | ||
|
|
40fe105903 | ||
|
|
42a347d8b1 | ||
|
|
5450e5dac4 | ||
|
|
1368259a1e | ||
|
|
81a495f267 | ||
|
|
693a4a6633 | ||
|
|
82786c580a | ||
|
|
e19743f705 | ||
|
|
9166a57930 | ||
|
|
bd511f97cb | ||
|
|
560bf40e4b | ||
|
|
4f4652c1cd | ||
|
|
60e13c2a1d | ||
|
|
1fe0dc4d16 | ||
|
|
181a1e3c0a | ||
|
|
6bba771856 | ||
|
|
921f1f42fb | ||
|
|
eeb1f27fa4 | ||
|
|
9ce21ad152 | ||
|
|
c036929cfe | ||
|
|
21591a3a89 | ||
|
|
a2e9a41a7e | ||
|
|
0902349130 | ||
|
|
f900db8e10 | ||
|
|
0fa9b344e0 | ||
|
|
f48ef3d17b | ||
|
|
40801d0a06 | ||
|
|
c6ccf1cf21 | ||
|
|
d311992983 | ||
|
|
b4babbe2c7 | ||
|
|
0719f4c99e | ||
|
|
eb5de15033 | ||
|
|
b229486d3b | ||
|
|
33b8d3e219 | ||
|
|
230256793f | ||
|
|
540ef96745 | ||
|
|
1baf30a671 | ||
|
|
5e93840e48 | ||
|
|
73a5908039 | ||
|
|
8429148273 | ||
|
|
17f40e2180 | ||
|
|
0345b12379 | ||
|
|
163b0de874 | ||
|
|
1661caed05 | ||
|
|
1089aeab9e | ||
|
|
1a0d3eeb1b | ||
|
|
c27636529d | ||
|
|
ac85488245 | ||
|
|
433e98b645 | ||
|
|
873654669e | ||
|
|
8b96f218d5 | ||
|
|
52cbff0e15 | ||
|
|
32de8d9ccb | ||
|
|
e06da886f7 | ||
|
|
cdd5ad3a8e | ||
|
|
9bee0e460b | ||
|
|
60c8ace443 | ||
|
|
933aaeaf25 | ||
|
|
ca43c77525 | ||
|
|
b204182c13 | ||
|
|
dfb4165a12 | ||
|
|
26a54cd228 | ||
|
|
e229f14121 | ||
|
|
ee6cdfb391 | ||
|
|
58354e563c | ||
|
|
48f1bf0918 | ||
|
|
0ffe1f2cef | ||
|
|
8fe1adacf3 | ||
|
|
30245c5d8a | ||
|
|
67a5225bde | ||
|
|
58c3d7087b | ||
|
|
c408687af7 | ||
|
|
33b284afc0 | ||
|
|
78004bdfb5 | ||
|
|
640950d4c8 | ||
|
|
998de0f9a0 | ||
|
|
ce6e515309 | ||
|
|
e054c8fc55 | ||
|
|
9fa1c2eb3e | ||
|
|
64a314c19e | ||
|
|
40be42406c | ||
|
|
bca0eefc83 | ||
|
|
662ca19f8f | ||
|
|
65f9d482f3 | ||
|
|
7058d5cb93 | ||
|
|
f7b13c69e9 | ||
|
|
9f21b1a097 | ||
|
|
53983002b6 | ||
|
|
d3c0914ac1 | ||
|
|
7eb9694221 | ||
|
|
b8f0d37420 | ||
|
|
1d5b1c239c | ||
|
|
d1ebc08478 | ||
|
|
5074a91669 | ||
|
|
40e56c4040 | ||
|
|
3b0ed9310a | ||
|
|
f92dc6a1ad | ||
|
|
0040b76a19 | ||
|
|
6c6fbabf14 | ||
|
|
8c2d868093 | ||
|
|
96c9e74c6f | ||
|
|
d947437c10 | ||
|
|
83df29d832 | ||
|
|
607afe864a | ||
|
|
a97cee84f3 | ||
|
|
ad64384891 | ||
|
|
f75c73d739 | ||
|
|
418bcddc95 | ||
|
|
61192b998a | ||
|
|
5ea2b09dc3 | ||
|
|
5bfc2c4a9b | ||
|
|
8ec47c3894 | ||
|
|
f4423638a2 | ||
|
|
7b3444308b | ||
|
|
5ec9916817 | ||
|
|
be1a70299f | ||
|
|
8685aa371a | ||
|
|
0224faa184 | ||
|
|
8546e326cf | ||
|
|
9956fd2f04 | ||
|
|
4f669ca82f | ||
|
|
1cd3881aa8 | ||
|
|
e634513f7b | ||
|
|
7b6cde6ae3 | ||
|
|
18146fdf9e | ||
|
|
2c80c35b21 | ||
|
|
54b73769b8 | ||
|
|
f7983ee4d9 | ||
|
|
9eace86aee | ||
|
|
2fbb58eb2b | ||
|
|
187d04e3a1 | ||
|
|
d5d7d73440 | ||
|
|
b747e281b7 | ||
|
|
e024d50476 | ||
|
|
a6ba48c075 | ||
|
|
e19375387d | ||
|
|
a9f68187d4 | ||
|
|
4d754fa78d | ||
|
|
6d07ab2bc5 | ||
|
|
a60b00c440 | ||
|
|
d0f3f303b6 | ||
|
|
4fc8acce8c | ||
|
|
0797a4f99d | ||
|
|
db453c8038 | ||
|
|
c776c34cfd | ||
|
|
170b39fde6 | ||
|
|
fc27a66825 | ||
|
|
06b49c140e | ||
|
|
3ab45c91e1 | ||
|
|
6660161cec | ||
|
|
8c6e207008 | ||
|
|
4180e3c540 | ||
|
|
a218cd0ffb | ||
|
|
31c8de5bbe | ||
|
|
faac7f365f | ||
|
|
8cc4332b10 | ||
|
|
abd30da102 | ||
|
|
f4701ff72a | ||
|
|
393d7885a1 | ||
|
|
b4c6d3c975 | ||
|
|
3ce440a28d | ||
|
|
cb4ab6a99f | ||
|
|
6c39d7b1ee | ||
|
|
840bd52671 | ||
|
|
f3d70c7ea1 | ||
|
|
22b8528ee1 | ||
|
|
900e302df7 | ||
|
|
be03d8e137 | ||
|
|
d338a9639a | ||
|
|
235972f3da | ||
|
|
ae822881e7 | ||
|
|
26f75c71ba | ||
|
|
ad2aa2eff5 | ||
|
|
52689049ae | ||
|
|
1a29541140 | ||
|
|
ece17eecef | ||
|
|
2b353094eb | ||
|
|
70305aa501 | ||
|
|
22dc504ad0 | ||
|
|
ef9402d403 | ||
|
|
f7e29532f7 | ||
|
|
60770683b6 | ||
|
|
051bbbc64f | ||
|
|
206eef964c | ||
|
|
b8b7adff17 | ||
|
|
42c68d362e | ||
|
|
1df3967889 | ||
|
|
dae87e26a3 | ||
|
|
f193341eae | ||
|
|
d21a042ad8 | ||
|
|
b16b9e813d | ||
|
|
a79fe1f350 | ||
|
|
14f99875fb | ||
|
|
2d2890b34f | ||
|
|
66d8cafd76 | ||
|
|
468ccbf2b7 | ||
|
|
6b6668f73b | ||
|
|
5eda05f007 | ||
|
|
1d6a8bd851 | ||
|
|
e500af1ed4 | ||
|
|
7ee39fd4ed | ||
|
|
9ba6c83821 | ||
|
|
4243622414 | ||
|
|
8374a4f5bf | ||
|
|
5d851141cb | ||
|
|
26ac081182 | ||
|
|
64e0d9a4d5 | ||
|
|
269a6cad80 | ||
|
|
806ebdb8a8 | ||
|
|
ed0016fd2b | ||
|
|
a3fb24993d | ||
|
|
9c26598831 | ||
|
|
7634f153b7 | ||
|
|
cabc4da3ac | ||
|
|
6419539305 | ||
|
|
97e1178525 | ||
|
|
04faf12c14 | ||
|
|
e7aa79cc9f | ||
|
|
f862e3f37f | ||
|
|
ce051af5bb | ||
|
|
dcb9f1c840 | ||
|
|
83d0fe9f09 | ||
|
|
7789ba4d36 | ||
|
|
80101b04e2 | ||
|
|
310d4d1b57 | ||
|
|
126c0c6ad6 | ||
|
|
6a43b44087 | ||
|
|
6772b32609 | ||
|
|
db2f0b8c5c | ||
|
|
1376004197 | ||
|
|
1625989c48 | ||
|
|
f7863bd686 | ||
|
|
883565905a | ||
|
|
786780ce9b | ||
|
|
d2e9fed62d | ||
|
|
0e5a4fb098 | ||
|
|
f223f042de | ||
|
|
cd413825ed | ||
|
|
a851c272cd | ||
|
|
412077b418 | ||
|
|
4df6f8a50e | ||
|
|
44bf4b1cc1 | ||
|
|
136e8dd7c5 | ||
|
|
024b2b04a4 | ||
|
|
5bbf210394 | ||
|
|
039c62b09b | ||
|
|
07f0aa45ef | ||
|
|
de11f44309 | ||
|
|
acee96ef17 | ||
|
|
4ed49f9dfa | ||
|
|
f68b585f8f | ||
|
|
13ddc979ec | ||
|
|
b0b7ac3efb | ||
|
|
62f8525dd5 |
2
.github/workflows/deploy-demo.yml
vendored
@@ -19,6 +19,7 @@ permissions:
|
||||
jobs:
|
||||
deploy-certd-demo:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
@@ -55,4 +56,3 @@ jobs:
|
||||
}
|
||||
retry-count: 3
|
||||
retry-delay: 5000
|
||||
|
||||
|
||||
61
.github/workflows/publish-atom.yaml
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
name: publish-atomgit
|
||||
on:
|
||||
push:
|
||||
branches: ['v2-dev']
|
||||
paths:
|
||||
- "trigger/publish.trigger"
|
||||
workflow_run:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
publish-atomgit:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const pnpmWorkspace = "./pnpm-workspace.yaml";
|
||||
fs.unlinkSync(pnpmWorkspace)
|
||||
const jsonFilePath = "./packages/ui/certd-server/package.json";
|
||||
const jsonContent = fs.readFileSync(jsonFilePath, 'utf-8');
|
||||
const pkg = JSON.parse(jsonContent)
|
||||
console.log("certd_version:",pkg.version);
|
||||
return pkg.version
|
||||
- run: |
|
||||
npm install -g pnpm
|
||||
pnpm install
|
||||
npm run build
|
||||
working-directory: ./packages/ui/certd-client
|
||||
|
||||
- name: publish_to_atomgit
|
||||
id: publish_to_atomgit
|
||||
run: |
|
||||
rootDir=$(pwd)
|
||||
rm -rf ./packages/ui/certd-client/dist/**/*.gz
|
||||
cd ./packages/ui/certd-client/dist && zip -r ../ui.zip .
|
||||
cd $rootDir
|
||||
export ATOMGIT_TOKEN=${{ secrets.ATOMGIT_TOKEN }}
|
||||
pnpm install
|
||||
npm run publish_to_atomgit
|
||||
working-directory: ./
|
||||
|
||||
39
.github/workflows/publish-gitee.yaml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: publish-gitee
|
||||
on:
|
||||
push:
|
||||
branches: ['v2-dev']
|
||||
paths:
|
||||
- "trigger/publish.trigger"
|
||||
workflow_run:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
publish-gitee:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
|
||||
- name: publish_to_gitee
|
||||
id: publish_to_gitee
|
||||
run: |
|
||||
export GITEE_TOKEN=${{ secrets.GITEE_TOKEN }}
|
||||
rm -rf ./pnpm*.yaml
|
||||
npm install -g pnpm
|
||||
pnpm install
|
||||
npm run publish_to_gitee
|
||||
working-directory: ./
|
||||
|
||||
39
.github/workflows/publish-github.yaml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: publish-github
|
||||
on:
|
||||
push:
|
||||
branches: ['v2-dev']
|
||||
paths:
|
||||
- "trigger/publish.trigger"
|
||||
workflow_run:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
publish-github:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
|
||||
- name: publish_to_github
|
||||
id: publish_to_github
|
||||
run: |
|
||||
export GITHUB_TOKEN=${{ secrets.GH_TOKEN }}
|
||||
rm -rf ./pnpm*.yaml
|
||||
npm install -g pnpm
|
||||
pnpm install
|
||||
npm run publish_to_github
|
||||
working-directory: ./
|
||||
|
||||
2
.github/workflows/release-image.yml
vendored
@@ -117,7 +117,6 @@ jobs:
|
||||
# registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:${{steps.get_certd_version.outputs.result}}
|
||||
# greper/certd-agent:latest
|
||||
# greper/certd-agent:${{steps.get_certd_version.outputs.result}}
|
||||
|
||||
- name: deploy-certd-doc
|
||||
uses: tyrrrz/action-http-request@master
|
||||
with:
|
||||
@@ -131,3 +130,4 @@ jobs:
|
||||
Content-Type: application/json
|
||||
retry-count: 3
|
||||
retry-delay: 5000
|
||||
|
||||
34
.github/workflows/sync-to-atomgit-dev.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: sync-to-atomgit-dev
|
||||
on:
|
||||
push:
|
||||
branches: ['v2-dev']
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout work repo # 1. 检出当前仓库(certd-sync-work)
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
|
||||
run: |
|
||||
git config --global user.name "xiaojunnuo"
|
||||
git config --global user.email "xiaojunnuo@qq.com"
|
||||
|
||||
- name: Set git token # 3. 给git命令设置token,用于push到目标仓库
|
||||
uses: de-vri-es/setup-git-credentials@v2
|
||||
with: # token 格式为: username:password
|
||||
credentials: https://greper:${{secrets.ATOMGIT_TOKEN}}@atomgit.com
|
||||
|
||||
- name: push to atomgit # 4. 执行同步
|
||||
run: |
|
||||
git remote add upstream https://atomgit.com/certd/certd
|
||||
git push --set-upstream upstream v2-dev
|
||||
|
||||
34
.github/workflows/sync-to-atomgit.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: sync-to-atomgit
|
||||
on:
|
||||
push:
|
||||
branches: ['v2']
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout work repo # 1. 检出当前仓库(certd-sync-work)
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
|
||||
run: |
|
||||
git config --global user.name "xiaojunnuo"
|
||||
git config --global user.email "xiaojunnuo@qq.com"
|
||||
|
||||
- name: Set git token # 3. 给git命令设置token,用于push到目标仓库
|
||||
uses: de-vri-es/setup-git-credentials@v2
|
||||
with: # token 格式为: username:password
|
||||
credentials: https://greper:${{secrets.ATOMGIT_TOKEN}}@atomgit.com
|
||||
|
||||
- name: push to atomgit # 4. 执行同步
|
||||
run: |
|
||||
git remote add upstream https://atomgit.com/certd/certd
|
||||
git push --set-upstream upstream v2
|
||||
|
||||
2
.npmrc
@@ -3,4 +3,4 @@ prefer-workspace-packages=true
|
||||
better_sqlite3_binary_host=https://registry.npmmirror.com/-/binary/better-sqlite3
|
||||
better_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3
|
||||
better-sqlite3_binary_host=https://registry.npmmirror.com/-/binary/better-sqlite3
|
||||
better-sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3
|
||||
better-sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3
|
||||
10
.vscode/launch.json
vendored
@@ -44,6 +44,16 @@
|
||||
"runtimeArgs": ["dev-pg"],
|
||||
"console": "integratedTerminal",
|
||||
"internalConsoleOptions": "neverOpen"
|
||||
},
|
||||
{
|
||||
"name": "server-pgpl",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"cwd": "${workspaceFolder}/packages/ui/certd-server",
|
||||
"runtimeExecutable": "pnpm",
|
||||
"runtimeArgs": ["dev-pgpl"],
|
||||
"console": "integratedTerminal",
|
||||
"internalConsoleOptions": "neverOpen"
|
||||
},
|
||||
{
|
||||
"name": "server-common",
|
||||
|
||||
12
.vscode/settings.json
vendored
@@ -10,5 +10,15 @@
|
||||
"editor.defaultFormatter": "vscode.typescript-language-features"
|
||||
},
|
||||
"editor.tabSize": 2,
|
||||
"explorer.autoReveal": false
|
||||
"explorer.autoReveal": false,
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "vscode.typescript-language-features"
|
||||
},
|
||||
"[less]": {
|
||||
"editor.defaultFormatter": "vscode.css-language-features"
|
||||
},
|
||||
"scm.repositories.visible": 9,
|
||||
"scm.repositories.explorer": false,
|
||||
"scm.repositories.selectionMode": "multiple",
|
||||
"scm.repositories.sortOrder": "discovery time"
|
||||
}
|
||||
196
CHANGELOG.md
@@ -3,6 +3,202 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复部署到openwrt错误的bug ([9ac33f9](https://github.com/certd/certd/commit/9ac33f9b9ba7727fcbbd320dd866bc048cbb3d72))
|
||||
* 修复新版本上传到阿里云cas后,其他依赖任务无法部署的bug ([99f5b8e](https://github.com/certd/certd/commit/99f5b8ebc1c64798ceb42042ad71cf71e967beb0))
|
||||
* esxi部署失败的bug ([6ab1fca](https://github.com/certd/certd/commit/6ab1fcaf894f7ce343af4b5bf4b0d67438df6618))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 修改sql升级语句,兼容mysql5.7 ([02f89a9](https://github.com/certd/certd/commit/02f89a9c9d77850437285844670aed441e5953c3))
|
||||
* 已登录状态访问登录页面自动跳转到首页 ([bd8caff](https://github.com/certd/certd/commit/bd8caff0b754cb13530cf0f1644b33e29fde5d01))
|
||||
* 优化access授权支持remote-auto-complete ([2f40f79](https://github.com/certd/certd/commit/2f40f795ee6131132d3fab2601f92a567bbdc4b7))
|
||||
* access 插件支持remote-select等配置 ([d286c04](https://github.com/certd/certd/commit/d286c040a5232dcca829945734affead3ee08b3c))
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 双重验证显示secret ([febd6d3](https://github.com/certd/certd/commit/febd6d32cfe6d89ccecf26bf15141df7c456e5c6))
|
||||
* 优化申请证书最大超时时长 ([00f67d8](https://github.com/certd/certd/commit/00f67d86d68f4f83cfafe2fbfeb4af0d86f9d20e))
|
||||
* 支持设置默认的证书申请地址的反向代理 ([0cfb94b](https://github.com/certd/certd/commit/0cfb94b0ba6a6dc3bb0d0a81a1912068a4e6b6b6))
|
||||
* 子域名托管域名支持配置通配符 ([3f7ac93](https://github.com/certd/certd/commit/3f7ac939326b0c7ec013a7534b6c0e58fb3e8cb4))
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复有域名记录时,域名输入框无法关闭的bug ([54c8217](https://github.com/certd/certd/commit/54c8217808453b121abf646b004596f28932509f))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* eab从更多参数中挪到外面 ([5ea4f46](https://github.com/certd/certd/commit/5ea4f46de7ae403a7a16e9488dc1d9c7523d019a))
|
||||
* 第三方登录支持Microsoft ([beb7a4c](https://github.com/certd/certd/commit/beb7a4c99277262bb9681c5594cfcd3e36c52074))
|
||||
* 优化zerossl申请证书稳定性 ([4d86fb3](https://github.com/certd/certd/commit/4d86fb319b81dbf6fa6485982105725b1b066593))
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复新网找错域名的bug ([bd511f9](https://github.com/certd/certd/commit/bd511f97cb7fbdcaeff7ac899f0460a5c7b41826))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 当域名管理中没有域名时,创建流水线时不展开域名选择框 ([9166a57](https://github.com/certd/certd/commit/9166a579301a60750f0b72b6a42b0c8d730695fd))
|
||||
* count tip ([e19743f](https://github.com/certd/certd/commit/e19743f70553700f1f91bff76f87370f749dd247))
|
||||
* oauth支持github 和google, 修复头像显示问题 ([693a4a6](https://github.com/certd/certd/commit/693a4a663385ced3176286bf4b5f3566da83d90e))
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 阿里云esa查询证书限制接口无效,改成配置证书数量上限检查方式进行清理 ([2302567](https://github.com/certd/certd/commit/230256793f8ad87ef8a0738c37108bf7b5ab9853))
|
||||
* 某些情况下登陆页面没有显示重置密码文档链接的问题 ([40801d0](https://github.com/certd/certd/commit/40801d0a0668c77adb57fae42b4b6615b198a88d))
|
||||
* 修复部署到火山引擎vod,获取域名列表为空的bug ([0719f4c](https://github.com/certd/certd/commit/0719f4c99e9198544d03431107b53652e076e881))
|
||||
* 修复litessl new-nonce报428的bug ([540ef96](https://github.com/certd/certd/commit/540ef967457a7871637cfdb5012ed1fa3261757b))
|
||||
* 修复oidc配置取消后获取登出地址失败后无法列出oauth列表的bug ([eb5de15](https://github.com/certd/certd/commit/eb5de150332fd914c56b812c3ba2c2445f902bb7))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 将重置密码的日志挪到启动成功之后,方便查看 ([0fa9b34](https://github.com/certd/certd/commit/0fa9b344e08cf355aee7a7566f061cc5d95dc374))
|
||||
* 支持绑定两个url地址 ([a2e9a41](https://github.com/certd/certd/commit/a2e9a41a7e712395c0e3ee6fe55b370aa1fc1f12))
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1:: 形式的ipv6校验失败的bug ([8b96f21](https://github.com/certd/certd/commit/8b96f218d5284033f10c186c0ce18e4c16d8e9b2))
|
||||
* 修复阿里云esa超过免费配额之后无法部署证书的bug,改成删除最旧的那张证书 ([32de8d9](https://github.com/certd/certd/commit/32de8d9ccb08d26414adbdde950d7cd405dc344a))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 当ip证书天数太小时,自动调整更新天数,避免每次运行都重新申请ip证书 ([433e98b](https://github.com/certd/certd/commit/433e98b6450fa7d0491151f159e432bf3dfe4feb))
|
||||
* 首页证书数量支持点击跳转 ([52cbff0](https://github.com/certd/certd/commit/52cbff0e15329aecd3edcf81315fb7ceab9ec290))
|
||||
* 修复旧版本流水线数据发送通知标题为空的bug ([9bee0e4](https://github.com/certd/certd/commit/9bee0e460bfebe8db76742b80b2d52854392f4de))
|
||||
* 验证码支持 Cloudflare Turnstile ,谨慎启用,国内被墙了 ([ca43c77](https://github.com/certd/certd/commit/ca43c775250154def63c4acd96d65dc95d1c0c2b))
|
||||
* 优化证书未过期时的任务日志提示 ([ac85488](https://github.com/certd/certd/commit/ac85488245197694560aad7df9425ca215ef7ff7))
|
||||
* 支持部署到阿里云GA ([1a0d3ee](https://github.com/certd/certd/commit/1a0d3eeb1b0b5ce08f05af84b6161e00c1fe1815))
|
||||
* 支持部署到华为elb ([60c8ace](https://github.com/certd/certd/commit/60c8ace443e848155d3ce12e95b84766a4610d3a))
|
||||
* 支持部署到AcePanel ([1661cae](https://github.com/certd/certd/commit/1661caed05e3413dc3e2b14ce62b75aa03ad90e0))
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 当通知配置被删除时,使用默认通知配置进行发送 ([5398300](https://github.com/certd/certd/commit/53983002b6553a929b72e2c70a26809a9f306e89))
|
||||
* 站点检查多个ip连接超时的报错显示不出来的bug ([33b284a](https://github.com/certd/certd/commit/33b284afc0ae6391658d573e32b1ce7765e51cb2))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 部署插件支持ucloud alb ([640950d](https://github.com/certd/certd/commit/640950d4c847c72cae2986e3c2cae10d52a67fdf))
|
||||
* 多个dns 提供商支持导入域名 ([d3c0914](https://github.com/certd/certd/commit/d3c0914ac16db8ac77f9c60285bb20cfab7a3cb0))
|
||||
* 首次使用提示新手教程按钮 ([e054c8f](https://github.com/certd/certd/commit/e054c8fc55063fd96548f1c19049070524a63411))
|
||||
* 输入证书域名时,支持点击导入域名 ([40be424](https://github.com/certd/certd/commit/40be42406c6fd5de11f594fc6913178d9e7d8943))
|
||||
* 所有的dnsprovider 支持导入域名列表 ([9f21b1a](https://github.com/certd/certd/commit/9f21b1a09797d7dab253e4416c538b55fb8f4488))
|
||||
* 优化首页统计数据,饼图替换成证书数量统计 ([9fa1c2e](https://github.com/certd/certd/commit/9fa1c2eb3e55ef630333ae24284aa8b54e3414b6))
|
||||
* 优化首页图标 ([998de0f](https://github.com/certd/certd/commit/998de0f9a031339b019aa7a09e61e994664a8047))
|
||||
* 域名导入任务进度条 ([7058d5c](https://github.com/certd/certd/commit/7058d5cb935cab8c75b98493ed497a22dbe70883))
|
||||
* 站点监控,检查状态挪到前面显示 ([48f1bf0](https://github.com/certd/certd/commit/48f1bf091869b87dd17feaca5efd8680ef741582))
|
||||
* 证书仓库页面增加到期状态查询条件 ([58c3d70](https://github.com/certd/certd/commit/58c3d7087bb66358d896a741e12005f690b2bd5e))
|
||||
* 证书流水线创建域名输入框支持获取域名数据进行选择 ([1d5b1c2](https://github.com/certd/certd/commit/1d5b1c239cf350920eb2eb9fd293af74ef412853))
|
||||
* 支持导入51dns域名 ([7eb9694](https://github.com/certd/certd/commit/7eb96942214aed0dfc9c3c5a669374da67052c49))
|
||||
* ucloud支持部署到alb ([78004bd](https://github.com/certd/certd/commit/78004bdfb552a3b83298fa09d518ca282a529d90))
|
||||
* ucloud支持部署到ulb(alb、clb统一成一个) ([c408687](https://github.com/certd/certd/commit/c408687af7669afe733b5506720ca795555acdce))
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 编辑插件author不允许出现符号 ([5ea2b09](https://github.com/certd/certd/commit/5ea2b09dc30397c086a2498f958f661e7fef10fc))
|
||||
* 修复插件修改名字和删除后没有注销注册的bug ([61192b9](https://github.com/certd/certd/commit/61192b998a7088a8f446fd224cc242def462a79b))
|
||||
* 修复流水线复制出错的bug ([418bcdd](https://github.com/certd/certd/commit/418bcddc95bf19d2659d2a9cfe336bc059d157b0))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化流水线创建入口,各种证书申请任务类型拆分成多个按钮 ([f75c73d](https://github.com/certd/certd/commit/f75c73d739ee271fb718148416836dbe09bb3266))
|
||||
* 域名导入 ([ad64384](https://github.com/certd/certd/commit/ad64384891c13342980b7559924666dcfb2796c2))
|
||||
* 支持从提供商导入域名列表 ([f442363](https://github.com/certd/certd/commit/f4423638a2ee779d48fc17b3819ce3bee55b0361))
|
||||
* 支持同步域名过期时间 ([a97cee8](https://github.com/certd/certd/commit/a97cee84f3bfdeeb2083d91f748cac5405fed6ae))
|
||||
* cname记录支持批量导入和导出 ([607afe8](https://github.com/certd/certd/commit/607afe864a12d6f50993895a4e10f4c9a3dd8fee))
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复自定义插件name丢失author导致找不到插件的bug ([2fbb58e](https://github.com/certd/certd/commit/2fbb58eb2b239eab4864f90aa72b0ef2ada38e8f))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化内存占用 ([4fc8acc](https://github.com/certd/certd/commit/4fc8acce8c1beec38c24b0977b71ff6b18cb52c9))
|
||||
* 自定义插件支持使用_ctx.import("/@/xxx.js")以绝对路径引用模块 ([9eace86](https://github.com/certd/certd/commit/9eace86aeeb48c23b55102fc5d42088294d9eb97))
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复禁用第三方登录自动注册无效的bug ([7ee39fd](https://github.com/certd/certd/commit/7ee39fd4eddfc847bcef879f0904a4319993d081))
|
||||
* 修复又拍云upyun密码错误没有报错的bug ([235972f](https://github.com/certd/certd/commit/235972f3dabe0b87879a2d9950367dc45edfebe8))
|
||||
* 修复重启certd后,再启用流水线,不会自动执行的bug ([468ccbf](https://github.com/certd/certd/commit/468ccbf2b725fc4b78ce4b950a114e4a4be57698))
|
||||
* 优化源码部署缺少wget的提示 ([f193341](https://github.com/certd/certd/commit/f193341eaef765b7586a0b6e7c73015470536cc2))
|
||||
|
||||
### Features
|
||||
|
||||
* 【破坏性更新】插件改为metadata加载模式,plugin-cert、plugin-lib包部分代码转移到certd-server中,影响自定义插件,需要修改相关import引用 ([a3fb249](https://github.com/certd/certd/commit/a3fb24993d7ac8fbb0bb354fa02ef067f609021e))
|
||||
* 通过metadata加载插件,降低内存占用 ([7634f15](https://github.com/certd/certd/commit/7634f153b7004462f207062c0502d8345e318cc7))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 流水线页面可以查看证书过期时间 ([be03d8e](https://github.com/certd/certd/commit/be03d8e13752c355dbec158da78b9cb4c3b3bb5d))
|
||||
* 每页记录条数保持 ([14f9987](https://github.com/certd/certd/commit/14f99875fb3f535fa5ffb7bf5db3960b105aa7aa))
|
||||
* 手机号登录放到前面 ([26ac081](https://github.com/certd/certd/commit/26ac08118219407c5dd3afc35130cdd48b8fab05))
|
||||
* 新增部署1panel面板证书插件 ([4243622](https://github.com/certd/certd/commit/42436224148d6fffe5da8e5e0185a698e079032b))
|
||||
* 优化微信支付对接文档 ([64e0d9a](https://github.com/certd/certd/commit/64e0d9a4d54b0d9da028be2c5e0ece7a97b2c250))
|
||||
* 优化站点监控,支持设置忽略主站证书一致性,支持开启和关闭自动同步ip ([26f75c7](https://github.com/certd/certd/commit/26f75c71ba8866278dbe117f1bfaf671e7f70781))
|
||||
* 增加邮件发送证书模版配置 ([cabc4da](https://github.com/certd/certd/commit/cabc4da3ac003a8c699c69f5bffea4c149be185c))
|
||||
* 站点监控增加是否自动同步IP开关 ([5268904](https://github.com/certd/certd/commit/52689049ae8e004e1252ab1e2872fbf676e0295f))
|
||||
* 证书流水线可以开启webhook ([840bd52](https://github.com/certd/certd/commit/840bd526714072315244a6900c95395d2d62f647))
|
||||
* 支持部署到exsi,openwrt ([dae87e2](https://github.com/certd/certd/commit/dae87e26a3266a2bf26afe1ef4c489a3f6bf41e4))
|
||||
* 支持公告功能 ([a79fe1f](https://github.com/certd/certd/commit/a79fe1f350f2991af9e5b50825f1776029677fc5))
|
||||
* 支持webhook触发流水线,新增触发类型图标显示 ([1a29541](https://github.com/certd/certd/commit/1a2954114063a8b994c257a90e5814e0a3a8d924))
|
||||
* webhook触发器一个流水线限制只能添加一个 ([6c39d7b](https://github.com/certd/certd/commit/6c39d7b1eecb679cb6506b0e3557e8152e01417d))
|
||||
* zenlayer证书更新 ([9ba6c83](https://github.com/certd/certd/commit/9ba6c838215d0750cda925778a47002a521f05e9))
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 发送证书到邮箱插件的邮件模版转为使用邮箱配置中的通用模版 ([c5a3003](https://github.com/certd/certd/commit/c5a3003cf7b640500a90ec2c8961859ffe6fdb18))
|
||||
* 首页最快到期证书,不包含已禁用的流水线 ([d731956](https://github.com/certd/certd/commit/d731956b066e4dbbe24d4de7b3d3679b355eb97c))
|
||||
* 修复部署到华为obs 报错的bug ([dd19afc](https://github.com/certd/certd/commit/dd19afce928a7f36312af9df1e7e5ed3eb1e214a))
|
||||
* 修复从模版创建的流水线不会自动执行的bug ([833808c](https://github.com/certd/certd/commit/833808c5deb716122b241d3d67349d2d6a18bf45))
|
||||
* 修复流水线列表step数量统计错误的bug ([0e5a4fb](https://github.com/certd/certd/commit/0e5a4fb098d3261b690c551cf2b95198cac487e7))
|
||||
* 修复用户删除后,用相同的oauth授权登录报错用户不存在的问题 ([e505916](https://github.com/certd/certd/commit/e5059165259e4d757abc811c0c14bbc4a3dbaee9))
|
||||
* 修复站点ip监控报主站与ip证书过期时间不一致的问题 ([62f8525](https://github.com/certd/certd/commit/62f8525dd5da95dc07ed103f602644c6e5f7f8e3))
|
||||
* 修复serverchan3 没有选择tags报错的bug ([5bbf210](https://github.com/certd/certd/commit/5bbf210394883c4893c365bd16e999490b6e9b41))
|
||||
* telegram 修复消息内存在横杠无法发出的bug ([5f4469e](https://github.com/certd/certd/commit/5f4469e306187c31d8a74d53b17ea3a213420367))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 批量修改定时时间支持随机时间 ([d0f653d](https://github.com/certd/certd/commit/d0f653da9a2970920e961e7404ff04080bccd343))
|
||||
* 批量运行优化,支持普通运行和强制重新运行 ([039c62b](https://github.com/certd/certd/commit/039c62b09b37cdda35d33c6ee9adecad62dee75c))
|
||||
* 升级lego到4.30.1版本 ([136e8dd](https://github.com/certd/certd/commit/136e8dd7c5ff7199ff4b0bcca95b8a03aa847553))
|
||||
* 腾讯云EO增加请求参数打印 ([5b5deac](https://github.com/certd/certd/commit/5b5deac7d98684eda5c68384241a4d62c48d803b))
|
||||
* 优化阿里云esa清理证书时机 ([5359a76](https://github.com/certd/certd/commit/5359a7670fac5a18c4294b37a34227308a0deed6))
|
||||
* 优化源码方式部署,前端无需编译 ([13ddc97](https://github.com/certd/certd/commit/13ddc979ec7953e3db8db76dd23fd85a3b3c7997))
|
||||
* 支持部署到goedge ([44bf4b1](https://github.com/certd/certd/commit/44bf4b1cc1aafa2d711c3b8e408009f0ceb413eb))
|
||||
* 支持从阿里云商用证书订单中获取证书 ([8872466](https://github.com/certd/certd/commit/887246696861c3a0b1f99fd9ad978caea423c650))
|
||||
* 支持授权给管理员查看和下载用户证书 ([1347355](https://github.com/certd/certd/commit/1347355cb117694abe99da385352a19771a32e84))
|
||||
* 支持执行队列,避免同一时间触发流水线太多导致被限制 ([888d959](https://github.com/certd/certd/commit/888d9591fe9730b529e1c355d71f41e7ec9b479d))
|
||||
* 支持aws route53 dns ([cbb8319](https://github.com/certd/certd/commit/cbb8319cfa48673e81ec15894adc3376c173c97e))
|
||||
* 支持ucloud waf(未测试) ([a248367](https://github.com/certd/certd/commit/a248367b154c38661a6797ef64e37ec99d4e2abf))
|
||||
* 支持ucloud,上传到ussl,部署到ucdn ([e61daae](https://github.com/certd/certd/commit/e61daaee2d0dec19710cd4ec759219a071f2435e))
|
||||
* 执行队列数量支持设置 ([cd94488](https://github.com/certd/certd/commit/cd944882c3272adad4a2da94a3889a01fe05fe13))
|
||||
* aws route53 ([8caab1f](https://github.com/certd/certd/commit/8caab1fd9264df548f467b94202d567107b7a30b))
|
||||
* ip证书校验方式提示 ([773cada](https://github.com/certd/certd/commit/773cada57a01fb28ea8602062aaeec3d45109ea9))
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
43
README.md
@@ -27,22 +27,21 @@ Certd® 是一个免费的全自动证书管理系统,让你的网站证书永
|
||||
## 一、特性
|
||||
本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。
|
||||
|
||||
* 全自动申请证书(支持所有注册商注册的域名,支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式)
|
||||
* 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等70+部署插件)
|
||||
* 支持通配符域名/泛域名,支持多个域名打到一个证书上,支持pem、pfx、der、jks等多种证书格式
|
||||
* 邮件通知、webhook通知、企微、钉钉、飞书、anpush等多种通知方式
|
||||
* 私有化部署,数据保存本地,安装简单快捷,镜像由Github Actions构建,过程公开透明
|
||||
* 授权加密,站点隐藏,2FA,密码防爆破等多重安全保障
|
||||
* 支持SQLite,PostgreSQL、MySQL多种数据库
|
||||
* 开放接口支持
|
||||
* 站点证书监控
|
||||
* 多用户管理
|
||||
* 多语言支持(中英双语切换)
|
||||
* 各版本向下兼容,一键无忧升级
|
||||
|
||||
|
||||

|
||||
* **全自动申请证书**: 支持所有注册商注册的域名,支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式
|
||||
* **全自动部署更新证书**: 目前支持部署到主机、阿里云、腾讯云等110+部署插件
|
||||
* **多种证书格式**: 支持pem、pfx、der、jks、p7b
|
||||
* **免费通配符域名/泛域名证书**: 支持多个域名打到一个证书上
|
||||
* **多种通知方式**: 邮件通知、webhook通知、企微、钉钉、飞书、anpush等多种通知方式
|
||||
* **私有化部署**: 数据保存本地,安装简单快捷,镜像由Github Actions构建,过程公开透明
|
||||
* **多重安全保障**: 授权加密,站点隐藏,2FA,密码防爆破等多重安全保障
|
||||
* **多数据库支持**:支持SQLite、PostgreSQL、MySQL
|
||||
* **开放接口支持**: 提供RESTful API接口,方便集成到其他系统
|
||||
* **站点证书监控**: 定时监控网站证书的过期时间
|
||||
* **多用户管理**: 用户可以管理自己的证书流水线
|
||||
* **多语言支持**: 中英双语切换
|
||||
* **无忧升级**: 版本向下兼容
|
||||
|
||||

|
||||
|
||||
## 二、在线体验
|
||||
|
||||
@@ -158,28 +157,30 @@ https://certd.handfree.work/
|
||||
| 二维码 | <img height="230" src="./docs/guide/contact/images/me.png"> |
|
||||
|
||||
|
||||
## 八、捐赠
|
||||
## 八、赞助捐赠
|
||||
|
||||
开源为什么要做专业版收费?
|
||||
1. 纯靠为爱发电不可持续(比如:我的dev-sidecar项目即便是拥有20K+star,也差点凉凉,幸亏有另外大佬接手用爱发电)
|
||||
1. 纯靠为爱发电不可持续(比如:我的[dev-sidecar项目](https://github.com/docmirror/dev-sidecar)即便是拥有20K+star,也差点凉凉,幸亏有另外大佬接手用爱发电)
|
||||
2. 没有赞助的项目,作者会比较任性,不会用心倾听用户的心声,不顾用户体验(比如:下意识拒绝需求、频繁破坏性变更升级、全盘推倒重来之类的)
|
||||
3. 没有赞助的项目,交流群的戾气有时候比较重,容易起冲突
|
||||
|
||||
发电权益:
|
||||
1. 可加入发电专属VIP群,可以获得作者一对一技术支持,必要时可以远程协助
|
||||
赞助权益:
|
||||
1. 可加入专属VIP群,可以获得作者一对一技术支持,必要时可以远程协助
|
||||
2. 您的需求我们将优先实现,并且可能将作为专业版功能提供
|
||||
3. 获得专业版功能
|
||||
|
||||
[50元专业版优惠券限时领取](https://app.handfree.work/subject/#/app/certd/product)
|
||||
|
||||
专业版特权对比
|
||||
|
||||
| 功能 | 免费版 | 专业版 |
|
||||
|---------|---------------------------------------|--------------------------------|
|
||||
| 免费证书申请 | 免费无限制 | 免费无限制 |
|
||||
| 域名数量 | 无限制 | 无限制 |
|
||||
| 证书域名数量 | 无限制 | 无限制 |
|
||||
| 证书流水线条数 | 无限制 | 无限制 |
|
||||
| 站点证书监控 | 限制1条 | 无限制 |
|
||||
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署、宝塔、1Panel等大部分插件 | 群晖、威联通、proxmox等 |
|
||||
| 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、钉钉、飞书、anpush、server酱等 |
|
||||
| 站点监控 | 限制1条 | 无限制 |
|
||||
| 批量操作 | 无 | 流水线模版,流水线复制,批量运行,批量设置通知、定时等 |
|
||||
| VIP群 | 无 | 可加,一对一技术支持,必要时可申请远程协助 |
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ services:
|
||||
# - certd_typeorm_dataSource_default_password=yourpasswd # 密码
|
||||
# - certd_typeorm_dataSource_default_database=certd # 数据库名
|
||||
|
||||
# #↓↓↓↓ ----------------------------- 使用mysql数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
|
||||
# #↓↓↓↓ ----------------------------- 使用mysql8数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
|
||||
# - certd_flyway_scriptDir=./db/migration-mysql # 升级脚本目录
|
||||
# - certd_typeorm_dataSource_default_type=mysql # 数据库类型, 或者 mariadb
|
||||
# - certd_typeorm_dataSource_default_host=localhost # 数据库地址
|
||||
|
||||
@@ -81,7 +81,8 @@ export default defineConfig({
|
||||
]
|
||||
},
|
||||
{text: "演示教程", link: "/guide/tutorial.md"},
|
||||
{text: "版本升级", link: "/guide/install/upgrade.md"}
|
||||
{text: "版本升级", link: "/guide/install/upgrade.md"},
|
||||
{text: "赞助专业版", link: "/guide/donate/"},
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -107,12 +108,12 @@ export default defineConfig({
|
||||
text: "常见问题",
|
||||
items: [
|
||||
{text: "QA", link: "/guide/qa/use.md"},
|
||||
{text: "忘记密码/无法登录", link: "/guide/use/forgotpasswd/"},
|
||||
{text: "群晖证书部署", link: "/guide/use/synology/"},
|
||||
{text: "腾讯云密钥获取", link: "/guide/use/tencent/"},
|
||||
{text: "连接windows主机", link: "/guide/use/host/windows.md"},
|
||||
{text: "Google EAB获取", link: "/guide/use/google/"},
|
||||
{text: "阿里云相关", link: "/guide/use/aliyun/"},
|
||||
{text: "忘记密码", link: "/guide/use/forgotpasswd/"},
|
||||
{text: "数据备份", link: "/guide/use/backup/"},
|
||||
{text: "Certd本身的证书更新", link: "/guide/use/https/index.md"},
|
||||
{text: "js脚本插件使用", link: "/guide/use/custom-script/index.md"},
|
||||
@@ -123,6 +124,7 @@ export default defineConfig({
|
||||
{text: "子域名托管", link: "/guide/use/cert/subdomain.md"},
|
||||
{text: "流水线有效期", link: "/guide/use/pipeline/valid.md"},
|
||||
{text: "IP证书申请", link: "/guide/use/cert/ip.md"},
|
||||
{text: "插件开发", link: "/guide/use/dev/plugin.md"},
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -139,7 +141,6 @@ export default defineConfig({
|
||||
{text: "更新日志", link: "/guide/changelogs/CHANGELOG.md"},
|
||||
{text: "镜像说明", link: "/guide/image.md"},
|
||||
{text: "联系我们", link: "/guide/contact/"},
|
||||
{text: "捐赠", link: "/guide/donate/"},
|
||||
{text: "开源协议", link: "/guide/license/"},
|
||||
{text: "我的其他开源项目", link: "/guide/link/"},
|
||||
]
|
||||
|
||||
@@ -3,6 +3,187 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 双重验证显示secret ([febd6d3](https://github.com/certd/certd/commit/febd6d32cfe6d89ccecf26bf15141df7c456e5c6))
|
||||
* 优化申请证书最大超时时长 ([00f67d8](https://github.com/certd/certd/commit/00f67d86d68f4f83cfafe2fbfeb4af0d86f9d20e))
|
||||
* 支持设置默认的证书申请地址的反向代理 ([0cfb94b](https://github.com/certd/certd/commit/0cfb94b0ba6a6dc3bb0d0a81a1912068a4e6b6b6))
|
||||
* 子域名托管域名支持配置通配符 ([3f7ac93](https://github.com/certd/certd/commit/3f7ac939326b0c7ec013a7534b6c0e58fb3e8cb4))
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复有域名记录时,域名输入框无法关闭的bug ([54c8217](https://github.com/certd/certd/commit/54c8217808453b121abf646b004596f28932509f))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* eab从更多参数中挪到外面 ([5ea4f46](https://github.com/certd/certd/commit/5ea4f46de7ae403a7a16e9488dc1d9c7523d019a))
|
||||
* 第三方登录支持Microsoft ([beb7a4c](https://github.com/certd/certd/commit/beb7a4c99277262bb9681c5594cfcd3e36c52074))
|
||||
* 优化zerossl申请证书稳定性 ([4d86fb3](https://github.com/certd/certd/commit/4d86fb319b81dbf6fa6485982105725b1b066593))
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复新网找错域名的bug ([bd511f9](https://github.com/certd/certd/commit/bd511f97cb7fbdcaeff7ac899f0460a5c7b41826))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 当域名管理中没有域名时,创建流水线时不展开域名选择框 ([9166a57](https://github.com/certd/certd/commit/9166a579301a60750f0b72b6a42b0c8d730695fd))
|
||||
* count tip ([e19743f](https://github.com/certd/certd/commit/e19743f70553700f1f91bff76f87370f749dd247))
|
||||
* oauth支持github 和google, 修复头像显示问题 ([693a4a6](https://github.com/certd/certd/commit/693a4a663385ced3176286bf4b5f3566da83d90e))
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 阿里云esa查询证书限制接口无效,改成配置证书数量上限检查方式进行清理 ([2302567](https://github.com/certd/certd/commit/230256793f8ad87ef8a0738c37108bf7b5ab9853))
|
||||
* 某些情况下登陆页面没有显示重置密码文档链接的问题 ([40801d0](https://github.com/certd/certd/commit/40801d0a0668c77adb57fae42b4b6615b198a88d))
|
||||
* 修复部署到火山引擎vod,获取域名列表为空的bug ([0719f4c](https://github.com/certd/certd/commit/0719f4c99e9198544d03431107b53652e076e881))
|
||||
* 修复litessl new-nonce报428的bug ([540ef96](https://github.com/certd/certd/commit/540ef967457a7871637cfdb5012ed1fa3261757b))
|
||||
* 修复oidc配置取消后获取登出地址失败后无法列出oauth列表的bug ([eb5de15](https://github.com/certd/certd/commit/eb5de150332fd914c56b812c3ba2c2445f902bb7))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 将重置密码的日志挪到启动成功之后,方便查看 ([0fa9b34](https://github.com/certd/certd/commit/0fa9b344e08cf355aee7a7566f061cc5d95dc374))
|
||||
* 支持绑定两个url地址 ([a2e9a41](https://github.com/certd/certd/commit/a2e9a41a7e712395c0e3ee6fe55b370aa1fc1f12))
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1:: 形式的ipv6校验失败的bug ([8b96f21](https://github.com/certd/certd/commit/8b96f218d5284033f10c186c0ce18e4c16d8e9b2))
|
||||
* 修复阿里云esa超过免费配额之后无法部署证书的bug,改成删除最旧的那张证书 ([32de8d9](https://github.com/certd/certd/commit/32de8d9ccb08d26414adbdde950d7cd405dc344a))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 当ip证书天数太小时,自动调整更新天数,避免每次运行都重新申请ip证书 ([433e98b](https://github.com/certd/certd/commit/433e98b6450fa7d0491151f159e432bf3dfe4feb))
|
||||
* 首页证书数量支持点击跳转 ([52cbff0](https://github.com/certd/certd/commit/52cbff0e15329aecd3edcf81315fb7ceab9ec290))
|
||||
* 修复旧版本流水线数据发送通知标题为空的bug ([9bee0e4](https://github.com/certd/certd/commit/9bee0e460bfebe8db76742b80b2d52854392f4de))
|
||||
* 验证码支持 Cloudflare Turnstile ,谨慎启用,国内被墙了 ([ca43c77](https://github.com/certd/certd/commit/ca43c775250154def63c4acd96d65dc95d1c0c2b))
|
||||
* 优化证书未过期时的任务日志提示 ([ac85488](https://github.com/certd/certd/commit/ac85488245197694560aad7df9425ca215ef7ff7))
|
||||
* 支持部署到阿里云GA ([1a0d3ee](https://github.com/certd/certd/commit/1a0d3eeb1b0b5ce08f05af84b6161e00c1fe1815))
|
||||
* 支持部署到华为elb ([60c8ace](https://github.com/certd/certd/commit/60c8ace443e848155d3ce12e95b84766a4610d3a))
|
||||
* 支持部署到AcePanel ([1661cae](https://github.com/certd/certd/commit/1661caed05e3413dc3e2b14ce62b75aa03ad90e0))
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 当通知配置被删除时,使用默认通知配置进行发送 ([5398300](https://github.com/certd/certd/commit/53983002b6553a929b72e2c70a26809a9f306e89))
|
||||
* 站点检查多个ip连接超时的报错显示不出来的bug ([33b284a](https://github.com/certd/certd/commit/33b284afc0ae6391658d573e32b1ce7765e51cb2))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 部署插件支持ucloud alb ([640950d](https://github.com/certd/certd/commit/640950d4c847c72cae2986e3c2cae10d52a67fdf))
|
||||
* 多个dns 提供商支持导入域名 ([d3c0914](https://github.com/certd/certd/commit/d3c0914ac16db8ac77f9c60285bb20cfab7a3cb0))
|
||||
* 首次使用提示新手教程按钮 ([e054c8f](https://github.com/certd/certd/commit/e054c8fc55063fd96548f1c19049070524a63411))
|
||||
* 输入证书域名时,支持点击导入域名 ([40be424](https://github.com/certd/certd/commit/40be42406c6fd5de11f594fc6913178d9e7d8943))
|
||||
* 所有的dnsprovider 支持导入域名列表 ([9f21b1a](https://github.com/certd/certd/commit/9f21b1a09797d7dab253e4416c538b55fb8f4488))
|
||||
* 优化首页统计数据,饼图替换成证书数量统计 ([9fa1c2e](https://github.com/certd/certd/commit/9fa1c2eb3e55ef630333ae24284aa8b54e3414b6))
|
||||
* 优化首页图标 ([998de0f](https://github.com/certd/certd/commit/998de0f9a031339b019aa7a09e61e994664a8047))
|
||||
* 域名导入任务进度条 ([7058d5c](https://github.com/certd/certd/commit/7058d5cb935cab8c75b98493ed497a22dbe70883))
|
||||
* 站点监控,检查状态挪到前面显示 ([48f1bf0](https://github.com/certd/certd/commit/48f1bf091869b87dd17feaca5efd8680ef741582))
|
||||
* 证书仓库页面增加到期状态查询条件 ([58c3d70](https://github.com/certd/certd/commit/58c3d7087bb66358d896a741e12005f690b2bd5e))
|
||||
* 证书流水线创建域名输入框支持获取域名数据进行选择 ([1d5b1c2](https://github.com/certd/certd/commit/1d5b1c239cf350920eb2eb9fd293af74ef412853))
|
||||
* 支持导入51dns域名 ([7eb9694](https://github.com/certd/certd/commit/7eb96942214aed0dfc9c3c5a669374da67052c49))
|
||||
* ucloud支持部署到alb ([78004bd](https://github.com/certd/certd/commit/78004bdfb552a3b83298fa09d518ca282a529d90))
|
||||
* ucloud支持部署到ulb(alb、clb统一成一个) ([c408687](https://github.com/certd/certd/commit/c408687af7669afe733b5506720ca795555acdce))
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 编辑插件author不允许出现符号 ([5ea2b09](https://github.com/certd/certd/commit/5ea2b09dc30397c086a2498f958f661e7fef10fc))
|
||||
* 修复插件修改名字和删除后没有注销注册的bug ([61192b9](https://github.com/certd/certd/commit/61192b998a7088a8f446fd224cc242def462a79b))
|
||||
* 修复流水线复制出错的bug ([418bcdd](https://github.com/certd/certd/commit/418bcddc95bf19d2659d2a9cfe336bc059d157b0))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化流水线创建入口,各种证书申请任务类型拆分成多个按钮 ([f75c73d](https://github.com/certd/certd/commit/f75c73d739ee271fb718148416836dbe09bb3266))
|
||||
* 域名导入 ([ad64384](https://github.com/certd/certd/commit/ad64384891c13342980b7559924666dcfb2796c2))
|
||||
* 支持从提供商导入域名列表 ([f442363](https://github.com/certd/certd/commit/f4423638a2ee779d48fc17b3819ce3bee55b0361))
|
||||
* 支持同步域名过期时间 ([a97cee8](https://github.com/certd/certd/commit/a97cee84f3bfdeeb2083d91f748cac5405fed6ae))
|
||||
* cname记录支持批量导入和导出 ([607afe8](https://github.com/certd/certd/commit/607afe864a12d6f50993895a4e10f4c9a3dd8fee))
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复自定义插件name丢失author导致找不到插件的bug ([2fbb58e](https://github.com/certd/certd/commit/2fbb58eb2b239eab4864f90aa72b0ef2ada38e8f))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化内存占用 ([4fc8acc](https://github.com/certd/certd/commit/4fc8acce8c1beec38c24b0977b71ff6b18cb52c9))
|
||||
* 自定义插件支持使用_ctx.import("/@/xxx.js")以绝对路径引用模块 ([9eace86](https://github.com/certd/certd/commit/9eace86aeeb48c23b55102fc5d42088294d9eb97))
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复禁用第三方登录自动注册无效的bug ([7ee39fd](https://github.com/certd/certd/commit/7ee39fd4eddfc847bcef879f0904a4319993d081))
|
||||
* 修复又拍云upyun密码错误没有报错的bug ([235972f](https://github.com/certd/certd/commit/235972f3dabe0b87879a2d9950367dc45edfebe8))
|
||||
* 修复重启certd后,再启用流水线,不会自动执行的bug ([468ccbf](https://github.com/certd/certd/commit/468ccbf2b725fc4b78ce4b950a114e4a4be57698))
|
||||
* 优化源码部署缺少wget的提示 ([f193341](https://github.com/certd/certd/commit/f193341eaef765b7586a0b6e7c73015470536cc2))
|
||||
|
||||
### Features
|
||||
|
||||
* 【破坏性更新】插件改为metadata加载模式,plugin-cert、plugin-lib包部分代码转移到certd-server中,影响自定义插件,需要修改相关import引用 ([a3fb249](https://github.com/certd/certd/commit/a3fb24993d7ac8fbb0bb354fa02ef067f609021e))
|
||||
* 通过metadata加载插件,降低内存占用 ([7634f15](https://github.com/certd/certd/commit/7634f153b7004462f207062c0502d8345e318cc7))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 流水线页面可以查看证书过期时间 ([be03d8e](https://github.com/certd/certd/commit/be03d8e13752c355dbec158da78b9cb4c3b3bb5d))
|
||||
* 每页记录条数保持 ([14f9987](https://github.com/certd/certd/commit/14f99875fb3f535fa5ffb7bf5db3960b105aa7aa))
|
||||
* 手机号登录放到前面 ([26ac081](https://github.com/certd/certd/commit/26ac08118219407c5dd3afc35130cdd48b8fab05))
|
||||
* 新增部署1panel面板证书插件 ([4243622](https://github.com/certd/certd/commit/42436224148d6fffe5da8e5e0185a698e079032b))
|
||||
* 优化微信支付对接文档 ([64e0d9a](https://github.com/certd/certd/commit/64e0d9a4d54b0d9da028be2c5e0ece7a97b2c250))
|
||||
* 优化站点监控,支持设置忽略主站证书一致性,支持开启和关闭自动同步ip ([26f75c7](https://github.com/certd/certd/commit/26f75c71ba8866278dbe117f1bfaf671e7f70781))
|
||||
* 增加邮件发送证书模版配置 ([cabc4da](https://github.com/certd/certd/commit/cabc4da3ac003a8c699c69f5bffea4c149be185c))
|
||||
* 站点监控增加是否自动同步IP开关 ([5268904](https://github.com/certd/certd/commit/52689049ae8e004e1252ab1e2872fbf676e0295f))
|
||||
* 证书流水线可以开启webhook ([840bd52](https://github.com/certd/certd/commit/840bd526714072315244a6900c95395d2d62f647))
|
||||
* 支持部署到exsi,openwrt ([dae87e2](https://github.com/certd/certd/commit/dae87e26a3266a2bf26afe1ef4c489a3f6bf41e4))
|
||||
* 支持公告功能 ([a79fe1f](https://github.com/certd/certd/commit/a79fe1f350f2991af9e5b50825f1776029677fc5))
|
||||
* 支持webhook触发流水线,新增触发类型图标显示 ([1a29541](https://github.com/certd/certd/commit/1a2954114063a8b994c257a90e5814e0a3a8d924))
|
||||
* webhook触发器一个流水线限制只能添加一个 ([6c39d7b](https://github.com/certd/certd/commit/6c39d7b1eecb679cb6506b0e3557e8152e01417d))
|
||||
* zenlayer证书更新 ([9ba6c83](https://github.com/certd/certd/commit/9ba6c838215d0750cda925778a47002a521f05e9))
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 发送证书到邮箱插件的邮件模版转为使用邮箱配置中的通用模版 ([c5a3003](https://github.com/certd/certd/commit/c5a3003cf7b640500a90ec2c8961859ffe6fdb18))
|
||||
* 首页最快到期证书,不包含已禁用的流水线 ([d731956](https://github.com/certd/certd/commit/d731956b066e4dbbe24d4de7b3d3679b355eb97c))
|
||||
* 修复部署到华为obs 报错的bug ([dd19afc](https://github.com/certd/certd/commit/dd19afce928a7f36312af9df1e7e5ed3eb1e214a))
|
||||
* 修复从模版创建的流水线不会自动执行的bug ([833808c](https://github.com/certd/certd/commit/833808c5deb716122b241d3d67349d2d6a18bf45))
|
||||
* 修复流水线列表step数量统计错误的bug ([0e5a4fb](https://github.com/certd/certd/commit/0e5a4fb098d3261b690c551cf2b95198cac487e7))
|
||||
* 修复用户删除后,用相同的oauth授权登录报错用户不存在的问题 ([e505916](https://github.com/certd/certd/commit/e5059165259e4d757abc811c0c14bbc4a3dbaee9))
|
||||
* 修复站点ip监控报主站与ip证书过期时间不一致的问题 ([62f8525](https://github.com/certd/certd/commit/62f8525dd5da95dc07ed103f602644c6e5f7f8e3))
|
||||
* 修复serverchan3 没有选择tags报错的bug ([5bbf210](https://github.com/certd/certd/commit/5bbf210394883c4893c365bd16e999490b6e9b41))
|
||||
* telegram 修复消息内存在横杠无法发出的bug ([5f4469e](https://github.com/certd/certd/commit/5f4469e306187c31d8a74d53b17ea3a213420367))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 批量修改定时时间支持随机时间 ([d0f653d](https://github.com/certd/certd/commit/d0f653da9a2970920e961e7404ff04080bccd343))
|
||||
* 批量运行优化,支持普通运行和强制重新运行 ([039c62b](https://github.com/certd/certd/commit/039c62b09b37cdda35d33c6ee9adecad62dee75c))
|
||||
* 升级lego到4.30.1版本 ([136e8dd](https://github.com/certd/certd/commit/136e8dd7c5ff7199ff4b0bcca95b8a03aa847553))
|
||||
* 腾讯云EO增加请求参数打印 ([5b5deac](https://github.com/certd/certd/commit/5b5deac7d98684eda5c68384241a4d62c48d803b))
|
||||
* 优化阿里云esa清理证书时机 ([5359a76](https://github.com/certd/certd/commit/5359a7670fac5a18c4294b37a34227308a0deed6))
|
||||
* 优化源码方式部署,前端无需编译 ([13ddc97](https://github.com/certd/certd/commit/13ddc979ec7953e3db8db76dd23fd85a3b3c7997))
|
||||
* 支持部署到goedge ([44bf4b1](https://github.com/certd/certd/commit/44bf4b1cc1aafa2d711c3b8e408009f0ceb413eb))
|
||||
* 支持从阿里云商用证书订单中获取证书 ([8872466](https://github.com/certd/certd/commit/887246696861c3a0b1f99fd9ad978caea423c650))
|
||||
* 支持授权给管理员查看和下载用户证书 ([1347355](https://github.com/certd/certd/commit/1347355cb117694abe99da385352a19771a32e84))
|
||||
* 支持执行队列,避免同一时间触发流水线太多导致被限制 ([888d959](https://github.com/certd/certd/commit/888d9591fe9730b529e1c355d71f41e7ec9b479d))
|
||||
* 支持aws route53 dns ([cbb8319](https://github.com/certd/certd/commit/cbb8319cfa48673e81ec15894adc3376c173c97e))
|
||||
* 支持ucloud waf(未测试) ([a248367](https://github.com/certd/certd/commit/a248367b154c38661a6797ef64e37ec99d4e2abf))
|
||||
* 支持ucloud,上传到ussl,部署到ucdn ([e61daae](https://github.com/certd/certd/commit/e61daaee2d0dec19710cd4ec759219a071f2435e))
|
||||
* 执行队列数量支持设置 ([cd94488](https://github.com/certd/certd/commit/cd944882c3272adad4a2da94a3889a01fe05fe13))
|
||||
* aws route53 ([8caab1f](https://github.com/certd/certd/commit/8caab1fd9264df548f467b94202d567107b7a30b))
|
||||
* ip证书校验方式提示 ([773cada](https://github.com/certd/certd/commit/773cada57a01fb28ea8602062aaeec3d45109ea9))
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
BIN
docs/guide/donate/images/fapiao.jpg
Normal file
|
After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 76 KiB |
BIN
docs/guide/donate/images/transfer.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
docs/guide/donate/images/update.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
@@ -1,28 +1,56 @@
|
||||
# 捐赠
|
||||
************************
|
||||
支持开源,为爱发电,我已入驻爱发电
|
||||
https://afdian.com/a/greper
|
||||
# 专业版赞助
|
||||
|
||||
## 发电权益:
|
||||
1. 可加入发电专属群,可以获得作者一对一技术支持
|
||||
## 开源为什么要做专业版收费?
|
||||
1. 纯靠为爱发电不可持续,容易烂尾(比如:我的[dev-sidecar项目](https://github.com/docmirror/dev-sidecar)即便是拥有20K+star,也差点凉凉,幸亏有另外大佬接手用爱发电)
|
||||
2. 没有赞助的项目,作者会比较任性,不会用心倾听用户的心声,不顾用户体验(比如:下意识拒绝需求、频繁破坏性变更升级、全盘推倒重来之类的)
|
||||
3. 没有赞助的项目,交流群的戾气有时候比较重,容易起冲突
|
||||
|
||||
## 赞助权益:
|
||||
1. 可加入专属VIP群,可以获得作者一对一技术支持,必要时可以远程协助
|
||||
2. 您的需求我们将优先实现,并且将作为专业版功能提供
|
||||
3. 一年期专业版激活码
|
||||
3. 获得专业版功能
|
||||
|
||||
****------------------****
|
||||
> [限时¥50永久专业版优惠券,点我立刻领取](https://app.handfree.work/subject/#/app/certd/product)
|
||||
|
||||
****------------------****
|
||||
## 专业版特权对比
|
||||
|
||||
| 功能 | 免费版 | 专业版 |
|
||||
|---------|------------------------|-----------------------------|
|
||||
| 免费证书申请 | 免费无限制 | 免费无限制 |
|
||||
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署等 | 支持群晖、宝塔、1Panel等,持续开发中 |
|
||||
| 证书流水线条数 | 无限制 | 无限制 |
|
||||
| 站点证书监控 | 限制1条 | 无限制 |
|
||||
| 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、飞书、anpush、server酱等 |
|
||||
| 功能 | 免费版 | 专业版 |
|
||||
|---------|---------------------------------------|--------------------------------|
|
||||
| 证书申请 | 无限制 | 无限制 |
|
||||
| 证书域名数量 | 无限制 | 无限制 |
|
||||
| 证书流水线条数 | 无限制 | 无限制 |
|
||||
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署、宝塔、1Panel等大部分插件 | 群晖、威联通、proxmox等 |
|
||||
| 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、钉钉、飞书、anpush、server酱等 |
|
||||
| 站点监控 | 限制1条 | 无限制 |
|
||||
| 批量操作 | 无 | 流水线模版,流水线复制,批量运行,批量设置通知、定时等 |
|
||||
| VIP群 | 无 | 可加,一对一技术支持,必要时可申请远程协助 |
|
||||
|
||||
|
||||
## 专业版激活方式
|
||||
|
||||

|
||||
|
||||
发电后,在私信中获取激活码
|
||||
************************
|
||||
|
||||
## 相关问题
|
||||
|
||||
### 1. 购买后VIP状态或时长未更新
|
||||
系统管理-->账号绑定页面,打开一下即可自动更新VIP最新状态(如果未登录袖手账号需要先登录)
|
||||
|
||||

|
||||
|
||||
|
||||
### 2. 开发票
|
||||
联系我们(微信:xiaojunnuo),并提供支付金额
|
||||
|
||||
### 3. VIP是否可以迁移换绑服务器?
|
||||
可以的。
|
||||
* 方式1. 直接将备份数据在新服务器上还原即可(首次访问会提示您是否绑定新url,点击是即可)
|
||||
* 方式2. 如果旧站点数据丢失,您也可以部署一个新站点,然后在系统管理-->账号绑定页面,转移VIP即可
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@ Certd 是一款开源、免费、全自动申请和部署更新SSL证书的工
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 1、关于证书续期
|
||||
>* 实际上没有办法不改变证书文件本身情况下直接续期或者续签。
|
||||
>* 我们所说的续期,其实就是按照全套流程重新申请一份新证书,然后重新部署上去。
|
||||
|
||||
24
docs/guide/info.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"notice": "永久专业版上线,新用户立减50,升级到最新版点击下方“立即赞助”按钮前往获取",
|
||||
"plus": {
|
||||
"name": "专业版",
|
||||
"price": "89.9",
|
||||
"price3": "199",
|
||||
"tooltip": "开源需要您的赞助支持",
|
||||
"priceText":"¥89.9/年",
|
||||
"discountText":"永久专业版50优惠券立即领取"
|
||||
},
|
||||
"comm": {
|
||||
"name": "商业版",
|
||||
"price": "399",
|
||||
"price3": "899",
|
||||
"tooltip": "3年优惠300",
|
||||
"priceText":"¥399/年",
|
||||
"discountText":"¥899/3年(3年优惠300)"
|
||||
},
|
||||
"app":{
|
||||
"minVersion":"1.36.0",
|
||||
"minVersionTip":"版本过低,为了您的数据安全,请尽快升级"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,12 +5,20 @@
|
||||
|
||||

|
||||
|
||||
:::tip
|
||||
|
||||
接口key分两种权限范围:
|
||||
1. 仅开放接口: 仅能访问下面`接口文档`中的接口
|
||||
2. 用户级别: 可访问Certd所有接口,没有文档,可以在浏览器中F12抓取网络请求参考
|
||||
|
||||
:::
|
||||
|
||||
## 接口文档
|
||||
|
||||
https://apifox.com/apidoc/shared-2e76f8c4-7c58-413b-a32d-a1316529af44/254949529e0
|
||||
|
||||
|
||||
## Token生成方法
|
||||
### Token生成方法
|
||||
|
||||
header中传入x-certd-token即可调用开放接口
|
||||
1、首先从OpenKey页面生成keyId,keySecret;
|
||||
@@ -19,10 +27,10 @@ header中传入x-certd-token即可调用开放接口
|
||||
4、然后将content和sign分别base64后用.号连接: x-certd-token = base64(content) +"."+base64(sign)
|
||||
|
||||
|
||||
## 参数
|
||||
### 参数
|
||||
支持证书id和域名两种方式获取证书。
|
||||
|
||||
## 创建新的证书申请
|
||||
### 创建新的证书申请
|
||||
参数autoApply=true,将在没有证书时自动触发申请证书,检查逻辑如下:
|
||||
1. 如果证书仓库里面有,且没有过期,就直接返回证书
|
||||
2. 如果没有或者已过期,就会去找流水线,有就触发流水线执行
|
||||
@@ -30,7 +38,7 @@ header中传入x-certd-token即可调用开放接口
|
||||
4. 再次采用相同参数请求接口,如果在申请过程中,就会提示`正在申请中`,可轮循获取状态,直到证书申请成功。
|
||||
|
||||
|
||||
## SDK
|
||||
### SDK
|
||||
待开发
|
||||
|
||||
## 客户端工具
|
||||
|
||||
@@ -5,68 +5,72 @@
|
||||
| 1.| **主机登录授权** | |
|
||||
| 2.| **阿里云授权** | |
|
||||
| 3.| **阿里云ESA授权** | |
|
||||
| 4.| **腾讯云** | |
|
||||
| 5.| **华为云授权** | |
|
||||
| 6.| **火山引擎** | |
|
||||
| 7.| **京东云** | |
|
||||
| 4.| **华为云授权** | |
|
||||
| 5.| **腾讯云** | |
|
||||
| 6.| **京东云** | |
|
||||
| 7.| **火山引擎** | |
|
||||
| 8.| **七牛云授权** | |
|
||||
| 9.| **天翼云授权** | |
|
||||
| 9.| **百度云授权** | |
|
||||
| 10.| **baota授权** | |
|
||||
| 11.| **百度云授权** | |
|
||||
| 12.| **EAB授权** | ZeroSSL证书申请需要EAB授权 |
|
||||
| 13.| **google cloud** | 谷歌云授权 |
|
||||
| 11.| **天翼云授权** | |
|
||||
| 12.| **51dns授权** | |
|
||||
| 13.| **AcePanel授权** | |
|
||||
| 14.| **SFTP授权** | |
|
||||
| 15.| **阿里云OSS授权** | 包含地域和Bucket |
|
||||
| 16.| **FTP授权** | |
|
||||
| 17.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 |
|
||||
| 18.| **七牛OSS授权** | |
|
||||
| 19.| **s3/minio授权** | S3/minio oss授权 |
|
||||
| 20.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 |
|
||||
| 21.| **易盾DCDN授权** | https://user.yiduncdn.com |
|
||||
| 22.| **易盾rcdn授权** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 23.| **易发云短信** | sms.yfyidc.cn/ |
|
||||
| 24.| **cdnfly授权** | |
|
||||
| 25.| **群晖登录授权** | |
|
||||
| 26.| **k8s授权** | |
|
||||
| 27.| **1panel授权** | 账号和密码 |
|
||||
| 28.| **LeCDN授权** | |
|
||||
| 29.| **白山云授权** | |
|
||||
| 30.| **plesk授权** | |
|
||||
| 31.| **易支付** | |
|
||||
| 32.| **支付宝** | |
|
||||
| 33.| **微信支付** | |
|
||||
| 34.| **长亭雷池授权** | |
|
||||
| 35.| **lucky** | |
|
||||
| 36.| **括彩云cdn授权** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 37.| **uniCloud** | unicloud授权 |
|
||||
| 38.| **猫云授权** | |
|
||||
| 39.| **授权插件示例** | |
|
||||
| 40.| **西部数码授权** | |
|
||||
| 41.| **多吉云** | |
|
||||
| 42.| **我爱云授权** | 我爱云CDN |
|
||||
| 43.| **CacheFly** | CacheFly |
|
||||
| 44.| **Gcore** | Gcore |
|
||||
| 45.| **亚马逊云aws授权** | |
|
||||
| 46.| **亚马逊云科技(国区)授权** | |
|
||||
| 47.| **dns.la授权** | |
|
||||
| 48.| **又拍云** | |
|
||||
| 49.| **51dns授权** | |
|
||||
| 50.| **FlexCDN授权** | |
|
||||
| 51.| **farcdn授权** | |
|
||||
| 52.| **cloudflare授权** | |
|
||||
| 53.| **Github授权** | |
|
||||
| 54.| **namesilo授权** | |
|
||||
| 55.| **proxmox** | |
|
||||
| 56.| **网宿授权** | |
|
||||
| 57.| **金山云授权** | |
|
||||
| 58.| **APISIX授权** | |
|
||||
| 59.| **Dokploy授权** | |
|
||||
| 60.| **godaddy授权** | |
|
||||
| 61.| **新网授权** | |
|
||||
| 62.| **新网授权(代理方式)** | |
|
||||
| 63.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 |
|
||||
| 64.| **中国移动CND授权** | |
|
||||
| 65.| **雨云授权** | https://app.rainyun.com/ |
|
||||
| 16.| **APISIX授权** | |
|
||||
| 17.| **亚马逊云aws授权** | |
|
||||
| 18.| **亚马逊云科技(国区)授权** | |
|
||||
| 19.| **CacheFly** | CacheFly |
|
||||
| 20.| **EAB授权** | ZeroSSL证书申请需要EAB授权 |
|
||||
| 21.| **google cloud** | 谷歌云授权 |
|
||||
| 22.| **cloudflare授权** | |
|
||||
| 23.| **中国移动CND授权** | |
|
||||
| 24.| **授权插件示例** | 这是一个示例授权插件,用于演示如何实现一个授权插件 |
|
||||
| 25.| **dns.la授权** | |
|
||||
| 26.| **多吉云** | |
|
||||
| 27.| **Dokploy授权** | |
|
||||
| 28.| **farcdn授权** | |
|
||||
| 29.| **FlexCDN授权** | |
|
||||
| 30.| **Gcore** | Gcore |
|
||||
| 31.| **Github授权** | |
|
||||
| 32.| **godaddy授权** | |
|
||||
| 33.| **金山云授权** | |
|
||||
| 34.| **FTP授权** | |
|
||||
| 35.| **七牛OSS授权** | |
|
||||
| 36.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 |
|
||||
| 37.| **s3/minio授权** | S3/minio oss授权 |
|
||||
| 38.| **namesilo授权** | |
|
||||
| 39.| **1panel授权** | 账号和密码 |
|
||||
| 40.| **支付宝** | |
|
||||
| 41.| **白山云授权** | |
|
||||
| 42.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 |
|
||||
| 43.| **cdnfly授权** | |
|
||||
| 44.| **k8s授权** | |
|
||||
| 45.| **括彩云cdn授权** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 46.| **LeCDN授权** | |
|
||||
| 47.| **lucky** | |
|
||||
| 48.| **猫云授权** | |
|
||||
| 49.| **plesk授权** | |
|
||||
| 50.| **长亭雷池授权** | |
|
||||
| 51.| **群晖登录授权** | |
|
||||
| 52.| **uniCloud** | unicloud授权 |
|
||||
| 53.| **微信支付** | |
|
||||
| 54.| **易盾rcdn授权** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 55.| **易发云短信** | sms.yfyidc.cn/ |
|
||||
| 56.| **易盾DCDN授权** | https://user.yiduncdn.com |
|
||||
| 57.| **易支付** | |
|
||||
| 58.| **proxmox** | |
|
||||
| 59.| **UCloud授权** | 优刻得授权 |
|
||||
| 60.| **又拍云** | |
|
||||
| 61.| **网宿授权** | |
|
||||
| 62.| **西部数码授权** | |
|
||||
| 63.| **我爱云授权** | 我爱云CDN |
|
||||
| 64.| **新网授权(代理方式)** | |
|
||||
| 65.| **新网授权** | |
|
||||
| 66.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 |
|
||||
| 67.| **Zenlayer授权** | Zenlayer授权 |
|
||||
| 68.| **GoEdge授权** | |
|
||||
| 69.| **雨云授权** | https://app.rainyun.com/ |
|
||||
|
||||
<style module>
|
||||
table th:first-of-type {
|
||||
|
||||
@@ -1,126 +1,135 @@
|
||||
# 任务插件
|
||||
共 `105` 款任务插件
|
||||
共 `122` 款任务插件
|
||||
## 1. 证书申请
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **证书申请(JS版)** | 免费通配符域名证书申请,支持多个域名打到同一个证书上 |
|
||||
| 2.| **证书申请(Lego)** | 支持海量DNS解析提供商,推荐使用,一样的免费通配符域名证书申请,支持多个域名打到同一个证书上 |
|
||||
| 3.| **商用证书托管** | 手动上传自定义证书后,自动部署(每次证书有更新,都需要手动上传一次) |
|
||||
| 2.| **已有证书托管** | 手动上传自定义证书后,自动部署(每次证书有更新,都需要手动上传一次) |
|
||||
| 3.| **获取阿里云订阅证书** | 从阿里云拉取订阅模式的商用证书 |
|
||||
| 4.| **证书申请(Lego)** | 支持海量DNS解析提供商,推荐使用,一样的免费通配符域名证书申请,支持多个域名打到同一个证书上 |
|
||||
## 2. 主机
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **FTP-上传证书到FTP** | 将证书上传到FTP服务器 |
|
||||
| 2.| **IIS-部署到IIS站点** | |
|
||||
| 3.| **主机-执行远程主机脚本命令** | 可以执行重启nginx等操作让证书生效 |
|
||||
| 4.| **主机-部署证书到SSH主机** | SFTP上传证书到主机,然后SSH执行部署脚本命令 |
|
||||
| 5.| **主机-复制到本机** | 【仅管理员使用】实际上是复制证书到docker容器内的某个路径,需要做目录映射到宿主机 |
|
||||
| 6.| **上传证书到对象存储OSS** | 支持阿里云OSS、腾讯云COS、七牛云KODO、S3、MinIO、FTP、SFTP |
|
||||
| 1.| **主机-复制到本机** | 【仅管理员使用】实际上是复制证书到docker容器内的某个路径,需要做目录映射到宿主机 |
|
||||
| 2.| **主机-执行远程主机脚本命令** | 可以执行重启nginx等操作让证书生效 |
|
||||
| 3.| **IIS-部署到IIS站点** | |
|
||||
| 4.| **上传证书到对象存储OSS** | 支持阿里云OSS、腾讯云COS、七牛云KODO、S3、MinIO、FTP、SFTP |
|
||||
| 5.| **主机-部署证书到SSH主机** | 上传证书到主机覆盖原来的证书文件,然后自动执行部署脚本命令使证书生效 |
|
||||
| 6.| **ESXi-部署证书到ESXi** | |
|
||||
| 7.| **FTP-上传证书到FTP** | 将证书上传到FTP服务器 |
|
||||
| 8.| **Openwrt-部署证书到Openwrt** | |
|
||||
## 3. CDN
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **易盾-部署到易盾DCDN** | 主要是防御,http://user.yiduncdn.com/ |
|
||||
| 2.| **易盾-部署到易盾RCDN** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 3.| **cdnfly-部署证书到cdnfly** | cdnfly |
|
||||
| 4.| **LeCDN-更新证书** | |
|
||||
| 5.| **LeCDN-更新证书V2** | 支持新版本LeCDN |
|
||||
| 6.| **白山云-更新证书** | |
|
||||
| 7.| **天翼云-部署证书到CDN** | 部署证书到天翼云CDN和全站加速 |
|
||||
| 8.| **括彩云-部署到括彩云CDN** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 9.| **西数-部署到虚拟主机** | 西部数码部署证书到虚拟主机 |
|
||||
| 10.| **多吉云-部署到多吉云CDN** | |
|
||||
| 11.| **我爱云-部署证书到我爱云CDN** | 部署证书到我爱云CDN |
|
||||
| 12.| **CacheFly-部署证书到CacheFly** | 部署证书到 CacheFly |
|
||||
| 13.| **Gcore-部署证书到Gcore** | 仅上传 并不会部署到cdn |
|
||||
| 14.| **Gcore-刷新Gcore证书** | 刷新现有的证书 |
|
||||
| 15.| **又拍云-部署证书到CDN/USS** | 支持又拍云CDN,又拍云云存储USS |
|
||||
| 16.| **FlexCDN-更新证书** | |
|
||||
| 17.| **farcdn-更新证书** | www.farcdn.net |
|
||||
| 18.| **雨云-更新证书** | app.rainyun.com |
|
||||
| 19.| **网宿-更新证书** | 网宿证书自动更新 |
|
||||
| 20.| **金山云-更新CDN证书** | 金山云自动更新CDN证书 |
|
||||
| 21.| **APISIX-更新证书** | 自动更新APISIX证书 |
|
||||
| 22.| **中国移动-部署证书到CDN** | 中国移动自动部署证书到CDN |
|
||||
| 1.| **APISIX-更新证书** | 自动更新APISIX证书 |
|
||||
| 2.| **CacheFly-部署证书到CacheFly** | 部署证书到 CacheFly |
|
||||
| 3.| **中国移动-部署证书到CDN** | 中国移动自动部署证书到CDN |
|
||||
| 4.| **多吉云-部署到多吉云CDN** | |
|
||||
| 5.| **farcdn-更新证书** | www.farcdn.net |
|
||||
| 6.| **FlexCDN-更新证书** | |
|
||||
| 7.| **Gcore-刷新Gcore证书** | 刷新现有的证书 |
|
||||
| 8.| **Gcore-部署证书到Gcore** | 仅上传 并不会部署到cdn |
|
||||
| 9.| **GoEdge-更新证书** | GoEdge |
|
||||
| 10.| **金山云-更新CDN证书** | 金山云自动更新CDN证书 |
|
||||
| 11.| **白山云-更新证书** | |
|
||||
| 12.| **cdnfly-部署证书到cdnfly** | cdnfly |
|
||||
| 13.| **天翼云-部署证书到CDN** | 部署证书到天翼云CDN和全站加速 |
|
||||
| 14.| **括彩云-部署到括彩云CDN** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 15.| **LeCDN-更新证书V2** | 支持新版本LeCDN |
|
||||
| 16.| **LeCDN-更新证书** | |
|
||||
| 17.| **Maoyun-更新猫云CDN证书** | |
|
||||
| 18.| **易盾-部署到易盾DCDN** | 主要是防御,http://user.yiduncdn.com/ |
|
||||
| 19.| **易盾-部署到易盾RCDN** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 20.| **雨云-更新证书** | app.rainyun.com |
|
||||
| 21.| **又拍云-部署证书到CDN/USS** | 支持又拍云CDN,又拍云云存储USS |
|
||||
| 22.| **网宿-更新证书** | 网宿证书自动更新 |
|
||||
| 23.| **西数-部署到虚拟主机** | 西部数码部署证书到虚拟主机 |
|
||||
| 24.| **我爱云-部署证书到我爱云CDN** | 部署证书到我爱云CDN |
|
||||
| 25.| **Zenlayer-刷新证书** | 刷新Zenlayer CDN证书 |
|
||||
## 4. 面板
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 |
|
||||
| 2.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书,目前支持宝塔网站站点、docker站点等。本插件也支持aaPanel。 |
|
||||
| 3.| **宝塔-WAF证书部署** | 部署宝塔云WAF/aaWAF |
|
||||
| 4.| **宝塔win-网站证书部署** | 部署到Windows版宝塔管理的站点的ssl证书 |
|
||||
| 5.| **宝塔-删除过期证书** | 删除证书夹中过期证书 |
|
||||
| 6.| **群晖-部署证书到群晖面板** | Synology,支持6.x以上版本 |
|
||||
| 7.| **K8S-部署证书到Secret** | 部署证书到k8s的secret |
|
||||
| 8.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress |
|
||||
| 9.| **K8S-Apply自定义yaml** | apply自定义yaml到k8s |
|
||||
| 10.| **1Panel-部署证书到1Panel** | 更新1Panel的证书 |
|
||||
| 11.| **Plesk-部署Plesk网站证书** | |
|
||||
| 12.| **雷池-更新证书** | 更新长亭雷池WAF的证书 |
|
||||
| 13.| **lucky-更新Lucky证书** | |
|
||||
| 14.| **uniCloud-部署到服务空间** | 部署到服务空间 |
|
||||
| 15.| **威联通-部署证书到威联通** | 部署证书到qnap |
|
||||
| 16.| **飞牛NAS-部署证书** | |
|
||||
| 17.| **Proxmox-上传证书到Proxmox** | |
|
||||
| 18.| **Dokploy-部署server证书** | 自动更新Dokploy server证书 |
|
||||
| 1.| **AcePanel-部署到网站** | 上传证书并部署到指定网站 |
|
||||
| 2.| **AcePanel-面板证书** | 部署AcePanel面板证书 |
|
||||
| 3.| **Dokploy-部署server证书** | 自动更新Dokploy server证书 |
|
||||
| 4.| **飞牛NAS-部署证书** | |
|
||||
| 5.| **1Panel-部署面板证书** | 更新1Panel的面板证书 |
|
||||
| 6.| **1Panel-更新站点证书** | 更新1Panel的站点证书 |
|
||||
| 7.| **宝塔-删除过期证书** | 删除证书夹中过期证书 |
|
||||
| 8.| **宝塔-WAF证书部署** | 部署宝塔云WAF/aaWAF |
|
||||
| 9.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 |
|
||||
| 10.| **宝塔win-网站证书部署** | 部署到Windows版宝塔管理的站点的ssl证书 |
|
||||
| 11.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书,目前支持宝塔网站站点、docker站点等。本插件也支持aaPanel。 |
|
||||
| 12.| **K8S-Apply自定义yaml** | apply自定义yaml到k8s |
|
||||
| 13.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress |
|
||||
| 14.| **K8S-部署证书到Secret** | 部署证书到k8s的secret |
|
||||
| 15.| **lucky-更新Lucky证书** | |
|
||||
| 16.| **Plesk-部署Plesk网站证书** | |
|
||||
| 17.| **Plesk-更新证书** | 不会创建新证书记录,直接更新旧的证书 |
|
||||
| 18.| **雷池-更新证书** | 更新长亭雷池WAF的证书 |
|
||||
| 19.| **群晖-部署证书到群晖面板** | Synology,支持6.x以上版本 |
|
||||
| 20.| **uniCloud-部署到服务空间** | 部署到服务空间 |
|
||||
| 21.| **Proxmox-上传证书到Proxmox** | |
|
||||
| 22.| **威联通-部署证书到威联通** | 部署证书到qnap |
|
||||
## 5. 阿里云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **阿里云-部署到Ack** | 部署到阿里云Ack集群Ingress等通过Secret管理证书的应用 |
|
||||
| 2.| **阿里云-部署至任意云资源** | 【不建议使用】需要消耗阿里云自动部署次数,支持SLB、LIVE、webHosting、VOD、CR、DCDN、DDoS、CDN、ALB、APIGateway、FC、GA、MSE、NLB、OSS、SAE、WAF等云产品 |
|
||||
| 3.| **阿里云-部署证书至CDN** | 自动部署域名证书至阿里云CDN |
|
||||
| 4.| **阿里云-部署证书至DCDN** | 依赖证书申请前置任务,自动部署域名证书至阿里云DCDN |
|
||||
| 5.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss |
|
||||
| 6.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 |
|
||||
| 7.| **阿里云-部署至阿里云WAF** | 部署证书到阿里云WAF |
|
||||
| 8.| **阿里云-部署至ALB(应用负载均衡)** | ALB,更新监听器的默认证书 |
|
||||
| 9.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 |
|
||||
| 10.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) |
|
||||
| 11.| **阿里云-部署至阿里云FC(3.0)** | 部署证书到阿里云函数计算(FC3.0) |
|
||||
| 12.| **阿里云-部署至ESA** | 部署证书到阿里云ESA(边缘安全加速),自动删除过期证书 |
|
||||
| 13.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod) |
|
||||
| 14.| **阿里云-部署证书至API网关** | 自动部署域名证书至阿里云API网关(APIGateway) |
|
||||
| 15.| **阿里云-部署至云原生API网关/AI网关** | 自动部署域名证书至云原生API网关、AI网关 |
|
||||
| 2.| **阿里云-部署至ALB(应用负载均衡)** | ALB,更新监听器的默认证书 |
|
||||
| 3.| **阿里云-部署至任意云资源** | 【不建议使用】需要消耗阿里云自动部署次数,支持SLB、LIVE、webHosting、VOD、CR、DCDN、DDoS、CDN、ALB、APIGateway、FC、GA、MSE、NLB、OSS、SAE、WAF等云产品 |
|
||||
| 4.| **阿里云-部署至云原生API网关/AI网关** | 自动部署域名证书至云原生API网关、AI网关 |
|
||||
| 5.| **阿里云-部署证书至API网关** | 自动部署域名证书至阿里云API网关(APIGateway) |
|
||||
| 6.| **阿里云-部署证书至CDN** | 自动部署域名证书至阿里云CDN |
|
||||
| 7.| **阿里云-部署证书至DCDN** | 依赖证书申请前置任务,自动部署域名证书至阿里云DCDN |
|
||||
| 8.| **阿里云-部署至ESA** | 部署证书到阿里云ESA(边缘安全加速),自动删除过期证书 |
|
||||
| 9.| **阿里云-部署至阿里云FC(3.0)** | 部署证书到阿里云函数计算(FC3.0) |
|
||||
| 10.| **阿里云-部署至GA** | 部署证书到阿里云GA(全球加速),支持更新默认证书和扩展证书 |
|
||||
| 11.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 |
|
||||
| 12.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss |
|
||||
| 13.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) |
|
||||
| 14.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod) |
|
||||
| 15.| **阿里云-部署至阿里云WAF** | 部署证书到阿里云WAF |
|
||||
| 16.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 |
|
||||
## 6. 华为云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **华为云-部署证书至CDN** | |
|
||||
| 2.| **华为云-上传证书至CCM** | 上传证书到华为云云证书管理(CCM) |
|
||||
| 2.| **华为云-部署证书至ELB负载均衡** | |
|
||||
| 3.| **华为云-部署证书至OBS** | |
|
||||
| 4.| **华为云-上传证书至CCM** | 上传证书到华为云云证书管理(CCM) |
|
||||
## 7. 腾讯云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **腾讯云-部署证书到任意云资源** | 支持负载均衡、CDN、DDoS、直播、点播、Web应用防火墙、API网关、TEO、容器服务、对象存储、轻应用服务器、云原生微服务、云开发 |
|
||||
| 2.| **腾讯云-部署到CLB** | 暂时只支持单向认证证书,暂时只支持通用负载均衡 |
|
||||
| 1.| **腾讯云-删除即将过期证书** | 仅删除未使用的证书 |
|
||||
| 2.| **腾讯云-部署证书到任意云资源** | 支持负载均衡、CDN、DDoS、直播、点播、Web应用防火墙、API网关、TEO、容器服务、对象存储、轻应用服务器、云原生微服务、云开发 |
|
||||
| 3.| **腾讯云-部署到CDN(废弃)** | 已废弃,请使用v2版 |
|
||||
| 4.| **腾讯云-部署到CDN-v2** | 推荐使用 |
|
||||
| 5.| **腾讯云-上传证书到腾讯云** | 上传成功后输出:tencentCertId |
|
||||
| 5.| **腾讯云-部署到CLB** | 暂时只支持单向认证证书,暂时只支持通用负载均衡 |
|
||||
| 6.| **腾讯云-部署证书到COS** | 部署到腾讯云COS源站域名证书【注意:很不稳定,需要重试很多次偶尔才能成功一次】 |
|
||||
| 7.| **腾讯云-部署到腾讯云EO** | 腾讯云边缘安全加速平台EdgeOne(EO),必须配置上传证书到腾讯云任务 |
|
||||
| 8.| **腾讯云-删除即将过期证书** | 仅删除未使用的证书 |
|
||||
| 9.| **腾讯云-部署到TKE** | 修改TKE集群密钥配置,支持Opaque和TLS证书类型。注意:
|
||||
1. serverless集群请使用K8S部署插件;
|
||||
2. Opaque类型需要【上传到腾讯云】作为前置任务;
|
||||
3. ApiServer需要开通公网访问(或者certd可访问),实际上底层仍然是通过KubeClient进行部署 |
|
||||
| 10.| **腾讯云-部署到腾讯云直播** | https://console.cloud.tencent.com/live/ |
|
||||
| 7.| **腾讯云-部署到腾讯云EO** | 腾讯云边缘安全加速平台EdgeOne(EO) |
|
||||
| 8.| **腾讯云-部署到腾讯云直播** | https://console.cloud.tencent.com/live/ |
|
||||
| 9.| **腾讯云-部署到TKE** | 修改TKE集群密钥配置,支持Opaque和TLS证书类型。注意: 1. serverless集群请使用K8S部署插件; 2. Opaque类型需要【上传到腾讯云】作为前置任务; 3. ApiServer需要开通公网访问(或者certd可访问),实际上底层仍然是通过KubeClient进行部署 |
|
||||
| 10.| **腾讯云-更新证书(Id不变)** | 根据证书id一键更新腾讯云证书并自动部署(Id不变),注意:当前仅支持CLB,其他需要等腾讯接口完善 |
|
||||
| 11.| **腾讯云-实例开关机** | 腾讯云实例开关机 |
|
||||
| 12.| **腾讯云-更新证书(Id不变)** | 根据证书id一键更新腾讯云证书并自动部署(Id不变),注意该接口为腾讯云白名单功能,非白名单用户无法使用该功能 |
|
||||
| 12.| **腾讯云-上传证书到腾讯云** | 上传成功后输出:tencentCertId |
|
||||
## 8. 火山引擎
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **火山引擎-部署证书至CDN** | 支持网页,文件下载,音视频点播 |
|
||||
| 2.| **火山引擎-部署证书至CLB** | 部署至火山引擎负载均衡 |
|
||||
| 3.| **火山引擎-上传证书至证书中心** | 上传证书至火山引擎证书中心 |
|
||||
| 4.| **火山引擎-部署证书至ALB** | 部署至火山引擎应用负载均衡 |
|
||||
| 1.| **火山引擎-部署证书至ALB** | 部署至火山引擎应用负载均衡 |
|
||||
| 2.| **火山引擎-部署证书至CDN** | 支持网页,文件下载,音视频点播 |
|
||||
| 3.| **火山引擎-部署证书至CLB** | 部署至火山引擎负载均衡 |
|
||||
| 4.| **火山引擎-部署证书至DCDN** | 部署至火山引擎全站加速 |
|
||||
| 5.| **火山引擎-部署证书至Live** | 部署至火山引擎视频直播 |
|
||||
| 6.| **火山引擎-部署证书至DCDN** | 部署至火山引擎全站加速 |
|
||||
| 7.| **火山引擎-部署证书至VOD** | 部署至火山引擎视频点播(暂不可用) |
|
||||
| 6.| **火山引擎-部署证书至VOD** | 部署至火山引擎视频点播(暂不可用) |
|
||||
| 7.| **火山引擎-上传证书至证书中心** | 上传证书至火山引擎证书中心 |
|
||||
## 9. 京东云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
@@ -128,43 +137,52 @@
|
||||
| 1.| **京东云-部署证书至CDN** | 京东云内容分发网络 |
|
||||
| 2.| **京东云-更新已有证书** | 更新SSL数字证书中的证书 |
|
||||
| 3.| **京东云-上传新证书** | 上传证书到SSL数字证书中心 |
|
||||
## 10. 百度云
|
||||
## 10. UCloud
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **百度云-部署证书到CDN** | 部署到百度云CDN |
|
||||
| 2.| **百度云-部署证书到负载均衡** | 部署到百度云负载均衡,包括BLB、APPBLB |
|
||||
| 1.| **UCloud-部署到CDN** | 将证书部署到UCloud CDN |
|
||||
| 2.| **UCloud-部署到负载均衡** | 将证书部署到UCloud负载均衡(ULB/ALB/CLB) |
|
||||
| 3.| **UCloud-部署到对象存储(US3)** | 将证书部署到UCloud对象存储(US3) |
|
||||
| 4.| **UCloud-部署到WAF** | 将证书部署到UCloud WAF |
|
||||
| 5.| **UCloud-上传到USSL** | 将证书上传到UCloud USSL |
|
||||
## 11. 百度云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **百度云-部署证书到负载均衡** | 部署到百度云负载均衡,包括BLB、APPBLB |
|
||||
| 2.| **百度云-部署证书到CDN** | 部署到百度云CDN |
|
||||
| 3.| **百度云-上传到证书托管** | 上传证书到百度云证书托管中心 |
|
||||
## 11. 七牛云
|
||||
## 12. 七牛云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **七牛云-部署证书至OSS** | 自动部署域名证书至七牛云KODO,注意是自定义源站域名,不是CDN域名 |
|
||||
| 2.| **七牛云-部署证书至CDN/DCDN** | 自动部署域名证书至七牛云CDN、DCDN |
|
||||
| 1.| **七牛云-部署证书至CDN/DCDN** | 自动部署域名证书至七牛云CDN、DCDN |
|
||||
| 2.| **七牛云-部署证书至OSS** | 自动部署域名证书至七牛云KODO,注意是自定义源站域名,不是CDN域名 |
|
||||
| 3.| **七牛云-上传证书到七牛云** | 上传到七牛云 |
|
||||
## 12. 亚马逊云
|
||||
## 13. 亚马逊云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **AWS-部署证书到CloudFront** | 部署证书到 AWS CloudFront |
|
||||
| 2.| **AWS-上传证书到ACM** | 上传证书 AWS ACM |
|
||||
| 3.| **AWS(国区)-部署证书到CloudFront** | 部署证书到 AWS CloudFront |
|
||||
## 13. 其他
|
||||
## 14. 其他
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **Demo-测试插件** | |
|
||||
| 2.| **等待** | 等待一段时间 |
|
||||
| 2.| **Github-检查Release版本** | 检查最新Release版本并推送消息 |
|
||||
| 3.| **邮件发送证书** | 通过邮件发送证书 |
|
||||
| 4.| **webhook方式部署证书** | 调用webhook部署证书 |
|
||||
| 5.| **Github-检查Release版本** | 检查最新Release版本并推送消息 |
|
||||
## 14. 管理
|
||||
| 4.| **等待** | 等待一段时间 |
|
||||
| 5.| **webhook方式部署证书** | 调用webhook部署证书 |
|
||||
## 15. 管理
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **重启 Certd** | 【仅管理员可用】 重启 certd的https服务,用于更新 Certd 的 ssl 证书 |
|
||||
| 2.| **自定义js脚本** | 【仅管理员】运行自定义js脚本执行 |
|
||||
| 3.| **数据库备份** | 【仅管理员可用】仅支持备份SQLite数据库 |
|
||||
| 1.| **数据库备份** | 【仅管理员可用】仅支持备份SQLite数据库 |
|
||||
| 2.| **重启 Certd** | 【仅管理员可用】 重启 certd的https服务,用于更新 Certd 的 ssl 证书 |
|
||||
| 3.| **自定义js脚本** | 【仅管理员】运行自定义js脚本执行 |
|
||||
|
||||
<style module>
|
||||
table th:first-of-type {
|
||||
|
||||
@@ -2,24 +2,25 @@
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **阿里云** | 阿里云DNS解析提供商 |
|
||||
| 2.| **阿里ESA** | 阿里ESA DNS解析 |
|
||||
| 3.| **火山引擎** | 火山引擎DNS解析提供商 |
|
||||
| 4.| **京东云** | 京东云DNS解析提供商 |
|
||||
| 5.| **新网** | 新网域名解析 |
|
||||
| 1.| **阿里ESA** | 阿里ESA DNS解析 |
|
||||
| 2.| **阿里云** | 阿里云DNS解析提供商 |
|
||||
| 3.| **AWS Route53** | AWS Route53 DNS解析提供商 |
|
||||
| 4.| **火山引擎** | 火山引擎DNS解析提供商 |
|
||||
| 5.| **京东云** | 京东云DNS解析提供商 |
|
||||
| 6.| **新网(代理方式)** | 新网域名解析(代理方式) |
|
||||
| 7.| **腾讯云** | 腾讯云域名DNS解析提供者 |
|
||||
| 8.| **腾讯云EO DNS** | 腾讯云EO DNS解析提供者 |
|
||||
| 9.| **华为云** | 华为云DNS解析提供商 |
|
||||
| 10.| **西部数码** | west dns provider |
|
||||
| 11.| **dns.la** | dns.la |
|
||||
| 12.| **雨云** | 雨云DNS解析提供商 |
|
||||
| 13.| **cloudflare** | cloudflare dns provider |
|
||||
| 14.| **namesilo** | namesilo dns provider |
|
||||
| 15.| **godaddy** | GoDaddy |
|
||||
| 16.| **Dns提供商Demo** | dns provider示例 |
|
||||
| 17.| **51dns** | 51DNS |
|
||||
| 18.| **新网互联** | 新网互联 |
|
||||
| 7.| **新网** | 新网域名解析 |
|
||||
| 8.| **cloudflare** | cloudflare dns provider |
|
||||
| 9.| **dns.la** | dns.la |
|
||||
| 10.| **godaddy** | GoDaddy |
|
||||
| 11.| **华为云** | 华为云DNS解析提供商 |
|
||||
| 12.| **namesilo** | namesilo dns provider |
|
||||
| 13.| **雨云** | 雨云DNS解析提供商 |
|
||||
| 14.| **腾讯云** | 腾讯云域名DNS解析提供者 |
|
||||
| 15.| **腾讯云EO DNS** | 腾讯云EO DNS解析提供者 |
|
||||
| 16.| **西部数码** | west dns provider |
|
||||
| 17.| **Dns提供商Demo** | dns provider示例 |
|
||||
| 18.| **51dns** | 51DNS |
|
||||
| 19.| **新网互联** | 新网互联 |
|
||||
|
||||
<style module>
|
||||
table th:first-of-type {
|
||||
|
||||
@@ -4,20 +4,20 @@
|
||||
|-----|-----|-----|
|
||||
| 1.| **电子邮件** | 电子邮件通知 |
|
||||
| 2.| **自定义webhook** | 根据模版自定义http请求 |
|
||||
| 3.| **企业微信通知** | 企业微信群聊机器人通知 |
|
||||
| 4.| **爱语飞飞微信通知(iyuu)** | https://iyuu.cn/ |
|
||||
| 5.| **Server酱ᵀ** | https://sct.ftqq.com/ |
|
||||
| 6.| **Server酱³** | https://doc.sc3.ft07.com/serverchan3 |
|
||||
| 7.| **AnPush** | https://anpush.com |
|
||||
| 8.| **Telegram通知** | Telegram Bot推送通知 |
|
||||
| 9.| **Discord 通知** | Discord 机器人通知 |
|
||||
| 10.| **Slack通知** | Slack消息推送通知 |
|
||||
| 11.| **Bark 通知** | Bark 推送通知插件 |
|
||||
| 12.| **飞书通知** | 飞书群聊webhook通知 |
|
||||
| 13.| **钉钉通知** | 钉钉群聊通知 |
|
||||
| 14.| **VoceChat通知** | https://voce.chat |
|
||||
| 15.| **OneBot V11 通知** | 通过动态拼接URL发送 OneBot V11 协议消息 |
|
||||
| 16.| **MeoW通知** | https://api.chuckfang.com/ |
|
||||
| 3.| **AnPush** | https://anpush.com |
|
||||
| 4.| **Bark 通知** | Bark 推送通知插件 |
|
||||
| 5.| **钉钉通知** | 钉钉群聊通知 |
|
||||
| 6.| **Discord 通知** | Discord 机器人通知 |
|
||||
| 7.| **飞书通知** | 飞书群聊webhook通知 |
|
||||
| 8.| **爱语飞飞微信通知(iyuu)** | https://iyuu.cn/ |
|
||||
| 9.| **MeoW通知** | https://api.chuckfang.com/ |
|
||||
| 10.| **OneBot V11 通知** | 通过动态拼接URL发送 OneBot V11 协议消息 |
|
||||
| 11.| **企业微信通知** | 企业微信群聊机器人通知 |
|
||||
| 12.| **Server酱ᵀ** | https://sct.ftqq.com/ |
|
||||
| 13.| **Server酱³** | https://doc.sc3.ft07.com/serverchan3 |
|
||||
| 14.| **Slack通知** | Slack消息推送通知 |
|
||||
| 15.| **Telegram通知** | Telegram Bot推送通知 |
|
||||
| 16.| **VoceChat通知** | https://voce.chat |
|
||||
|
||||
<style module>
|
||||
table th:first-of-type {
|
||||
|
||||
@@ -52,3 +52,11 @@ service:
|
||||
3. DNS 有其他平台申请过的_acme-challenge记录,删除即可
|
||||
|
||||
|
||||
## 7. DNS problem: NXDOMAIN looking up TXT for _acme-challenge.xxx
|
||||
`
|
||||
DNS problem: NXDOMAIN looking up TXT for _acme-challenge.xxxxx - check that a DNS record exists for this domain
|
||||
`
|
||||
证书颁发机构向域名ns查询TXT验证记录失败,有以下几种可能
|
||||
1、域名的ns服务器修改成别的了,但申请证书时的DNS提供商选择错误(检查确认,配置正确的DNS提供商)
|
||||
2、证书颁发机构与ns域名服务器之间访问不通,无法查询到TXT记录(尝试更换证书颁发机构)
|
||||
3、ns服务商解析值生效慢(尝试修改证书申请任务里面的等待生效时长600-1000s)
|
||||
@@ -15,3 +15,4 @@
|
||||
## 2. 图文教程链接
|
||||
如果不方便登录系统,您还可以直接查看 [图文教程](https://gitee.com/certd/certd/blob/v2/step.md)
|
||||
|
||||

|
||||
BIN
docs/guide/use/comm/payments/images/wx-1.png
Normal file
|
After Width: | Height: | Size: 262 KiB |
@@ -11,7 +11,8 @@
|
||||
|
||||
* 进入“账户中心”->“API安全”->“商户API证书”->“管理证书”
|
||||
* 根据指引生成证书
|
||||
* 得到私钥和公钥
|
||||
* 得到apiclient证书和私钥
|
||||

|
||||
|
||||
|
||||
3. 填写APIv3密钥
|
||||
@@ -24,4 +25,4 @@
|
||||
4. 在Certd后台配置微信支付
|
||||
* 进入“系统”->"设置"->“支付设置”
|
||||
* 启用微信支付,选择“微信支付配置”,点击添加
|
||||
* 填写微信支付商户号、证书私钥、证书公钥、APIv3密钥即可。
|
||||
* 填写微信支付商户号、证书(apiclient_cert.pem)、私钥(apiclient_key.pem)、APIv3密钥即可。
|
||||
BIN
docs/guide/use/dev/images/plugin-create.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
docs/guide/use/dev/images/plugin-edit.png
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
docs/guide/use/dev/images/plugin-test1.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
docs/guide/use/dev/images/plugin-test2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
docs/guide/use/dev/images/plugin-test3.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
19
docs/guide/use/dev/plugin.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# 插件开发
|
||||
|
||||
## 插件创建
|
||||
点击自定义插件按钮,填写插件基本信息
|
||||

|
||||
|
||||
创建成功后,会默认打开插件编辑页面,里面默认带有示例代码说明,可以在此基础上进行你的自定义开发
|
||||

|
||||
|
||||
## 插件测试
|
||||
|
||||
在流水线中添加插件任务
|
||||

|
||||
|
||||
配置插件任务参数
|
||||

|
||||
|
||||
点击运行,查看插件任务运行结果
|
||||

|
||||
@@ -1,7 +1,17 @@
|
||||
# 忘记管理员密码
|
||||
# 忘记密码/无法登录
|
||||
|
||||
无法登录的情况:
|
||||
1、忘记管理员密码
|
||||
2、仅有第三方登录,但第三方登录失效,导致无法登录
|
||||
|
||||
请查看如下方法恢复的登录
|
||||
|
||||
## 一、忘记管理员密码
|
||||
解决方法如下:
|
||||
|
||||
## 1. 修改环境变量
|
||||
### 1. 修改环境变量
|
||||
|
||||
docker部署的:
|
||||
修改docker-compose.yaml文件,将环境变量`certd_system_resetAdminPasswd`改为`true`
|
||||
```yaml
|
||||
services:
|
||||
@@ -9,21 +19,35 @@ services:
|
||||
environment: # 环境变量
|
||||
- certd_system_resetAdminPasswd=true
|
||||
```
|
||||
## 2. 重启容器
|
||||
|
||||
源码部署的,修改`packages/ui/certd-server/.env`文件
|
||||
|
||||
```ini
|
||||
certd_system_resetAdminPasswd=true
|
||||
```
|
||||
|
||||
### 2. 重启容器
|
||||
```shell
|
||||
docker compose up -d
|
||||
docker logs -f --tail 500 certd
|
||||
# 观察日志,当日志中输出“重置1号管理员用户密码完成”,即可操作下一步
|
||||
# 这里会打印1号管理员记录的用户名,如果你修改过管理员用户名,请注意查看此条日志
|
||||
```
|
||||
## 3. 恢复环境变量
|
||||
### 3. 恢复环境变量
|
||||
修改docker-compose.yaml,将`certd_system_resetAdminPasswd`改回`false`
|
||||
|
||||
## 4. 再次重启容器
|
||||
### 4. 再次重启容器
|
||||
```shell
|
||||
docker compose up -d
|
||||
```
|
||||
## 5. 默认密码登录
|
||||
### 5. 默认密码登录
|
||||
使用`原管理员账号/123456`登录系统,请及时修改管理员密码
|
||||
> 默认管理员账号: admin
|
||||
> 如果忘记管理员账号,请查看修改密码时的启动日志,会打印管理员账号名
|
||||
|
||||
|
||||
## 二、仅有第三方登录,没有登录窗口
|
||||
|
||||
当开启仅使用第三方登录模式时,如果第三方登录未配置或已失效,则会导致无法登录
|
||||
|
||||
您可以通过访问 `http://你的certd地址/#/login?oauthOnly=false` 来临时关闭仅使用第三方登录模式,以使用密码登录。
|
||||
BIN
docs/guide/use/setting/images/user_valid_enable.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
docs/guide/use/setting/images/user_valid_set.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
2
docs/guide/use/setting/oauth.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# 第三方登录配置
|
||||
|
||||
11
docs/guide/use/setting/user-valid.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# 用户有效期功能
|
||||
|
||||
可以为用户设置有效期,超过有效期后,用户的流水线将停止运行
|
||||
|
||||
## 开启用户有效期功能
|
||||
|
||||

|
||||
|
||||
## 设置用户有效期
|
||||
|
||||

|
||||
BIN
docs/guide/use/synology/images/nettest.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
@@ -67,4 +67,31 @@
|
||||

|
||||
|
||||
## 6. 配置通知和自动运行
|
||||

|
||||

|
||||
|
||||
|
||||
## 三、 常见问题
|
||||
|
||||
### 1. 登录超时 status:ECONNABORTED
|
||||
如果您的certd部署在群晖里面,可能会遇到登录超时的问题
|
||||
```
|
||||
httpRequest:https://dms.xxxxx.com:5001/webapi/entry.cgi, method:get
|
||||
请求出错: status:ECONNABORTED, statusText:ECONNABORTED
|
||||
Axio:sError: timeout of 120000ms exceeded
|
||||
```
|
||||
可能的原因是是您的dsm域名指向的ip地址在容器内无法访问,导致登录超时
|
||||
|
||||
您可以通过配置域名映射来解决
|
||||
1. 获取群晖dsm内部地址
|
||||
进入certd后台->系统管理->网络测试, 一般会看到 `172.xx.0.2` ,记住这个xx是多少
|
||||

|
||||
|
||||
2. 修改容器编排 docker-compose.yaml
|
||||
|
||||
```
|
||||
services:
|
||||
certd:
|
||||
...
|
||||
extra_hosts: # 放开这段注释
|
||||
- "你的dsm域名地址:172.xx.0.1" # 将xx替换成上面记住的数字
|
||||
```
|
||||
|
||||
BIN
docs/images/start/first.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
@@ -9,5 +9,5 @@
|
||||
}
|
||||
},
|
||||
"npmClient": "pnpm",
|
||||
"version": "1.37.16"
|
||||
"version": "1.38.9"
|
||||
}
|
||||
|
||||
21
package.json
@@ -8,6 +8,7 @@
|
||||
"@lerna-lite/publish": "^3.9.3",
|
||||
"@lerna-lite/run": "^3.9.3",
|
||||
"@lerna-lite/version": "^3.9.3",
|
||||
"axios": "^1.9.0",
|
||||
"medium-zoom": "^1.1.0",
|
||||
"vitepress": "^2.0.0-alpha.4",
|
||||
"vitepress-plugin-lightbox": "^1.0.2"
|
||||
@@ -17,18 +18,18 @@
|
||||
"start:server": "cd ./packages/ui/certd-server && npm start",
|
||||
"devb": "lerna run dev-build",
|
||||
"i-all": "lerna link && lerna exec npm install ",
|
||||
"publish": "npm run prepublishOnly2 && lerna publish --force-publish=pro/plus-core --conventional-commits --create-release github && npm run afterpublishOnly ",
|
||||
"afterpublishOnly": "npm run plugin-doc-gen && npm run copylogs && time /t >trigger/build.trigger && git add ./trigger/build.trigger && git commit -m \"build: trigger build image\" && TIMEOUT /T 10 && npm run commitAll",
|
||||
"publish": "npm run prepublishOnly2 && lerna publish --force-publish=pro/plus-core --conventional-commits && npm run afterpublishOnly ",
|
||||
"afterpublishOnly": "npm run copylogs && time /t >trigger/build.trigger && git add ./trigger/build.trigger && git commit -m \"build: trigger build image\" && TIMEOUT /T 10 && npm run commitAll",
|
||||
"transform-sql": "cd ./packages/ui/certd-server/db/ && node --experimental-json-modules transform.js",
|
||||
"plugin-doc-gen": "cd ./packages/ui/certd-server/ && npm run export-md",
|
||||
"plugin-doc-gen": "cd ./packages/ui/certd-server/ && npm run export-metadata",
|
||||
"commitAll": "git add . && git commit -m \"build: publish\" && git push && npm run commitPro",
|
||||
"commitPro": "cd ./packages/pro/ && git add . && git commit -m \"build: publish\" && git push",
|
||||
"copylogs": "copyfiles \"CHANGELOG.md\" ./docs/guide/changelogs/",
|
||||
"prepublishOnly1": "npm run check && lerna run build ",
|
||||
"prepublishOnly2": "npm run check && npm run before-build && lerna run build ",
|
||||
"prepublishOnly2": "npm run check && npm run before-build && lerna run build && npm run plugin-doc-gen",
|
||||
"before-build": "npm run transform-sql && cd ./packages/core/basic && time /t >build.md && git add ./build.md && git commit -m \"build: prepare to build\"",
|
||||
"deploy1": "node --experimental-json-modules deploy.js ",
|
||||
"check": "node --experimental-json-modules publish-check.js",
|
||||
"deploy1": "node --experimental-json-modules ./scripts/deploy.js ",
|
||||
"check": "node --experimental-json-modules ./scripts/publish-check.js",
|
||||
"init": "lerna run build",
|
||||
"init:dev": "lerna run build",
|
||||
"docs:dev": "vitepress dev docs",
|
||||
@@ -36,13 +37,17 @@
|
||||
"docs:preview": "vitepress preview docs",
|
||||
"pub": "echo 1",
|
||||
"dev": "pnpm run -r --parallel compile ",
|
||||
"release": "time /t >trigger/release.trigger && git add trigger/release.trigger && git commit -m \"build: release\" && git push"
|
||||
"release": "time /t >trigger/release.trigger && git add trigger/release.trigger && git commit -m \"build: release\" && git push",
|
||||
"publish_to_atomgit": "node --experimental-json-modules ./scripts/publish-atomgit.js",
|
||||
"publish_to_gitee": "node --experimental-json-modules ./scripts/publish-gitee.js",
|
||||
"publish_to_github": "node --experimental-json-modules ./scripts/publish-github.js",
|
||||
"get_version": "node --experimental-json-modules ./scripts/version.js"
|
||||
},
|
||||
"license": "AGPL-3.0",
|
||||
"dependencies": {
|
||||
"axios": "^1.7.7",
|
||||
"copyfiles": "^2.4.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"root": "link:",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"workspaces": [
|
||||
|
||||
@@ -3,6 +3,59 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/publishlab/node-acme-client/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.8](https://github.com/publishlab/node-acme-client/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化申请证书最大超时时长 ([00f67d8](https://github.com/publishlab/node-acme-client/commit/00f67d86d68f4f83cfafe2fbfeb4af0d86f9d20e))
|
||||
* 支持设置默认的证书申请地址的反向代理 ([0cfb94b](https://github.com/publishlab/node-acme-client/commit/0cfb94b0ba6a6dc3bb0d0a81a1912068a4e6b6b6))
|
||||
|
||||
## [1.38.7](https://github.com/publishlab/node-acme-client/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化zerossl申请证书稳定性 ([4d86fb3](https://github.com/publishlab/node-acme-client/commit/4d86fb319b81dbf6fa6485982105725b1b066593))
|
||||
|
||||
## [1.38.6](https://github.com/publishlab/node-acme-client/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.5](https://github.com/publishlab/node-acme-client/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复litessl new-nonce报428的bug ([540ef96](https://github.com/publishlab/node-acme-client/commit/540ef967457a7871637cfdb5012ed1fa3261757b))
|
||||
|
||||
## [1.38.4](https://github.com/publishlab/node-acme-client/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.3](https://github.com/publishlab/node-acme-client/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.2](https://github.com/publishlab/node-acme-client/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.1](https://github.com/publishlab/node-acme-client/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
# [1.38.0](https://github.com/publishlab/node-acme-client/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.37.17](https://github.com/publishlab/node-acme-client/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* aws route53 ([8caab1f](https://github.com/publishlab/node-acme-client/commit/8caab1fd9264df548f467b94202d567107b7a30b))
|
||||
|
||||
## [1.37.16](https://github.com/publishlab/node-acme-client/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"description": "Simple and unopinionated ACME client",
|
||||
"private": false,
|
||||
"author": "nmorsman",
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"type": "module",
|
||||
"module": "scr/index.js",
|
||||
"main": "src/index.js",
|
||||
@@ -18,10 +18,10 @@
|
||||
"types"
|
||||
],
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.37.16",
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@peculiar/x509": "^1.11.0",
|
||||
"asn1js": "^3.0.5",
|
||||
"axios": "^1.7.2",
|
||||
"axios": "^1.9.0",
|
||||
"debug": "^4.3.5",
|
||||
"http-proxy-agent": "^7.0.2",
|
||||
"https-proxy-agent": "^7.0.5",
|
||||
@@ -70,5 +70,5 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/publishlab/node-acme-client/issues"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -103,7 +103,9 @@ class AcmeClient {
|
||||
max: this.opts.backoffMax,
|
||||
};
|
||||
|
||||
this.http = new HttpClient(this.opts.directoryUrl, this.opts.accountKey, this.opts.externalAccountBinding, this.opts.urlMapping, opts.logger);
|
||||
const cacheNonce = true
|
||||
// const cacheNonce = this.sslProvider === 'litessl';
|
||||
this.http = new HttpClient(this.opts.directoryUrl, this.opts.accountKey, this.opts.externalAccountBinding, this.opts.urlMapping, opts.logger, cacheNonce);
|
||||
this.api = new AcmeApi(this.http, this.opts.accountUrl);
|
||||
this.logger = opts.logger;
|
||||
}
|
||||
@@ -598,8 +600,11 @@ class AcmeClient {
|
||||
throw new Error(`[${d}] Unexpected item status: ${resp.data.status}`);
|
||||
};
|
||||
|
||||
this.log(`[${d}] Waiting for valid status (等待valid状态): ${item.url}`, this.backoffOpts);
|
||||
return util.retry(verifyFn, this.backoffOpts);
|
||||
this.log(`[${d}] Waiting for valid status (等待valid状态): ${item.url}`, JSON.stringify(this.backoffOpts));
|
||||
const log = (...args)=>{
|
||||
this.logger.info(...args)
|
||||
}
|
||||
return util.retry(verifyFn, this.backoffOpts,log);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,7 +19,7 @@ import { getJwk } from './crypto/index.js';
|
||||
*/
|
||||
|
||||
class HttpClient {
|
||||
constructor(directoryUrl, accountKey, externalAccountBinding = {}, urlMapping = {},logger) {
|
||||
constructor(directoryUrl, accountKey, externalAccountBinding = {}, urlMapping = {}, logger, cacheNonce= false) {
|
||||
this.directoryUrl = directoryUrl;
|
||||
this.accountKey = accountKey;
|
||||
this.externalAccountBinding = externalAccountBinding;
|
||||
@@ -31,7 +31,34 @@ class HttpClient {
|
||||
this.directoryMaxAge = 86400;
|
||||
this.directoryTimestamp = 0;
|
||||
this.urlMapping = urlMapping;
|
||||
this.log = logger? logger.info.bind(logger) : log;
|
||||
this.log = logger ? logger.info.bind(logger) : log;
|
||||
this.nonces = [];
|
||||
this.cacheNonce = cacheNonce;
|
||||
}
|
||||
|
||||
pushNonce(nonce) {
|
||||
if (!this.cacheNonce || !nonce) {
|
||||
return;
|
||||
}
|
||||
this.nonces.push({
|
||||
nonce,
|
||||
expires: Date.now() + 30*1000,
|
||||
});
|
||||
}
|
||||
popNonce() {
|
||||
while (true) {
|
||||
if (this.nonces.length === 0) {
|
||||
return null;
|
||||
}
|
||||
const item = this.nonces.shift();
|
||||
if (!item) {
|
||||
return null;
|
||||
}
|
||||
if (item.expires < Date.now()) {
|
||||
continue;
|
||||
}
|
||||
return item.nonce;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -47,8 +74,9 @@ class HttpClient {
|
||||
if (this.urlMapping && this.urlMapping.enabled && this.urlMapping.mappings) {
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
for (const key in this.urlMapping.mappings) {
|
||||
const value = this.urlMapping.mappings[key];
|
||||
if (url.includes(key)) {
|
||||
const newUrl = url.replace(key, this.urlMapping.mappings[key]);
|
||||
const newUrl = url.replace(key, value);
|
||||
this.log(`use reverse proxy: ${newUrl}`);
|
||||
url = newUrl;
|
||||
}
|
||||
@@ -70,6 +98,13 @@ class HttpClient {
|
||||
const resp = await axios.request(opts);
|
||||
|
||||
this.log(`RESP ${resp.status} ${method} ${url}`);
|
||||
|
||||
const nonce = resp.headers['replay-nonce'];
|
||||
if (nonce) {
|
||||
//如果有nonce
|
||||
this.pushNonce(nonce);
|
||||
}
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
@@ -127,6 +162,13 @@ class HttpClient {
|
||||
*/
|
||||
|
||||
async getNonce() {
|
||||
|
||||
//尝试从队列中pop一个nonce
|
||||
const nonce = this.popNonce();
|
||||
if (nonce) {
|
||||
return nonce;
|
||||
}
|
||||
|
||||
const url = await this.getResourceUrl('newNonce');
|
||||
const resp = await this.request(url, 'head');
|
||||
|
||||
@@ -134,7 +176,11 @@ class HttpClient {
|
||||
throw new Error('Failed to get nonce from ACME provider');
|
||||
}
|
||||
|
||||
if (this.cacheNonce) {
|
||||
return this.popNonce();
|
||||
}
|
||||
return resp.headers['replay-nonce'];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,7 +194,7 @@ class HttpClient {
|
||||
const dir = await this.getDirectory();
|
||||
|
||||
if (!dir[resource]) {
|
||||
throw new Error(`Unable to locate API resource URL in ACME directory: "${resource}"`);
|
||||
throw new Error(`Unable to locate API resource URL in ACME directory: "${resource}",获取ACME接口地址信息失败,可能网络不稳定或该证书颁发机构服务器崩溃,目录地址:${this.directoryUrl},请测试地址是否可以正常访问并显示json格式的URL地址列表`);
|
||||
}
|
||||
|
||||
return dir[resource];
|
||||
|
||||
@@ -57,6 +57,32 @@ export function getDirectoryUrl(opts) {
|
||||
return list.production
|
||||
}
|
||||
|
||||
|
||||
export function getAllSslProviderDomains() {
|
||||
const list = Object.values(directory).map((item) => {
|
||||
let url = item.production.replace('https://', '')
|
||||
url = url.substring(0, url.indexOf('/'))
|
||||
return url
|
||||
})
|
||||
return list
|
||||
}
|
||||
|
||||
let sslProviderReverseProxies = {}
|
||||
|
||||
function initSslProviderReverseProxies() {
|
||||
for (const sslProvider of getAllSslProviderDomains()) {
|
||||
sslProviderReverseProxies[sslProvider] = ""
|
||||
}
|
||||
}
|
||||
initSslProviderReverseProxies()
|
||||
|
||||
export function getSslProviderReverseProxies() {
|
||||
return sslProviderReverseProxies
|
||||
}
|
||||
export function setSslProviderReverseProxies(reverseProxies) {
|
||||
Object.assign(sslProviderReverseProxies, reverseProxies)
|
||||
}
|
||||
|
||||
/**
|
||||
* Crypto
|
||||
*/
|
||||
|
||||
@@ -52,11 +52,17 @@ async function retryPromise(fn, attempts, backoff, logger = log) {
|
||||
let aborted = false;
|
||||
|
||||
try {
|
||||
const data = await fn(() => { aborted = true; });
|
||||
const setAbort = () => { aborted = true; }
|
||||
const data = await fn(setAbort);
|
||||
return data;
|
||||
}
|
||||
catch (e) {
|
||||
if (aborted || ((backoff.attempts + 1) >= attempts)) {
|
||||
if (aborted){
|
||||
logger(`用户取消重试`);
|
||||
throw e;
|
||||
}
|
||||
if ( ((backoff.attempts + 1) >= attempts)) {
|
||||
logger(`重试次数超过${attempts}次`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
|
||||
3
packages/core/acme-client/types/index.d.ts
vendored
@@ -118,6 +118,9 @@ export const directory: {
|
||||
};
|
||||
|
||||
export function getDirectoryUrl(opts:{sslProvider:string, pkType: string}): string;
|
||||
export function getAllSslProviderDomains(): string[];
|
||||
export function getSslProviderReverseProxies(): Record<string, string>;
|
||||
export function setSslProviderReverseProxies(reverseProxies: Record<string, string>): void;
|
||||
|
||||
/**
|
||||
* Crypto
|
||||
|
||||
@@ -3,6 +3,61 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* esxi部署失败的bug ([6ab1fca](https://github.com/certd/certd/commit/6ab1fcaf894f7ce343af4b5bf4b0d67438df6618))
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1:: 形式的ipv6校验失败的bug ([8b96f21](https://github.com/certd/certd/commit/8b96f218d5284033f10c186c0ce18e4c16d8e9b2))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持部署到阿里云GA ([1a0d3ee](https://github.com/certd/certd/commit/1a0d3eeb1b0b5ce08f05af84b6161e00c1fe1815))
|
||||
* 支持部署到华为elb ([60c8ace](https://github.com/certd/certd/commit/60c8ace443e848155d3ce12e95b84766a4610d3a))
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 站点检查多个ip连接超时的报错显示不出来的bug ([33b284a](https://github.com/certd/certd/commit/33b284afc0ae6391658d573e32b1ce7765e51cb2))
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1 +1 @@
|
||||
01:44
|
||||
23:08
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/basic",
|
||||
"private": false,
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -18,7 +18,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"async-lock": "^1.4.1",
|
||||
"axios": "^1.7.2",
|
||||
"axios": "^1.9.0",
|
||||
"dayjs": "^1.11.7",
|
||||
"http-proxy-agent": "^7.0.2",
|
||||
"https-proxy-agent": "^7.0.5",
|
||||
@@ -47,5 +47,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -58,8 +58,13 @@ function isIpv6(d: string) {
|
||||
if (!d) {
|
||||
return false;
|
||||
}
|
||||
const isIPv6Regex = /^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$/gm;
|
||||
return isIPv6Regex.test(d);
|
||||
try {
|
||||
// 尝试构造URL,用IPv6作为hostname
|
||||
new URL(`http://[${d}]`);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function isIp(d: string) {
|
||||
|
||||
@@ -11,6 +11,10 @@ function hmacSha256(data: string, digest: BinaryToTextEncoding = "base64") {
|
||||
return crypto.createHmac("sha256", data).update(Buffer.alloc(0)).digest(digest);
|
||||
}
|
||||
|
||||
function hmacSha256WithKey(key: string, data: string, digest: BinaryToTextEncoding = "base64") {
|
||||
return crypto.createHmac("sha256", key).update(data).digest(digest);
|
||||
}
|
||||
|
||||
function base64(data: string) {
|
||||
return Buffer.from(data).toString("base64");
|
||||
}
|
||||
@@ -39,4 +43,5 @@ export const hashUtils = {
|
||||
toHex,
|
||||
hexToStr,
|
||||
hexToNumber,
|
||||
hmacSha256WithKey,
|
||||
};
|
||||
|
||||
@@ -18,7 +18,7 @@ export function resetLogConfigure() {
|
||||
});
|
||||
}
|
||||
resetLogConfigure();
|
||||
export const logger = log4js.getLogger("default");
|
||||
export const logger: ILogger = log4js.getLogger("default") as any;
|
||||
|
||||
export function resetLogFilePath(filePath: string) {
|
||||
logFilePath = filePath;
|
||||
@@ -77,6 +77,8 @@ export type ILogger = {
|
||||
fatal(message: any, ...args: any[]): void;
|
||||
|
||||
mark(message: any, ...args: any[]): void;
|
||||
|
||||
addSecret(secret: string): void;
|
||||
};
|
||||
|
||||
const locale = Intl.DateTimeFormat().resolvedOptions().locale;
|
||||
@@ -106,10 +108,14 @@ export class PipelineLogger implements ILogger {
|
||||
|
||||
constructor(name: string, write: (text: string) => void) {
|
||||
this.customWriter = write;
|
||||
//@ts-ignore
|
||||
this.logger = log4js.getLogger(name);
|
||||
}
|
||||
|
||||
addSecret(secret: string) {
|
||||
if (!secret) {
|
||||
return;
|
||||
}
|
||||
this._secrets.push(secret);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import * as _ from 'lodash-es';
|
||||
import * as _ from "lodash-es";
|
||||
function isUnMergeable(srcValue: any) {
|
||||
return srcValue != null && srcValue instanceof UnMergeable;
|
||||
}
|
||||
|
||||
@@ -25,26 +25,30 @@ export class HttpError extends Error {
|
||||
if (!error) {
|
||||
return;
|
||||
}
|
||||
super(error.message || error.response?.statusText);
|
||||
|
||||
const message = error?.message;
|
||||
let message = error?.message || error?.response.statusText || error?.code;
|
||||
if (message && typeof message === "string" && message.indexOf) {
|
||||
for (const key in errorMap) {
|
||||
if (message.indexOf(key) > -1) {
|
||||
this.message = `${this.message}(${errorMap[key]})`;
|
||||
message = `${message}(${errorMap[key]})`;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!message) {
|
||||
message = error.message;
|
||||
}
|
||||
if (error.errors && error.errors.length > 0) {
|
||||
message += " \n" + error.errors.map((item: any) => item.message).join("\n ");
|
||||
}
|
||||
super(message);
|
||||
|
||||
this.name = error.name;
|
||||
this.code = error.code;
|
||||
|
||||
this.status = error.response?.status;
|
||||
this.statusText = error.response?.statusText || error.code;
|
||||
if (!this.message) {
|
||||
this.message = error.code;
|
||||
}
|
||||
|
||||
this.request = {
|
||||
baseURL: error.config?.baseURL,
|
||||
url: error.config?.url,
|
||||
@@ -173,39 +177,40 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
|
||||
},
|
||||
(error: any) => {
|
||||
const status = error.response?.status;
|
||||
let message = "";
|
||||
switch (status) {
|
||||
case 400:
|
||||
error.message = "请求错误";
|
||||
message = "请求错误";
|
||||
break;
|
||||
case 401:
|
||||
error.message = "认证/登录失败";
|
||||
message = "认证/登录失败";
|
||||
break;
|
||||
case 403:
|
||||
error.message = "拒绝访问";
|
||||
message = "拒绝访问";
|
||||
break;
|
||||
case 404:
|
||||
error.message = `请求地址出错`;
|
||||
message = `请求地址出错`;
|
||||
break;
|
||||
case 408:
|
||||
error.message = "请求超时";
|
||||
message = "请求超时";
|
||||
break;
|
||||
case 500:
|
||||
error.message = "服务器内部错误";
|
||||
message = "服务器内部错误";
|
||||
break;
|
||||
case 501:
|
||||
error.message = "服务未实现";
|
||||
message = "服务未实现";
|
||||
break;
|
||||
case 502:
|
||||
error.message = "网关错误";
|
||||
message = "网关错误";
|
||||
break;
|
||||
case 503:
|
||||
error.message = "服务不可用";
|
||||
message = "服务不可用";
|
||||
break;
|
||||
case 504:
|
||||
error.message = "网关超时";
|
||||
message = "网关超时";
|
||||
break;
|
||||
case 505:
|
||||
error.message = "HTTP版本不受支持";
|
||||
message = "HTTP版本不受支持";
|
||||
break;
|
||||
case 302:
|
||||
//重定向
|
||||
@@ -213,9 +218,12 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (status) {
|
||||
message += ` [${status}] `;
|
||||
}
|
||||
|
||||
const errorCode = error.code;
|
||||
let errorMessage = null;
|
||||
let errorMessage = "";
|
||||
if (errorCode === "ECONNABORTED") {
|
||||
errorMessage = "请求连接终止";
|
||||
} else if (errorCode === "ETIMEDOUT") {
|
||||
@@ -227,11 +235,17 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
|
||||
} else if (errorCode === "ENOTFOUND") {
|
||||
errorMessage = "请求地址不存在";
|
||||
}
|
||||
if (errorMessage) {
|
||||
error.message = errorMessage + "," + error.message;
|
||||
if (errorCode) {
|
||||
errorMessage += ` [${errorCode}] `;
|
||||
}
|
||||
|
||||
logger.error(`请求出错:status:${error.response?.status || error.code},statusText:${error.response?.statusText || error.code},url:${error.config?.url},method:${error.config?.method}。`);
|
||||
if (message) {
|
||||
errorMessage += `,${message}`;
|
||||
}
|
||||
if (error.message) {
|
||||
errorMessage += `(${error.message})`;
|
||||
}
|
||||
error.message = errorMessage;
|
||||
logger.error(`请求出错:${errorMessage} status:${status},statusText:${error.response?.statusText || error.code},url:${error.config?.url},method:${error.config?.method}。`);
|
||||
logger.error("返回数据:", JSON.stringify(error.response?.data));
|
||||
if (error.response?.data) {
|
||||
const message = error.response.data.message || error.response.data.msg || error.response.data.error;
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
import dayjs from "dayjs";
|
||||
|
||||
export const stringUtils = {
|
||||
maxLength(str?: string, length = 100) {
|
||||
if (str) {
|
||||
return str.length > length ? str.slice(0, length) + '...' : str;
|
||||
return str.length > length ? str.slice(0, length) + "..." : str;
|
||||
}
|
||||
return '';
|
||||
return "";
|
||||
},
|
||||
|
||||
appendTimeSuffix(str?: string) {
|
||||
if (str) {
|
||||
return `${str}-${dayjs().format("YYYYMMDDHHmmssSSS")}`;
|
||||
}
|
||||
return "";
|
||||
},
|
||||
};
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"inlineSourceMap":false,
|
||||
"sourceMap": false,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": true,
|
||||
"stripInternal": true,
|
||||
@@ -21,7 +23,6 @@
|
||||
"useDefineForClassFields": true,
|
||||
"strict": true,
|
||||
"typeRoots": [ "./typings", "./node_modules/@types"],
|
||||
"inlineSourceMap": true,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": false,
|
||||
"lib": ["ESNext", "DOM"],
|
||||
|
||||
@@ -3,6 +3,69 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 修复旧版本流水线数据发送通知标题为空的bug ([9bee0e4](https://github.com/certd/certd/commit/9bee0e460bfebe8db76742b80b2d52854392f4de))
|
||||
* 支持部署到阿里云GA ([1a0d3ee](https://github.com/certd/certd/commit/1a0d3eeb1b0b5ce08f05af84b6161e00c1fe1815))
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复插件修改名字和删除后没有注销注册的bug ([61192b9](https://github.com/certd/certd/commit/61192b998a7088a8f446fd224cc242def462a79b))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持同步域名过期时间 ([a97cee8](https://github.com/certd/certd/commit/a97cee84f3bfdeeb2083d91f748cac5405fed6ae))
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复自定义插件name丢失author导致找不到插件的bug ([2fbb58e](https://github.com/certd/certd/commit/2fbb58eb2b239eab4864f90aa72b0ef2ada38e8f))
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
### Features
|
||||
|
||||
* 【破坏性更新】插件改为metadata加载模式,plugin-cert、plugin-lib包部分代码转移到certd-server中,影响自定义插件,需要修改相关import引用 ([a3fb249](https://github.com/certd/certd/commit/a3fb24993d7ac8fbb0bb354fa02ef067f609021e))
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 发送证书到邮箱插件的邮件模版转为使用邮箱配置中的通用模版 ([c5a3003](https://github.com/certd/certd/commit/c5a3003cf7b640500a90ec2c8961859ffe6fdb18))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持ucloud,上传到ussl,部署到ucdn ([e61daae](https://github.com/certd/certd/commit/e61daaee2d0dec19710cd4ec759219a071f2435e))
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/pipeline",
|
||||
"private": false,
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -18,8 +18,8 @@
|
||||
"compile": "tsc --skipLibCheck --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.37.16",
|
||||
"@certd/plus-core": "^1.37.16",
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@certd/plus-core": "^1.38.9",
|
||||
"dayjs": "^1.11.7",
|
||||
"lodash-es": "^4.17.21",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
@@ -45,5 +45,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ export const ACCESS_INPUT_KEY = "pipeline:access:input";
|
||||
|
||||
export function IsAccess(define: AccessDefine): ClassDecorator {
|
||||
return (target: any) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target);
|
||||
|
||||
const inputs: any = {};
|
||||
@@ -35,6 +38,9 @@ export function IsAccess(define: AccessDefine): ClassDecorator {
|
||||
|
||||
export function AccessInput(input?: AccessInputDefine): PropertyDecorator {
|
||||
return (target, propertyKey) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target, propertyKey);
|
||||
// const _type = Reflect.getMetadata("design:type", target, propertyKey);
|
||||
Reflect.defineMetadata(ACCESS_INPUT_KEY, input, target, propertyKey);
|
||||
|
||||
@@ -11,11 +11,11 @@ export type PageSearch = {
|
||||
// sortOrder?: "asc" | "desc";
|
||||
};
|
||||
|
||||
export type PageRes = {
|
||||
export type PageRes<T = any> = {
|
||||
pageNo?: number;
|
||||
pageSize?: number;
|
||||
total?: string;
|
||||
list: any[];
|
||||
total?: number;
|
||||
list: T[];
|
||||
};
|
||||
|
||||
export class Pager {
|
||||
@@ -34,3 +34,36 @@ export class Pager {
|
||||
this.pageNo = Math.ceil(offset / (this.pageSize ?? 50)) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
export type PageTurnReq<T = any> = {
|
||||
pager: Pager;
|
||||
getPage: (pager: Pager) => Promise<PageRes<T>>;
|
||||
itemHandle?: (item: T) => Promise<void>;
|
||||
batchHandle?: (pageRes: PageRes<T>) => Promise<void>;
|
||||
};
|
||||
|
||||
export async function doPageTurn<T>(req: PageTurnReq<T>) {
|
||||
let count = 0;
|
||||
const { pager, getPage, itemHandle, batchHandle } = req;
|
||||
while (true) {
|
||||
const pageRes = await getPage(pager);
|
||||
if (!pageRes || !pageRes.list || pageRes.list.length === 0) {
|
||||
break;
|
||||
}
|
||||
count += pageRes.list.length;
|
||||
if (batchHandle) {
|
||||
await batchHandle(pageRes);
|
||||
}
|
||||
if (itemHandle) {
|
||||
for (const item of pageRes.list) {
|
||||
await itemHandle(item);
|
||||
}
|
||||
}
|
||||
if (pageRes.total && pageRes.total >= 0 && count >= pageRes.total) {
|
||||
//遍历完成
|
||||
break;
|
||||
}
|
||||
pager.pageNo++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -276,7 +276,10 @@ export class Executor {
|
||||
const lastStatus = this.lastStatusMap.get(step.id);
|
||||
//执行任务
|
||||
const plugin: RegistryItem<AbstractTaskPlugin> = pluginRegistry.get(step.type);
|
||||
|
||||
if (!plugin) {
|
||||
currentLogger.error(`未找到插件${step.type}`);
|
||||
throw new Error(`未找到插件${step.type}`);
|
||||
}
|
||||
//@ts-ignore
|
||||
let instance: ITaskPlugin = null;
|
||||
try {
|
||||
@@ -285,7 +288,7 @@ export class Executor {
|
||||
//@ts-ignore
|
||||
instance = new pluginCls();
|
||||
} catch (e: any) {
|
||||
currentLogger.error(`实例化插件失败:${e.message}`);
|
||||
currentLogger.error(`实例化插件失败:${step.type}:${e.message}`);
|
||||
throw new Error(`实例化插件失败`, e);
|
||||
}
|
||||
|
||||
@@ -462,6 +465,8 @@ export class Executor {
|
||||
|
||||
templateData.errors = errors;
|
||||
templateData.pipelineResult = pipelineResult;
|
||||
templateData.title = subject;
|
||||
templateData.content = content;
|
||||
|
||||
for (const notification of this.pipeline.notifications) {
|
||||
if (!notification.when.includes(when)) {
|
||||
|
||||
@@ -11,6 +11,9 @@ export const NOTIFICATION_INPUT_KEY = "pipeline:notification:input";
|
||||
|
||||
export function IsNotification(define: NotificationDefine): ClassDecorator {
|
||||
return (target: any) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target);
|
||||
|
||||
const inputs: any = {};
|
||||
@@ -35,6 +38,9 @@ export function IsNotification(define: NotificationDefine): ClassDecorator {
|
||||
|
||||
export function NotificationInput(input?: NotificationInputDefine): PropertyDecorator {
|
||||
return (target, propertyKey) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target, propertyKey);
|
||||
// const _type = Reflect.getMetadata("design:type", target, propertyKey);
|
||||
Reflect.defineMetadata(NOTIFICATION_INPUT_KEY, input, target, propertyKey);
|
||||
|
||||
@@ -249,10 +249,7 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
|
||||
abstract execute(): Promise<void | string>;
|
||||
|
||||
appendTimeSuffix(name?: string) {
|
||||
if (name == null) {
|
||||
name = "certd";
|
||||
}
|
||||
return name + "_" + dayjs().format("YYYYMMDDHHmmssSSS");
|
||||
return utils.string.appendTimeSuffix(name);
|
||||
}
|
||||
|
||||
buildCertName(domain: string, prefix = "") {
|
||||
@@ -297,6 +294,10 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
|
||||
getStepIdFromRefInput(ref = ".") {
|
||||
return ref.split(".")[1];
|
||||
}
|
||||
|
||||
buildDomainGroupOptions(options: any[], domains: string[]) {
|
||||
return utils.options.buildGroupOptions(options, domains);
|
||||
}
|
||||
}
|
||||
|
||||
export type OutputVO = {
|
||||
|
||||
@@ -8,6 +8,9 @@ export const PLUGIN_CLASS_KEY = "pipeline:plugin";
|
||||
|
||||
export function IsTaskPlugin(define: PluginDefine): ClassDecorator {
|
||||
return (target: any) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target);
|
||||
|
||||
const inputs: any = {};
|
||||
@@ -69,6 +72,9 @@ export const PLUGIN_INPUT_KEY = "pipeline:plugin:input";
|
||||
|
||||
export function TaskInput(input?: TaskInputDefine): PropertyDecorator {
|
||||
return (target, propertyKey) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target, propertyKey);
|
||||
Reflect.defineMetadata(PLUGIN_INPUT_KEY, input, target, propertyKey);
|
||||
};
|
||||
@@ -78,6 +84,9 @@ export function TaskInput(input?: TaskInputDefine): PropertyDecorator {
|
||||
export const PLUGIN_OUTPUT_KEY = "pipeline:plugin:output";
|
||||
export function TaskOutput(output?: TaskOutputDefine): PropertyDecorator {
|
||||
return (target, propertyKey) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target, propertyKey);
|
||||
Reflect.defineMetadata(PLUGIN_OUTPUT_KEY, output, target, propertyKey);
|
||||
};
|
||||
@@ -86,6 +95,9 @@ export function TaskOutput(output?: TaskOutputDefine): PropertyDecorator {
|
||||
export const PLUGIN_DOWNLOAD_KEY = "pipeline:plugin:download";
|
||||
export function TaskDownload(output?: TaskOutputDefine): PropertyDecorator {
|
||||
return (target, propertyKey) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target, propertyKey);
|
||||
Reflect.defineMetadata(PLUGIN_DOWNLOAD_KEY, output, target, propertyKey);
|
||||
};
|
||||
|
||||
@@ -22,4 +22,15 @@ const onRegister = ({ key, value }: OnRegisterContext<AbstractTaskPlugin>) => {
|
||||
}
|
||||
pluginGroups.other.plugins.push(value.define);
|
||||
};
|
||||
export const pluginRegistry = createRegistry<AbstractTaskPlugin>("plugin", onRegister);
|
||||
|
||||
const onUnRegister = ({ key }: OnRegisterContext<AbstractTaskPlugin>) => {
|
||||
for (const group of Object.values(pluginGroups)) {
|
||||
const index = group.plugins.findIndex(plugin => plugin.name === key);
|
||||
if (index > -1) {
|
||||
group.plugins.splice(index, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const pluginRegistry = createRegistry<AbstractTaskPlugin>("plugin", onRegister, onUnRegister);
|
||||
|
||||
@@ -27,10 +27,12 @@ export class Registry<T = any> {
|
||||
} = {};
|
||||
|
||||
onRegister?: OnRegister<T>;
|
||||
onUnRegister?: OnRegister<T>;
|
||||
|
||||
constructor(type: string, onRegister?: OnRegister<T>) {
|
||||
constructor(type: string, onRegister?: OnRegister<T>, onUnRegister?: OnRegister<T>) {
|
||||
this.type = type;
|
||||
this.onRegister = onRegister;
|
||||
this.onUnRegister = onUnRegister;
|
||||
}
|
||||
|
||||
register(key: string, value: RegistryItem<T>) {
|
||||
@@ -49,6 +51,13 @@ export class Registry<T = any> {
|
||||
}
|
||||
|
||||
unRegister(key: string) {
|
||||
if (this.onUnRegister) {
|
||||
this.onUnRegister({
|
||||
registry: this,
|
||||
key,
|
||||
value: this.storage[key],
|
||||
});
|
||||
}
|
||||
delete this.storage[key];
|
||||
logger.info(`反注册插件:${this.type}:${key}`);
|
||||
}
|
||||
@@ -108,7 +117,7 @@ export class Registry<T = any> {
|
||||
}
|
||||
}
|
||||
|
||||
export function createRegistry<T>(type: string, onRegister?: OnRegister<T>): Registry<T> {
|
||||
export function createRegistry<T>(type: string, onRegister?: OnRegister<T>, onUnRegister?: OnRegister<T>): Registry<T> {
|
||||
const pipelineregistrycacheKey = "PIPELINE_REGISTRY_CACHE";
|
||||
// @ts-ignore
|
||||
let cached: any = global[pipelineregistrycacheKey];
|
||||
@@ -121,7 +130,7 @@ export function createRegistry<T>(type: string, onRegister?: OnRegister<T>): Reg
|
||||
if (cached[type]) {
|
||||
return cached[type];
|
||||
}
|
||||
const newRegistry = new Registry<T>(type, onRegister);
|
||||
const newRegistry = new Registry<T>(type, onRegister, onUnRegister);
|
||||
cached[type] = newRegistry;
|
||||
return newRegistry;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { IAccess } from "../access";
|
||||
import { IAccess } from "../access/index.js";
|
||||
|
||||
export type CnameProvider = {
|
||||
id: any;
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"inlineSourceMap":true,
|
||||
"inlineSourceMap":false,
|
||||
"sourceMap": false,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": true,
|
||||
"importHelpers": true,
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-huawei",
|
||||
"private": false,
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
"types": "./dist/d/index.d.ts",
|
||||
@@ -14,7 +14,7 @@
|
||||
"pub": "npm publish"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.7.2",
|
||||
"axios": "^1.9.0",
|
||||
"rimraf": "^5.0.5",
|
||||
"rollup": "^3.7.4"
|
||||
},
|
||||
@@ -24,5 +24,5 @@
|
||||
"prettier": "^2.8.8",
|
||||
"tslib": "^2.8.1"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
"composite": false,
|
||||
"useDefineForClassFields": true,
|
||||
"strict": false,
|
||||
"sourceMap": true,
|
||||
"sourceMap": false,
|
||||
"inlineSourceMap": false,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": false,
|
||||
"lib": ["ESNext", "DOM"],
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-iframe",
|
||||
"private": false,
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -31,5 +31,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"inlineSourceMap":true,
|
||||
"inlineSourceMap":false,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": true,
|
||||
"stripInternal": true,
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/jdcloud",
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"description": "jdcloud openApi sdk",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
@@ -56,5 +56,5 @@
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
"composite": false,
|
||||
"useDefineForClassFields": true,
|
||||
"strict": false,
|
||||
"sourceMap": true,
|
||||
"sourceMap": false,
|
||||
"inlineSourceMap": false,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": false,
|
||||
"lib": ["ESNext", "DOM"],
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-k8s",
|
||||
"private": false,
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -17,7 +17,7 @@
|
||||
"pub": "npm publish"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.37.16",
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@kubernetes/client-node": "0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -32,5 +32,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"inlineSourceMap":true,
|
||||
"inlineSourceMap":false,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": true,
|
||||
"stripInternal": true,
|
||||
|
||||
@@ -3,6 +3,65 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持设置默认的证书申请地址的反向代理 ([0cfb94b](https://github.com/certd/certd/commit/0cfb94b0ba6a6dc3bb0d0a81a1912068a4e6b6b6))
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持绑定两个url地址 ([a2e9a41](https://github.com/certd/certd/commit/a2e9a41a7e712395c0e3ee6fe55b370aa1fc1f12))
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 域名导入任务进度条 ([7058d5c](https://github.com/certd/certd/commit/7058d5cb935cab8c75b98493ed497a22dbe70883))
|
||||
* 证书仓库页面增加到期状态查询条件 ([58c3d70](https://github.com/certd/certd/commit/58c3d7087bb66358d896a741e12005f690b2bd5e))
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
### Features
|
||||
|
||||
* 【破坏性更新】插件改为metadata加载模式,plugin-cert、plugin-lib包部分代码转移到certd-server中,影响自定义插件,需要修改相关import引用 ([a3fb249](https://github.com/certd/certd/commit/a3fb24993d7ac8fbb0bb354fa02ef067f609021e))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持公告功能 ([a79fe1f](https://github.com/certd/certd/commit/a79fe1f350f2991af9e5b50825f1776029677fc5))
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 执行队列数量支持设置 ([cd94488](https://github.com/certd/certd/commit/cd944882c3272adad4a2da94a3889a01fe05fe13))
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/lib-server",
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -28,11 +28,11 @@
|
||||
],
|
||||
"license": "AGPL",
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.37.16",
|
||||
"@certd/basic": "^1.37.16",
|
||||
"@certd/pipeline": "^1.37.16",
|
||||
"@certd/plugin-lib": "^1.37.16",
|
||||
"@certd/plus-core": "^1.37.16",
|
||||
"@certd/acme-client": "^1.38.9",
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@certd/pipeline": "^1.38.9",
|
||||
"@certd/plugin-lib": "^1.38.9",
|
||||
"@certd/plus-core": "^1.38.9",
|
||||
"@midwayjs/cache": "3.14.0",
|
||||
"@midwayjs/core": "3.20.11",
|
||||
"@midwayjs/i18n": "3.20.13",
|
||||
@@ -64,5 +64,5 @@
|
||||
"typeorm": "^0.3.11",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ export class UserTaskQueue{
|
||||
|
||||
export class ExecutorQueue{
|
||||
queues: Record<number, UserTaskQueue> = {};
|
||||
maxRunningCount: number = 8;
|
||||
maxRunningCount: number = 10;
|
||||
|
||||
|
||||
setMaxRunningCount(count: number) {
|
||||
|
||||
@@ -20,6 +20,7 @@ export class PlusService {
|
||||
|
||||
const subjectId = installInfo.siteId;
|
||||
const bindUrl = installInfo.bindUrl;
|
||||
const bindUrl2 = installInfo.bindUrl2;
|
||||
const installTime = installInfo.installTime;
|
||||
const saveLicense = async (license: string) => {
|
||||
let licenseInfo: SysLicenseInfo = await this.sysSettingsService.getSetting(SysLicenseInfo);
|
||||
@@ -30,7 +31,7 @@ export class PlusService {
|
||||
await this.sysSettingsService.saveSetting(licenseInfo);
|
||||
};
|
||||
|
||||
return new PlusRequestService({ subjectId, bindUrl, installTime, saveLicense });
|
||||
return new PlusRequestService({ subjectId, bindUrl, bindUrl2, installTime, saveLicense });
|
||||
}
|
||||
|
||||
async getSubjectId() {
|
||||
@@ -53,9 +54,9 @@ export class PlusService {
|
||||
await plusRequestService.verify({ license: licenseInfo.license });
|
||||
}
|
||||
|
||||
async bindUrl(url: string) {
|
||||
async bindUrl(url: string, url2?:string) {
|
||||
const plusRequestService = await this.getPlusRequestService();
|
||||
const res = await plusRequestService.bindUrl(url);
|
||||
const res = await plusRequestService.bindUrl(url,url2);
|
||||
this.plusRequestService = null;
|
||||
return res;
|
||||
}
|
||||
@@ -150,6 +151,12 @@ export class PlusService {
|
||||
}
|
||||
}
|
||||
|
||||
async getTodayOrderCount () {
|
||||
await this.register();
|
||||
const plusRequestService = await this.getPlusRequestService();
|
||||
return await plusRequestService.getOrderCount()
|
||||
}
|
||||
|
||||
async requestWithToken(config: HttpRequestConfig) {
|
||||
const plusRequestService = await this.getPlusRequestService();
|
||||
const token = await this.getAccessToken();
|
||||
|
||||
@@ -21,6 +21,7 @@ export class SysPublicSettings extends BaseSettings {
|
||||
usernameRegisterEnabled = true;
|
||||
mobileRegisterEnabled = false;
|
||||
smsLoginEnabled = false;
|
||||
useSmsLoginDefault = true;
|
||||
emailRegisterEnabled = false;
|
||||
selfServicePasswordRetrievalEnabled = false;
|
||||
|
||||
@@ -52,6 +53,8 @@ export class SysPublicSettings extends BaseSettings {
|
||||
|
||||
//默认到期前更新天数
|
||||
defaultCertRenewDays?: number;
|
||||
// 即将到期天数
|
||||
defaultWillExpireDays?: number = 15;
|
||||
|
||||
// 第三方OAuth配置
|
||||
oauthEnabled?: boolean = false;
|
||||
@@ -61,6 +64,7 @@ export class SysPublicSettings extends BaseSettings {
|
||||
addonId: number;
|
||||
}> = {};
|
||||
|
||||
notice?: string;
|
||||
}
|
||||
|
||||
export class SysPrivateSettings extends BaseSettings {
|
||||
@@ -72,6 +76,9 @@ export class SysPrivateSettings extends BaseSettings {
|
||||
|
||||
httpsProxy? = '';
|
||||
httpProxy? = '';
|
||||
|
||||
reverseProxies?: Record<string, string> = {};
|
||||
|
||||
dnsResultOrder? = '';
|
||||
commonCnameEnabled?: boolean = true;
|
||||
|
||||
@@ -103,6 +110,7 @@ export class SysInstallInfo extends BaseSettings {
|
||||
siteId?: string;
|
||||
bindUserId?: number;
|
||||
bindUrl?: string;
|
||||
bindUrl2?: string;
|
||||
accountServerBaseUrl?: string;
|
||||
appKey?: string;
|
||||
}
|
||||
@@ -253,3 +261,4 @@ export class SysSafeSetting extends BaseSettings {
|
||||
autoHiddenTimes: 5,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ import { Repository } from 'typeorm';
|
||||
import { SysSettingsEntity } from '../entity/sys-settings.js';
|
||||
import { BaseSettings, SysInstallInfo, SysPrivateSettings, SysPublicSettings, SysSecret, SysSecretBackup } from './models.js';
|
||||
|
||||
import { BaseService } from '../../../basic/index.js';
|
||||
import { cache, logger, setGlobalProxy } from '@certd/basic';
|
||||
import { getAllSslProviderDomains, setSslProviderReverseProxies } from '@certd/acme-client';
|
||||
import { cache, logger, mergeUtils, setGlobalProxy } from '@certd/basic';
|
||||
import * as dns from 'node:dns';
|
||||
import {mergeUtils} from "@certd/basic";
|
||||
import { BaseService } from '../../../basic/index.js';
|
||||
import { executorQueue } from '../../basic/service/executor-queue.js';
|
||||
const {merge} = mergeUtils;
|
||||
/**
|
||||
@@ -120,7 +120,14 @@ export class SysSettingsService extends BaseService<SysSettingsEntity> {
|
||||
}
|
||||
|
||||
async getPrivateSettings(): Promise<SysPrivateSettings> {
|
||||
return await this.getSetting(SysPrivateSettings);
|
||||
const res = await this.getSetting<SysPrivateSettings>(SysPrivateSettings);
|
||||
const sslProviderDomains = getAllSslProviderDomains();
|
||||
for (const domain of sslProviderDomains) {
|
||||
if (!res.reverseProxies[domain]) {
|
||||
res.reverseProxies[domain] = "";
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
async savePrivateSettings(bean: SysPrivateSettings) {
|
||||
@@ -145,6 +152,8 @@ export class SysSettingsService extends BaseService<SysSettingsEntity> {
|
||||
if (bean.pipelineMaxRunningCount){
|
||||
executorQueue.setMaxRunningCount(bean.pipelineMaxRunningCount);
|
||||
}
|
||||
|
||||
setSslProviderReverseProxies(bean.reverseProxies);
|
||||
}
|
||||
|
||||
async updateByKey(key: string, setting: any) {
|
||||
|
||||
@@ -11,6 +11,9 @@ export const ADDON_INPUT_KEY = "pipeline:addon:input";
|
||||
|
||||
export function IsAddon(define: AddonDefine): ClassDecorator {
|
||||
return (target: any) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target);
|
||||
|
||||
const inputs: any = {};
|
||||
@@ -36,6 +39,9 @@ export function IsAddon(define: AddonDefine): ClassDecorator {
|
||||
|
||||
export function AddonInput(input?: AddonInputDefine): PropertyDecorator {
|
||||
return (target, propertyKey) => {
|
||||
if (process.env.certd_plugin_loadmode === "metadata") {
|
||||
return;
|
||||
}
|
||||
target = Decorator.target(target, propertyKey);
|
||||
// const _type = Reflect.getMetadata("design:type", target, propertyKey);
|
||||
Reflect.defineMetadata(ADDON_INPUT_KEY, input, target, propertyKey);
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
"isolatedModules": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"inlineSourceMap":true,
|
||||
"inlineSourceMap":false,
|
||||
"sourceMap": false,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": true,
|
||||
"stripInternal": true,
|
||||
|
||||
@@ -3,6 +3,52 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 修改sql升级语句,兼容mysql5.7 ([02f89a9](https://github.com/certd/certd/commit/02f89a9c9d77850437285844670aed441e5953c3))
|
||||
|
||||
## [1.38.8](https://github.com/certd/certd/compare/v1.38.7...v1.38.8) (2026-02-06)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.7](https://github.com/certd/certd/compare/v1.38.6...v1.38.7) (2026-02-05)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.6](https://github.com/certd/certd/compare/v1.38.5...v1.38.6) (2026-02-04)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.5](https://github.com/certd/certd/compare/v1.38.4...v1.38.5) (2026-02-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/midway-flyway-js",
|
||||
"version": "1.37.16",
|
||||
"version": "1.38.9",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -46,5 +46,5 @@
|
||||
"typeorm": "^0.3.11",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fa14f6219810ddbfcf1dde7b69963ee8a36c80c4"
|
||||
"gitHead": "4fda6cbcde3d398d7f4dc3ee7e8ea90e691098db"
|
||||
}
|
||||
|
||||
@@ -31,6 +31,12 @@ const DefaultLogger = {
|
||||
console.error(args);
|
||||
},
|
||||
};
|
||||
|
||||
let customLogger:any = null;
|
||||
export function setFlywayLogger (logger: any) {
|
||||
customLogger = logger;
|
||||
};
|
||||
|
||||
export class Flyway {
|
||||
scriptDir;
|
||||
flywayTableName;
|
||||
@@ -43,7 +49,7 @@ export class Flyway {
|
||||
this.flywayTableName = opts.flywayTableName ?? 'flyway_history';
|
||||
this.baseline = opts.baseline ?? false;
|
||||
this.allowHashNotMatch = opts.allowHashNotMatch ?? false;
|
||||
this.logger = opts.logger || DefaultLogger;
|
||||
this.logger = customLogger || opts.logger || DefaultLogger;
|
||||
this.connection = opts.connection;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
// src/index.ts
|
||||
export { FlywayConfiguration as Configuration } from './configuration.js';
|
||||
// eslint-disable-next-line node/no-unpublished-import
|
||||
export { Flyway } from './flyway.js';
|
||||
// eslint-disable-next-line node/no-unpublished-import
|
||||
export { Flyway, setFlywayLogger } from './flyway.js';
|
||||
export { FlywayHistory } from './entity.js';
|
||||
|
||||