Compare commits

..

28 Commits

Author SHA1 Message Date
xiaojunnuo
586725a15c v1.26.13 2024-10-26 20:30:32 +08:00
xiaojunnuo
34300a19a6 chore: 2024-10-26 20:30:25 +08:00
xiaojunnuo
11def7e42a build: prepare to build 2024-10-26 20:27:43 +08:00
xiaojunnuo
4f3fb3766e chore: 2024-10-26 20:26:11 +08:00
xiaojunnuo
cbc3eb9453 chore: 2024-10-26 20:15:23 +08:00
xiaojunnuo
c31bc0266a chore: client timeout 2024-10-26 19:56:26 +08:00
xiaojunnuo
b6176d7629 chore: client timeout 2024-10-26 19:55:52 +08:00
xiaojunnuo
bc2e78db39 chore: 2024-10-26 19:51:18 +08:00
xiaojunnuo
fdda8985de chore: 2024-10-26 18:10:19 +08:00
xiaojunnuo
be2f0aa435 chore: 优化https server重启 2024-10-26 18:01:06 +08:00
xiaojunnuo
513a5b49c1 chore: 2024-10-26 17:24:48 +08:00
xiaojunnuo
0c50ede129 perf: 更新certd本身的证书文档说明 2024-10-26 17:14:55 +08:00
xiaojunnuo
d5a17f9e6a perf: 支持同时监听https端口,7002 2024-10-26 16:36:57 +08:00
xiaojunnuo
4b09a0a27f chore: 备份恢复 2024-10-26 13:58:04 +08:00
xiaojunnuo
cba38f6e12 chore: 备份恢复 2024-10-26 13:57:19 +08:00
xiaojunnuo
a672043e2e chore: 2024-10-26 13:54:45 +08:00
xiaojunnuo
e1c6d8a2d0 chore: 2024-10-26 12:10:28 +08:00
xiaojunnuo
9041602cfd chore: 2024-10-26 12:05:12 +08:00
xiaojunnuo
bcbefaaa35 fix: deprecated的运行时不要报错,只报警告 2024-10-26 11:20:50 +08:00
xiaojunnuo
925edef0a5 docs: 2024-10-26 11:01:47 +08:00
xiaojunnuo
90c54fd9e0 docs: 2024-10-26 10:59:25 +08:00
xiaojunnuo
95df56cc5c fix: 修复对话框全屏按钮与关闭按钮重叠的bug 2024-10-26 10:17:39 +08:00
xiaojunnuo
ebced940d4 Merge branch 'v2' into v2-dev 2024-10-26 00:10:12 +08:00
xiaojunnuo
b21db8da6b build: publish 2024-10-26 00:01:39 +08:00
xiaojunnuo
55c76cb89c build: trigger build image 2024-10-26 00:01:24 +08:00
xiaojunnuo
de62abf0e7 Merge branch 'refs/heads/v2-dev' into v2 2024-10-23 10:43:37 +08:00
xiaojunnuo
0e859d32ee Merge remote-tracking branch 'origin/v2' into v2
# Conflicts:
#	README.md
2024-10-21 11:20:19 +08:00
xiaojunnuo
5840247f3e chore: 1 2024-10-21 11:19:48 +08:00
73 changed files with 557 additions and 362 deletions

View File

@@ -37,7 +37,7 @@ jobs:
- uses: GuillaumeFalourd/wait-sleep-action@v1
with:
time: '10' # for 60 seconds
- name: Send HTTP request
- name: deploy-certd-demo
id: request
uses: tyrrrz/action-http-request@master
with:
@@ -52,4 +52,13 @@ jobs:
retry-count: 3
retry-delay: 5000
- name: deploy-certd-doc
id: request
uses: tyrrrz/action-http-request@master
with:
url: http://flow-openapi.aliyun.com/pipeline/webhook/IiSxLDp9aOhgDUxJPytv
method: POST
headers: |
Content-Type: application/json
retry-count: 3
retry-delay: 5000

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
### Bug Fixes
* 修复对话框全屏按钮与关闭按钮重叠的bug ([95df56c](https://github.com/certd/certd/commit/95df56cc5ca5e3eb843cd17cb7078cde47729f1e))
* deprecated的运行时不要报错只报警告 ([bcbefaa](https://github.com/certd/certd/commit/bcbefaaa35cf6d0eec085b3a2c5bfc7c6a8de9e1))
### Performance Improvements
* 更新certd本身的证书文档说明 ([0c50ede](https://github.com/certd/certd/commit/0c50ede129337b82df54575cbd2f4c2a783a0732))
* 支持同时监听https端口7002 ([d5a17f9](https://github.com/certd/certd/commit/d5a17f9e6afd63fda2df0981118480f25a1fac2e))
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
### Performance Improvements

157
README.md
View File

@@ -17,6 +17,8 @@ Certd 是一个免费全自动申请和自动部署更新SSL证书的管理系
* 支持sqlitepostgresql数据库
## 二、在线体验
官方Demo地址自助注册后体验
@@ -27,6 +29,10 @@ https://certd.handsfree.work/
> 包含敏感信息,务必自己本地部署进行生产使用
## 三、使用教程
更多教程请访问文档网站 [certd.docmirror.cn](https://certd.docmirror.cn/)
本案例演示如何配置自动申请证书并部署到阿里云CDN然后快要到期前自动更新证书并重新部署
![演示](packages/ui/certd-client/public/static/doc/images/5-view.png)
@@ -40,64 +46,20 @@ https://certd.handsfree.work/
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
当前支持的部署插件列表
![演示](./doc/images/plugins.png)
![演示](./docs/images/plugins/list.png)
## 四、私有化部署
由于证书、授权信息等属于高度敏感数据,请务必私有化部署,保障数据安全
由于证书、授权信息等属于高度敏感数据,请务必私有化部署,保障数据安全
### 4.1 宝塔面板一键部署
您可以根据实际情况从如下方式中选择一种方式进行私有化部署:
1. 安装宝塔面板,前往 [宝塔面板](https://www.bt.cn/u/CL3JHS) 官网选择9.2.0以上正式版的脚本下载安装
1. [宝塔面板方式部署](./install/baota/)
2. [1Panel面板方式部署](./install/1panel/)
2. [Docker方式部署](./install/docker/)
3. [源码方式部署](./install/source/)
2. 安装后登录宝塔面板,在菜单栏中点击 Docker首次进入会提示安装Docker服务点击立即安装按提示完成安装
3. 安装完成后在应用商店中找到`certd`(要先点右上角更新应用),点击安装,配置域名等基本信息即可完成安装
### 4.2 宝塔面板容器编排部署
[宝塔面板容器编排部署教程](./doc/deploy/baota/baota.md)
### 4.3 Docker部署
#### 1. 安装docker、docker-compose
1.1 准备一台云服务器
* 【阿里云】云服务器2核2G新老用户同享99元/年,续费同价!【 [立即购买](https://www.aliyun.com/benefit?scm=20140722.M_10244282._.V_1&source=5176.11533457&userCode=qya11txb )】
* 【腾讯云】云服务器2核2G新老用户同享99元/年,续费同价!【 [立即购买](https://cloud.tencent.com/act/cps/redirect?redirect=6094&cps_key=b3ef73330335d7a6efa4a4bbeeb6b2c9&from=console)】
1.2 安装docker
https://docs.docker.com/engine/install/
选择对应的操作系统,按照官方文档执行命令即可
#### 2. 运行certd
[docker-compose.yaml 下载](https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml)
当前版本号: ![](https://img.shields.io/npm/v/%40certd%2Fpipeline)
```bash
# 随便创建一个目录
mkdir certd
# 进入目录
cd certd
# 下载docker-compose.yaml文件或者手动下载放到certd目录下
wget https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml
# 可以根据需要修改里面的配置
# 1.修改镜像版本号【可选】
# 2.配置数据保存路径【可选】
# 3.修改端口号【可选】
vi docker-compose.yaml # 【可选】
# 启动certd
docker compose up -d
```
> 如果提示 没有compose命令,请安装docker-compose
> https://docs.docker.com/compose/install/linux/
#### 3. 镜像说明:
#### Docker镜像说明
* 国内镜像地址:
* `registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest`
* `registry.cn-shenzhen.aliyuncs.com/handsfree/certd:armv7``[version]-armv7`
@@ -109,25 +71,7 @@ docker compose up -d
* 镜像构建通过`Actions`自动执行,过程公开透明,请放心使用
* [点我查看镜像构建日志](https://github.com/certd/certd/actions/workflows/build-image.yml)
![](./doc/images/action-build.jpg)
#### 4. 访问测试
http://your_server_ip:7001
默认账号密码admin/123456
记得修改密码
### 4.4 源码部署
```shell
# 克隆代码
git clone https://github.com/certd/certd
git checkout v1.26.7 # 这里换成最新版本号
cd certd
# 启动服务
./start.sh
# 数据默认保存在 ./packages/ui/certd-server/data 目录下,注意数据备份
```
如果是windows请先安装`git for windows` ,然后右键,选择`open git bash here`打开终端,再执行`./start.sh`命令
![](./docs/images/action/action-build.jpg)
## 五、 升级
@@ -151,7 +95,7 @@ docker compose up -d
## 六、一些说明
* 本项目ssl证书提供商为letencrypt
* 本项目ssl证书提供商为letencrypt/Google/ZeroSSL
* 申请过程遵循acme协议
* 需要验证域名所有权一般有两种方式目前本项目仅支持dns-01
* http-01 在网站根目录下放置一份txt文件
@@ -165,48 +109,26 @@ docker compose up -d
## 七、不同平台的设置说明
* [Cloudflare](./docs/plugins/cf/cf.md)
* [腾讯云](./docs/plugins/tencent/tencent.md)
* [windows主机](./docs/plugins/host/host.md)
* [google证书](./docs/plugins/google/google.md)
* [群晖部署certd及证书更新教程](./docs/plugins/synology/index.md)
* [CNAME证书校验方式说明](./docs/feature/cname/index.md)
* 已迁移到新的文档网站,请到常见问题章节查看
* [最新文档站链接 https://certd.docmirror.cn](https://certd.docmirror.cn/)
## 八、问题处理
### 7.1 忘记管理员密码
解决方法如下:
1. 修改docker-compose.yaml文件将环境变量`certd_system_resetAdminPasswd`改为`true`
```yaml
services:
certd:
environment: # 环境变量
- certd_system_resetAdminPasswd=false
```
2. 重启容器
```shell
docker compose up -d
docker logs -f --tail 500 certd
# 观察日志当日志中输出“重置1号管理员用户的密码完成”即可操作下一步
```
3. 修改docker-compose.yaml`certd_system_resetAdminPasswd`改回`false`
4. 再次重启容器
```shell
docker compose up -d
```
5. 使用`admin/123456`登录系统,请及时修改管理员密码
[重置管理员密码方法](https://certd.docmirror.cn/guide/use/forgotpasswd/)
## 九、联系作者
如有疑问欢迎加入群聊请备注certd
* QQ群141236433
* 微信群:
![](https://ai.handsfree.work/images/exchange_wxqroup.png)
| 加群 | 微信群 | QQ群 |
|---------|-------|-------|
| 二维码 | <img height="230" src="./docs/guide/contact/images/wx.png"> | <img height="230" src="./docs/guide/contact/images/qq.png"> |
也可以加作者好友
| 加作者好友 | 微信 QQ |
|---------|-------------------------------------------------------------|
| 二维码 | <img height="230" src="./docs/guide/contact/images/me.png"> |
加作者好友
<p align="center">
<img height="230" src="./doc/images/me.png">
</p>
## 十、捐赠
************************
@@ -222,18 +144,18 @@ https://afdian.com/a/greper
专业版特权对比
| 功能 | 免费版 | 专业版 |
|---------|------------------------|-----------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 |
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署等 | 支持群晖、宝塔、1Panel等持续开发中 |
| 发邮件功能 | 需要配置 | 免配置 |
| 证书流水线条数 | 10条 | 无限制 |
| 功能 | 免费版 | 专业版 |
|---------|-------------------|-----------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 |
| 自动部署插件 | 阿里云、腾讯云、七牛、主机部署等 | 支持群晖、宝塔、1Panel等持续开发中 |
| 发邮件功能 | 需要配置 | 免配置 |
| 证书流水线条数 | 10条 | 无限制 |
************************
## 十一、贡献代码
1. 本地开发 [贡献插件教程](./doc/dev/development.md)
1. 本地开发 [贡献插件教程](https://certd.docmirror.cn/guide/development/)
2. 作为贡献者,代表您同意您贡献的代码如下许可:
1. 可以调整开源协议以使其更严格或更宽松。
2. 可以用于商业用途。
@@ -247,9 +169,12 @@ https://afdian.com/a/greper
* 如需商业授权,请联系作者。
## 十三、我的其他项目求Star
* [袖手GPT](https://ai.handsfree.work/) ChatGPT国内可用无需FQ每日免费额度
* [fast-crud](https://gitee.com/fast-crud/fast-crud/) 基于vue3的crud快速开发框架
* [dev-sidecar](https://github.com/docmirror/dev-sidecar/) 直连访问github工具无需FQ解决github无法访问的问题
| 项目名称 | stars | 项目描述 |
|---------------------------------------------------------|-------------------------------------------------------------------------------------------------------|-----------------------------------|
| [袖手AI](https://ai.handsfree.work/) | | 袖手GPT国内可用无需FQ每日免费额度 |
| [fast-crud](https://gitee.com/fast-crud/fast-crud/) | <img alt="GitHub stars" src="https://img.shields.io/github/stars/fast-crud/fast-crud?logo=github"/> | 基于vue3的crud快速开发框架 |
| [dev-sidecar](https://github.com/docmirror/dev-sidecar/) | <img alt="GitHub stars" src="https://img.shields.io/github/stars/docmirror/dev-sidecar?logo=github"/> | 直连访问github工具无需FQ解决github无法访问的问题 |

View File

@@ -1 +1 @@
10:38
00:01

View File

@@ -1,32 +0,0 @@
# 宝塔部署教程
## 编排模版部署
### 创建docker模版
打开docker-compose.yaml
https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml
整个内容复制下来
然后到宝塔里面进到docker的编排模版新建模版
![](./images/1.png)
### 启动应用
![img.png](./images/2.png)
等待启动完成
### 打开应用
http://ip:7001
## 二、一键应用部署
需要宝塔9.2.0版本
### 应用商店
进入应用商店,更新应用列表
### 搜索certd
点击安装

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

View File

@@ -1,96 +0,0 @@
# 本地开发
欢迎贡献插件
## 1.本地调试运行
### 克隆代码
```shell
# 克隆代码
git clone https://github.com/certd/certd
#进入项目目录
cd certd
# 切换到最新版本代码
git checkout v1.26.7 # 这里换成最新版本号
```
### 修改pnpm-workspace.yaml文件
重要否则无法正确加载专业版的access和plugin
```yaml
# pnpm-workspace.yaml
packages:
- 'packages/**' # <--------------注释掉这一行PR时不要提交此修改
- 'packages/ui/**'
```
### 安装依赖和初始化:
```shell
# 安装pnpm如果提示npm命令不存在就需要先安装nodejs
npm install -g pnpm@8.15.7 --registry=https://registry.npmmirror.com
# 使用国内镜像源,如果有代理,就不需要
pnpm config set registry https://registry.npmmirror.com
# 安装依赖
pnpm install
# 初始化构建
npm run init
```
### 启动 server:
```shell
cd packages/ui/certd-server
npm run dev
```
### 启动 client:
```shell
cd packages/ui/certd-client
npm run dev
# 会自动打开浏览器,确认正常运行
```
## 开发插件
进入 `packages/ui/certd-server/src/plugins`
### 1.复制`plugin-demo`目录作为你的插件目录
比如你想做`cloudflare`的插件,那么你可以复制`plugin-demo`目录,将其命名成`plugin-cloudflare`
以下均以`plugin-cloudflare`为例进行说明,你需要将其替换成你的插件名称
### 2. access授权
如果这是一个新的平台它应该有授权方式比如accessKey accessSecret之类的
参考`plugin-cloudflare/access.ts` 修改为你要做的平台的`access`
这样用户就可以在`certd`后台中创建这种授权凭证了
### 3. dns-provider
如果域名是这个平台进行解析的那么你需要实现dns-provider申请证书需要
参考`plugin-cloudflare/dns-provider.ts` 修改为你要做的平台的`dns-provider`
### 4. plugin-deploy
如果这个平台有需要部署证书的地方
参考`plugin-cloudflare/plugins/plugin-deploy-to-xx.ts` 修改为你要做的平台的`plugin-deploy-to-xx`
### 5. 增加导入
`plugin-cloudflare/index.ts`中增加你的插件的`import`
```ts
export * from './dns-provider'
export * from './access'
export * from './plugins/plugin-deploy-to-xx'
````
`./src/plugins/index.ts``import`
```ts
export * from "./plugin-cloudflare.js"
```
## 重启服务进行调试
刷新浏览器,检查你的插件是否工作正常, 确保能够正常进行证书申请和部署
## 提交PR
我们将尽快审核PR

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 KiB

View File

@@ -11,6 +11,8 @@ services:
ports: # 端口映射
# ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突可以修改第一个7001为其他不冲突的端口号
- "7001:7001"
# ↓↓↓↓ ---------------------------------------------------------- https端口可以根据实际情况是否暴露相关服务端口
- "7002:7002"
dns:
# ↓↓↓↓ ---------------------------------------------------------- 如果出现getaddrinfo ENOTFOUND等错误可以尝试修改或注释dns配置
- 223.5.5.5

View File

@@ -23,12 +23,11 @@ export default defineConfig({
// ],
["meta", {
name: "keywords",
content: "证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具、Certd、SSL证书自动部署、证书自动化https证书pfx证书der证书TLS证书nginx证书自动续签自动部署"
}],
["meta", {
name: "google-site-verification",
content: "V5XLTSnXoT15uQotwpxJoQolUo2d5UbSL-TacsyOsC0"
content: "证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具、Certd、SSL证书自动部署、证书自动化https证书pfx证书der证书TLS证书nginx证书自动续签自动部署,SSL平台证书管理平台"
}],
["meta", { name: "google-site-verification",content: "V5XLTSnXoT15uQotwpxJoQolUo2d5UbSL-TacsyOsC0"}],
//<meta name="baidu-site-verification" content="codeva-MiWN8Y07Ua" />
["meta", {name: "baidu-site-verification",content: "codeva-MiWN8Y07Ua"}],
["link", { rel: "icon", href: "/static/logo/logo.svg" }]
],
themeConfig: {
@@ -95,8 +94,10 @@ export default defineConfig({
{ 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: "如何贡献代码", link: "/guide/development/index.md" },
]
},

View File

@@ -2,19 +2,14 @@
## 1. 交流群
如有疑问欢迎加入群聊请备注certd
### QQ群141236433
<p align="center">
<img height="230" src="./images/qq.png">
</p>
### 微信群:
<p align="center">
<img height="230" src="./images/wx.png">
</p>
如有疑问欢迎加入群聊请备注certd
| 加群 | 微信群 | QQ群 |
|---------|-------|-------|
| 二维码 | <img height="230" src="./images/wx.png"> | <img height="230" src="./images/qq.png"> |
## 2. 加作者好友
<p align="center">
<img height="230" src="./images/me.png">
</p>
| 加作者好友 | 微信 QQ |
|---------|-------------------------------------------------------------|
| 二维码 | <img height="230" src="./images/me.png"> |

View File

@@ -23,8 +23,11 @@ https://1panel.cn/docs/installation/online_installation/
3. 访问测试
http://ip:7001
http://ip:7001
https://ip:7002
默认账号密码
admin/123456
登录后请及时修改密码
## 三、升级
@@ -42,3 +45,7 @@ http://ip:7001
> 默认数据保存在`/data/certd`目录下,可以手动备份
> 建议配置一条 [数据库备份流水线](../../use/backup/),自动备份
## 五、备份恢复
将备份的`db.sqlite`覆盖到原来的位置即可

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -31,19 +31,26 @@
## 二、访问应用
http://ip:7001
http://ip:7001
https://ip:7002
默认账号密码
admin/123456
登录后请及时修改密码
## 三、如何升级
### 1. 通用方式
### 1. 应用商店安装,直接更新镜像即可
先主机上拉取最新镜像,然后面板上重启容器
![img.png](./images/upgrade.png)
### 2. latest更新方式
在主机上拉取最新镜像,然后面板上重启容器
```shell
docker pull registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
```
### 2. 固定版本号方式
### 3. 固定版本号方式
修改容器编排模版中的镜像版本号,然后面板上重启容器
```shell
@@ -71,3 +78,7 @@ services:
### 4.3 自动备份
> 建议配置一条 [数据库备份流水线](../../use/backup/),自动备份
## 五、备份恢复
将备份的`db.sqlite`覆盖到原来的位置即可

View File

@@ -45,9 +45,10 @@ docker compose up -d
### 3. 访问测试
http://your_server_ip:7001
默认账号密码admin/123456
记得修改密码
http://your_server_ip:7001
https://your_server_ip:7002
默认账号密码admin/123456
记得修改密码
## 二、升级
@@ -64,6 +65,10 @@ docker pull registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
docker compose down
docker compose up -d
```
## 三、数据备份
> 数据默认存在`/data/certd`目录下,不用担心数据丢失
> 建议配置一条[数据库备份流水线](../../use/backup/) 自动备份
## 四、备份恢复
将备份的`db.sqlite`覆盖到原来的位置即可

View File

@@ -17,7 +17,8 @@ cd certd
### 访问测试
http://your_server_ip:7001
http://your_server_ip:7001
https://your_server_ip:7002
默认账号密码admin/123456
记得修改密码
@@ -33,8 +34,12 @@ kill -9 $(lsof -t -i:7001)
# 重新编译启动
./start.sh
```
## 三、数据备份
> 数据默认保存在 `./packages/ui/certd-server/data` 目录下
> 建议配置一条[数据库备份流水线](../../use/backup/) 自动备份
## 四、备份恢复
将备份的`db.sqlite`覆盖到原来的位置即可

View File

@@ -25,7 +25,8 @@ https://certd.handsfree.work/
### 2. 访问测试
http://your_server_ip:7001
http://your_server_ip:7001
https://your_server_ip:7002
默认账号密码admin/123456
记得修改密码

View File

@@ -1,5 +1,17 @@
# 数据库自动备份
## 一、手动备份
数据库文件根据不同的部署方式保存的位置不一样,您可以手动复制出来进行备份
* docker 默认保存在`/data/certd/db.sqlite`
* 源码: 默认保存在 `./packages/ui/certd-server/data/db.sqlite`
* 宝塔: [手动数据备份位置](https://certd.docmirror.cn/guide/install/baota/#%E5%9B%9B%E3%80%81%E6%95%B0%E6%8D%AE%E5%A4%87%E4%BB%BD)
* 1panel: 默认保存在`/data/certd/db.sqlite`
## 二、自动备份
通过配置数据库自动备份流水线实现数据备份
## 1. 创建自动备份流水线
![](./images/1.png)
@@ -7,7 +19,12 @@
![](./images/2.png)
## 3. 选择备份方法
![img.png](./images/3.png)
![](./images/3.png)
## 4. 配置定时和失败通知
![img.png](./images/4.png)
![](./images/4.png)
## 三、备份恢复
将备份的`db.sqlite`覆盖到原来的位置即可

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,38 @@
# Certd本身的https证书配置
## 一、启用https
`Certd`默认启用https监听7002端口
如果你想关闭https或者修改端口可以在环境变量中配置
```shell
CERTD_HTTPS_ENABLE=true
CERTD_HTTPS_port=7002
```
## 二、自动更新Certd的https证书
### 1、创建证书流水线
参考Certd顶部的创建证书流水线教程
### 2、配置复制到本机任务
将证书复制到certd的证书安装位置
![](./images/1.png)
![](./images/2.png)
### 3、配置重启Certd任务
重启certd的https server让证书生效
![img.png](./images/3.png)
### 4、配置定时任务
每天定时执行,最终效果如下
![](./images/ok.png)
:::warning
建议将本流水线的触发时间与其他流水线时间错开,避免重启时影响其他流水线的执行
:::

2
docs/public/robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-agent: *
Allow: /

View File

@@ -9,5 +9,5 @@
}
},
"npmClient": "pnpm",
"version": "1.26.12"
"version": "1.26.13"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/publishlab/node-acme-client/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/acme-client
## [1.26.12](https://github.com/publishlab/node-acme-client/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/acme-client

View File

@@ -3,7 +3,7 @@
"description": "Simple and unopinionated ACME client",
"private": false,
"author": "nmorsman",
"version": "1.26.12",
"version": "1.26.13",
"main": "src/index.js",
"types": "types/index.d.ts",
"license": "MIT",
@@ -60,5 +60,5 @@
"bugs": {
"url": "https://github.com/publishlab/node-acme-client/issues"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/basic
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
### Performance Improvements

View File

@@ -1 +1 @@
23:57
20:27

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/basic",
"private": false,
"version": "1.26.12",
"version": "1.26.13",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -64,5 +64,5 @@
"vite": "^4.3.8",
"vue-tsc": "^1.6.5"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -86,7 +86,7 @@ export function createAxiosService({ logger }: { logger: Logger }) {
service.interceptors.request.use(
(config: any) => {
logger.info(`http request:${config.url}method:${config.method}`);
if (config.logParams !== false) {
if (config.logParams !== false && config.params) {
logger.info(`params:${JSON.stringify(config.params)}`);
}
if (config.timeout == null) {
@@ -182,7 +182,7 @@ export function createAxiosService({ logger }: { logger: Logger }) {
export const http = createAxiosService({ logger }) as HttpClient;
export type HttpClientResponse<R> = any;
export type HttpRequestConfig<D=any> = {
export type HttpRequestConfig<D = any> = {
skipSslVerify?: boolean;
skipCheckRes?: boolean;
logParams?: boolean;

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/pipeline
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/pipeline

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/pipeline",
"private": false,
"version": "1.26.12",
"version": "1.26.13",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -15,8 +15,8 @@
"test": "mocha --loader=ts-node/esm"
},
"dependencies": {
"@certd/basic": "^1.26.12",
"@certd/plus-core": "^1.26.12",
"@certd/basic": "^1.26.13",
"@certd/plus-core": "^1.26.13",
"axios": "^1.7.2",
"dayjs": "^1.11.7",
"fix-path": "^4.0.0",
@@ -66,5 +66,5 @@
"vite": "^4.3.8",
"vue-tsc": "^1.6.5"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/lib-huawei
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/lib-huawei

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-huawei",
"private": false,
"version": "1.26.12",
"version": "1.26.13",
"main": "./dist/bundle.js",
"module": "./dist/bundle.js",
"types": "./dist/d/index.d.ts",
@@ -17,5 +17,5 @@
"rimraf": "^5.0.5",
"rollup": "^3.7.4"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/lib-iframe
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/lib-iframe

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-iframe",
"private": false,
"version": "1.26.12",
"version": "1.26.13",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -39,5 +39,5 @@
"tslib": "^2.5.2",
"typescript": "^5.4.2"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/lib-jdcloud
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/lib-jdcloud

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-jdcloud",
"private": false,
"version": "1.26.12",
"version": "1.26.13",
"main": "./dist/bundle.mjs",
"module": "./dist/bundle.mjs",
"types": "./dist/d/index.d.ts",
@@ -27,5 +27,5 @@
"rimraf": "^5.0.5",
"rollup": "^3.7.4"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/lib-k8s
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/lib-k8s

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-k8s",
"private": false,
"version": "1.26.12",
"version": "1.26.13",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -18,7 +18,7 @@
"@kubernetes/client-node": "0.21.0"
},
"devDependencies": {
"@certd/pipeline": "^1.26.12",
"@certd/pipeline": "^1.26.13",
"@rollup/plugin-commonjs": "^23.0.4",
"@rollup/plugin-json": "^6.0.0",
"@rollup/plugin-node-resolve": "^15.0.1",
@@ -40,5 +40,5 @@
"tslib": "^2.5.2",
"typescript": "^5.4.2"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/lib-server
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/lib-server

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/lib-server",
"version": "1.26.12",
"version": "1.26.13",
"description": "midway with flyway, sql upgrade way ",
"private": false,
"type": "module",
@@ -26,9 +26,9 @@
],
"license": "AGPL",
"dependencies": {
"@certd/acme-client": "^1.26.12",
"@certd/basic": "^1.26.12",
"@certd/pipeline": "^1.26.12",
"@certd/acme-client": "^1.26.13",
"@certd/basic": "^1.26.13",
"@certd/pipeline": "^1.26.13",
"@midwayjs/cache": "~3.14.0",
"@midwayjs/core": "~3.17.1",
"@midwayjs/i18n": "~3.17.3",
@@ -69,5 +69,5 @@
"typeorm": "^0.3.11",
"typescript": "^5.4.2"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
**Note:** Version bump only for package @certd/midway-flyway-js

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/midway-flyway-js",
"version": "1.26.12",
"version": "1.26.13",
"description": "midway with flyway, sql upgrade way ",
"private": false,
"type": "module",
@@ -56,5 +56,5 @@
"typeorm": "^0.3.11",
"typescript": "^5.4.2"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
### Bug Fixes
* deprecated的运行时不要报错只报警告 ([bcbefaa](https://github.com/certd/certd/commit/bcbefaaa35cf6d0eec085b3a2c5bfc7c6a8de9e1))
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
### Performance Improvements

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/plugin-cert",
"private": false,
"version": "1.26.12",
"version": "1.26.13",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -15,9 +15,9 @@
"preview": "vite preview"
},
"dependencies": {
"@certd/acme-client": "^1.26.12",
"@certd/basic": "^1.26.12",
"@certd/pipeline": "^1.26.12",
"@certd/acme-client": "^1.26.13",
"@certd/basic": "^1.26.13",
"@certd/pipeline": "^1.26.13",
"@google-cloud/publicca": "^1.3.0",
"dayjs": "^1.11.7",
"jszip": "^3.10.1",
@@ -57,5 +57,5 @@
"vite": "^3.1.0",
"vue-tsc": "^0.38.9"
},
"gitHead": "3a78cb9929fd63bb72f0e00f4389e775c926c789"
"gitHead": "11d0daa59ae409c229037189066414f29b787de0"
}

View File

@@ -31,7 +31,7 @@ export async function createDnsProvider(opts: { dnsProviderType: string; context
const DnsProviderClass = dnsProviderPlugin.target;
const dnsProviderDefine = dnsProviderPlugin.define as DnsProviderDefine;
if (dnsProviderDefine.deprecated) {
throw new Error(dnsProviderDefine.deprecated);
context.logger.warn(dnsProviderDefine.deprecated);
}
// @ts-ignore
const dnsProvider: IDnsProvider = new DnsProviderClass();

View File

@@ -3,6 +3,16 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
### Bug Fixes
* 修复对话框全屏按钮与关闭按钮重叠的bug ([95df56c](https://github.com/certd/certd/commit/95df56cc5ca5e3eb843cd17cb7078cde47729f1e))
### Performance Improvements
* 支持同时监听https端口7002 ([d5a17f9](https://github.com/certd/certd/commit/d5a17f9e6afd63fda2df0981118480f25a1fac2e))
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
### Performance Improvements

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/ui-client",
"version": "1.26.12",
"version": "1.26.13",
"private": true,
"scripts": {
"dev": "vite --open",
@@ -63,8 +63,8 @@
"vuedraggable": "^4.1.0"
},
"devDependencies": {
"@certd/lib-iframe": "^1.26.12",
"@certd/pipeline": "^1.26.12",
"@certd/lib-iframe": "^1.26.13",
"@certd/pipeline": "^1.26.13",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3",
"@types/chai": "^4.3.12",

View File

@@ -124,7 +124,7 @@ function createRequestFunction(service: any) {
headers: {
"Content-Type": get(config, "headers.Content-Type", "application/json")
},
timeout: 10000,
timeout: 20000,
baseURL: env.API,
data: {}
};

View File

@@ -27,5 +27,5 @@
}
.fs-form-wrapper .fs-form-header {
padding-right: 30px;
padding-right: 30px !important;
}

View File

@@ -16,6 +16,7 @@ process.env.VITE_APP_VERSION = require("./package.json").version;
process.env.VITE_APP_BUILD_TIME = require("dayjs")().format("YYYY-M-D HH:mm:ss");
import { theme } from "ant-design-vue";
import * as https from "node:https";
const { defaultAlgorithm, defaultSeed } = theme;
@@ -103,7 +104,9 @@ export default ({ command, mode }) => {
// with options
"/api": {
//配套后端 https://github.com/fast-crud/fs-server-js
target: "http://127.0.0.1:7001"
target: "https://127.0.0.1:7002",
//忽略证书
agent: new https.Agent({ rejectUnauthorized: false })
}
}
}

View File

@@ -3,6 +3,13 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)
### Performance Improvements
* 更新certd本身的证书文档说明 ([0c50ede](https://github.com/certd/certd/commit/0c50ede129337b82df54575cbd2f4c2a783a0732))
* 支持同时监听https端口7002 ([d5a17f9](https://github.com/certd/certd/commit/d5a17f9e6afd63fda2df0981118480f25a1fac2e))
## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)
### Performance Improvements

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/ui-server",
"version": "1.26.12",
"version": "1.26.13",
"description": "fast-server base midway",
"private": true,
"type": "module",
@@ -27,17 +27,17 @@
},
"dependencies": {
"@alicloud/pop-core": "^1.7.10",
"@certd/acme-client": "^1.26.12",
"@certd/commercial-core": "^1.26.12",
"@certd/lib-huawei": "^1.26.12",
"@certd/lib-jdcloud": "^1.26.12",
"@certd/lib-k8s": "^1.26.12",
"@certd/lib-server": "^1.26.12",
"@certd/midway-flyway-js": "^1.26.12",
"@certd/pipeline": "^1.26.12",
"@certd/plugin-cert": "^1.26.12",
"@certd/plugin-plus": "^1.26.12",
"@certd/plus-core": "^1.26.12",
"@certd/acme-client": "^1.26.13",
"@certd/commercial-core": "^1.26.13",
"@certd/lib-huawei": "^1.26.13",
"@certd/lib-jdcloud": "^1.26.13",
"@certd/lib-k8s": "^1.26.13",
"@certd/lib-server": "^1.26.13",
"@certd/midway-flyway-js": "^1.26.13",
"@certd/pipeline": "^1.26.13",
"@certd/plugin-cert": "^1.26.13",
"@certd/plugin-plus": "^1.26.13",
"@certd/plus-core": "^1.26.13",
"@koa/cors": "^5.0.0",
"@midwayjs/bootstrap": "~3.17.1",
"@midwayjs/cache": "~3.14.0",
@@ -74,6 +74,7 @@
"md5": "^2.3.0",
"mwtsc": "^1.4.0",
"nanoid": "^5.0.7",
"node-forge": "^1.3.1",
"nodemailer": "^6.9.3",
"pg": "^8.12.0",
"psl": "^1.9.0",

View File

@@ -24,6 +24,12 @@ const development = {
koa: {
port: 7001,
},
https: {
enabled: true,
port: 7002,
key: './data/ssl/cert.key',
cert: './data/ssl/cert.crt',
},
staticFile: {
usePrecompiledGzip: true,
buffer: true,

View File

@@ -1,5 +1,6 @@
import { App, Configuration } from '@midwayjs/core';
import * as koa from '@midwayjs/koa';
import { IMidwayKoaContext, NextFunction } from '@midwayjs/koa';
import * as orm from '@midwayjs/typeorm';
import * as cache from '@midwayjs/cache';
import * as validate from '@midwayjs/validate';
@@ -18,7 +19,7 @@ import * as libServer from '@certd/lib-server';
import * as commercial from '@certd/commercial-core';
import * as upload from '@midwayjs/upload';
import { setLogger } from '@certd/acme-client';
import { IMidwayKoaContext, NextFunction } from '@midwayjs/koa';
process.on('uncaughtException', error => {
console.error('未捕获的异常:', error);
// 在这里可以添加日志记录、发送错误通知等操作

View File

@@ -1,8 +1,10 @@
import { Autoload, Init, Inject, Scope, ScopeEnum } from '@midwayjs/core';
import { App, Autoload, Config, Init, Inject, Scope, ScopeEnum } from '@midwayjs/core';
import { getPlusInfo, isPlus, logger } from '@certd/pipeline';
import { SysInstallInfo, SysSettingsService } from '@certd/lib-server';
import { getVersion } from '../../utils/version.js';
import dayjs from 'dayjs';
import { Application } from '@midwayjs/koa';
import { httpsServer, HttpsServerOptions } from './https/server.js';
@Autoload()
@Scope(ScopeEnum.Singleton)
@@ -10,8 +12,17 @@ export class AutoZPrint {
@Inject()
sysSettingsService: SysSettingsService;
@App()
app: Application;
@Config('https')
httpsConfig: HttpsServerOptions;
@Init()
async init() {
//监听https
this.startHttpsServer();
const installInfo: SysInstallInfo = await this.sysSettingsService.getSetting(SysInstallInfo);
logger.info('=========================================');
logger.info('当前站点ID:', installInfo.siteId);
@@ -24,4 +35,15 @@ export class AutoZPrint {
logger.info('Certd已启动');
logger.info('=========================================');
}
async startHttpsServer() {
if (!this.httpsConfig.enabled) {
logger.info('Https server is not enabled');
return;
}
httpsServer.start({
...this.httpsConfig,
app: this.app,
});
}
}

View File

@@ -0,0 +1,44 @@
import { logger } from '@certd/pipeline';
import fs from 'fs';
// @ts-ignore
import forge from 'node-forge';
export function createSelfCertificate(opts: { crtPath: string; keyPath: string }) {
// 生成密钥对
const keypair = forge.pki.rsa.generateKeyPair(2048);
// 创建自签名证书
const cert = forge.pki.createCertificate();
cert.publicKey = keypair.publicKey;
cert.serialNumber = '01';
cert.validFrom = new Date(Date.now() - 1000 * 60 * 60 * 24).toISOString(); // 1天前
cert.validTo = new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 10).toISOString(); // 10年后
// 创建主题
const attrs = [
{
name: 'commonName',
value: 'self-certificate.certd', // 或者你的域名
},
];
cert.setSubject(attrs);
cert.setIssuer(attrs);
cert.sign(keypair.privateKey, forge.md.sha256.create());
// 导出证书和私钥
const pemCert = forge.pki.certificateToPem(cert);
const pemKey = forge.pki.privateKeyToPem(keypair.privateKey);
// 写入文件
logger.info('生成自签名证书成功');
logger.info(`自签证书保存路径: ${opts.crtPath}`);
logger.info(`自签私钥保存路径: ${opts.keyPath}`);
fs.writeFileSync(opts.crtPath, pemCert);
fs.writeFileSync(opts.keyPath, pemKey);
return {
crtPath: opts.crtPath,
keyPath: opts.keyPath,
crt: pemCert,
key: pemKey,
};
}

View File

@@ -0,0 +1,78 @@
import https from 'node:https';
import fs from 'fs';
import { Application } from '@midwayjs/koa';
import { createSelfCertificate } from './self-certificate.js';
import { logger } from '@certd/pipeline';
export type HttpsServerOptions = {
enabled: boolean;
app?: Application;
port: number;
key: string;
cert: string;
};
export class HttpsServer {
server: https.Server;
opts: HttpsServerOptions;
constructor() {}
async restart() {
await this.close();
return this.start(this.opts);
}
async close() {
return new Promise((resolve, reject) => {
this.server.close(() => {
resolve(true);
});
});
}
start(opts: HttpsServerOptions) {
if (!opts) {
logger.error('https配置不能为空');
return;
}
this.opts = opts;
logger.info('=========================================');
if (!opts.key || !opts.cert) {
logger.error('证书路径未配置无法启动https服务请先配置koa.https.key和koa.https.cert');
return;
}
if (!fs.existsSync(opts.key) || !fs.existsSync(opts.cert)) {
logger.info('证书文件不存在,将生成自签名证书');
createSelfCertificate({
crtPath: opts.cert,
keyPath: opts.key,
});
}
logger.info('准备启动https服务');
const httpServer = https.createServer(
{
cert: fs.readFileSync(opts.cert),
key: fs.readFileSync(opts.key),
},
opts.app.callback()
);
this.server = httpServer;
const hostname = '0.0.0.0';
// A function that runs in the context of the http server
// and reports what type of server listens on which port
function listeningReporter() {
// `this` refers to the http server here
logger.info(`Https server is listening on https://${hostname}:${opts.port}`);
}
try {
httpServer.listen(opts.port, hostname, listeningReporter);
return httpServer;
} catch (e) {
logger.error('启动https服务失败', e);
}
}
}
export const httpsServer = new HttpsServer();

View File

@@ -1,10 +1,11 @@
import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy } from '@certd/pipeline';
import { httpsServer } from '../../../modules/auto/https/server.js';
@IsTaskPlugin({
name: 'RestartCertd',
title: '重启Certd',
title: '重启 Certd',
icon: 'mdi:restart',
desc: '【仅管理员】延迟一定时间后自动杀死自己然后通过Docker来自动重启',
desc: '【仅管理员可用】 重启 certd的https服务用于更新 Certd 的 ssl 证书',
group: pluginGroups.other.key,
default: {
strategy: {
@@ -13,26 +14,14 @@ import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput
},
})
export class RestartCertdPlugin extends AbstractTaskPlugin {
@TaskInput({
title: '延迟时间',
value: 30,
component: {
placeholder: '30',
},
helper: '延迟多少秒后执行',
required: true,
})
delay = 30;
async onInstance() {}
async execute(): Promise<void> {
if (!this.isAdmin()) {
throw new Error('只有管理员才能运行此任务');
}
this.logger.info(`Certd 将在 ${this.delay} 秒后关闭`);
setTimeout(() => {
this.logger.info('重启 Certd');
process.exit(1);
}, this.delay * 1000);
this.logger.info('Certd https server 将在 3 秒后重启');
await this.ctx.utils.sleep(3000);
await httpsServer.restart();
}
}
new RestartCertdPlugin();

View File

@@ -0,0 +1,89 @@
import { IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { AbstractPlusTaskPlugin } from '@certd/plugin-plus';
@IsTaskPlugin({
name: 'DeployCertToTencentAll',
title: '部署证书到腾讯云任意云资源',
needPlus: true,
icon: 'svg:icon-tencentcloud',
group: pluginGroups.tencent.key,
desc: '需要【上传到腾讯云】作为前置任务',
default: {
strategy: {
runStrategy: RunStrategy.SkipWhenSucceed,
},
},
})
export class DeployCertToTencentAll extends AbstractPlusTaskPlugin {
/**
* AccessProvider的key,或者一个包含access的具体的对象
*/
@TaskInput({
title: 'Access授权',
helper: 'access授权',
component: {
name: 'access-selector',
type: 'tencent',
},
required: true,
})
accessId!: string;
@TaskInput({
title: '腾讯云证书id',
helper: '请选择“上传证书到腾讯云”前置任务的输出',
component: {
name: 'output-selector',
from: 'UploadCertToTencent',
},
required: true,
})
tencentCertId!: string;
@TaskInput({
title: '云资源实例Id列表',
component: {
name: 'a-select',
vModel: 'value',
open: false,
mode: 'tags',
},
helper: '',
})
instanceIdList!: string[];
async onInstance() {}
async execute(): Promise<void> {
const accessProvider = await this.accessService.getById(this.accessId);
const sdk = await import('tencentcloud-sdk-nodejs/tencentcloud/services/ssl/v20191205/index.js');
const Client = sdk.v20191205.Client;
const client = new Client({
credential: {
secretId: accessProvider.secretId,
secretKey: accessProvider.secretKey,
},
region: '',
profile: {
httpProfile: {
endpoint: 'ssl.tencentcloudapi.com',
},
},
});
const params = {
CertificateId: this.tencentCertId,
InstanceIdList: this.instanceIdList,
};
const res = await client.DeployCertificateInstance(params);
this.checkRet(res);
this.logger.info('部署成功');
}
checkRet(ret: any) {
if (!ret || ret.Error) {
throw new Error('执行失败:' + ret.Error.Code + ',' + ret.Error.Message);
}
}
}

View File

@@ -14,7 +14,7 @@ import dayjs from 'dayjs';
},
},
})
export class DeployToClbPlugin extends AbstractTaskPlugin {
export class DeployCertToTencentCLB extends AbstractTaskPlugin {
@TaskInput({
title: '大区',
component: {

View File

@@ -162,4 +162,4 @@ export class DeployCertToTencentCosPlugin extends AbstractPlusTaskPlugin {
}
}
// new DeployCertToTencentCosPlugin()
new DeployCertToTencentCosPlugin();

View File

@@ -13,7 +13,7 @@ import { TencentAccess } from '@certd/plugin-plus';
},
},
})
export class DeployToEOPlugin extends AbstractTaskPlugin {
export class DeployCertToTencentEO extends AbstractTaskPlugin {
@TaskInput({
title: '已上传证书ID',
helper: '请选择前置任务上传到腾讯云的证书',
@@ -131,3 +131,5 @@ export class DeployToEOPlugin extends AbstractTaskPlugin {
}
}
}
new DeployCertToTencentEO();

View File

@@ -1,4 +1,7 @@
export * from './deploy-to-all/index.js';
export * from './deploy-to-clb/index.js';
export * from './deploy-to-cdn/index.js';
export * from './upload-to-tencent/index.js';
export * from './deploy-to-cdn-v2/index.js';
export * from './upload-to-tencent/index.js';
export * from './deploy-to-cos/index.js';
export * from './deploy-to-eo/index.js';

View File

@@ -13,7 +13,7 @@ import dayjs from 'dayjs';
},
},
})
export class UploadToTencentPlugin extends AbstractTaskPlugin {
export class UploadCertToTencent extends AbstractTaskPlugin {
@TaskInput({ title: '证书名称' })
name!: string;

View File

@@ -106,9 +106,5 @@ cron格式例如 `0 0 3 * * *` 表示每天凌晨3点执行
以上,演示了从创建证书申请任务到自动部署证书全流程。
如有疑问,欢迎加入群聊请备注certd
* QQ群141236433
* 微信群:
![](https://ai.handsfree.work/images/exchange_wxqroup.png)
如有任何疑问,[欢迎联系我们](https://certd.docmirror.cn/guide/contact/)