Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev

This commit is contained in:
xiaojunnuo
2026-01-08 09:27:27 +08:00
29 changed files with 1498 additions and 2380 deletions
+61 -61
View File
@@ -2,74 +2,74 @@
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **阿里云授权** | |
| 2.| **阿里云ESA授权** | |
| 3.| **腾讯云** | |
| 4.| **主机登录授权** | |
| 5.| **华为云授权** | |
| 6.| **火山引擎** | |
| 7.| **京东云** | |
| 1.| **主机登录授权** | |
| 2.| **阿里云授权** | |
| 3.| **阿里云ESA授权** | |
| 4.| **华为云授权** | |
| 5.| **腾讯云** | |
| 6.| **京东云** | |
| 7.| **火山引擎** | |
| 8.| **七牛云授权** | |
| 9.| **baota授权** | |
| 10.| **百度云授权** | |
| 9.| **百度云授权** | |
| 10.| **baota授权** | |
| 11.| **天翼云授权** | |
| 12.| **阿里云OSS授权** | 包含地域和Bucket |
| 13.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 |
| 14.| **SFTP授权** | |
| 15.| **授权插件示例** | |
| 16.| **西部数码授权** | |
| 17.| **多吉云** | |
| 18.| **七牛OSS授权** | |
| 19.| **我爱云授权** | 我爱云CDN |
| 20.| **CacheFly** | CacheFly |
| 21.| **Gcore** | Gcore |
| 22.| **亚马逊云aws授权** | |
| 23.| **亚马逊云科技(国区)授权** | |
| 12.| **51dns授权** | |
| 13.| **SFTP授权** | |
| 14.| **阿里云OSS授权** | 包含地域和Bucket |
| 15.| **APISIX授权** | |
| 16.| **亚马逊云aws授权** | |
| 17.| **亚马逊云科技(国区)授权** | |
| 18.| **CacheFly** | CacheFly |
| 19.| **EAB授权** | ZeroSSL证书申请需要EAB授权 |
| 20.| **google cloud** | 谷歌云授权 |
| 21.| **cloudflare授权** | |
| 22.| **中国移动CND授权** | |
| 23.| **授权插件示例** | |
| 24.| **dns.la授权** | |
| 25.| **又拍** | |
| 26.| **51dns授权** | |
| 27.| **FlexCDN授权** | |
| 28.| **farcdn授权** | |
| 29.| **cloudflare授权** | |
| 25.| **多吉** | |
| 26.| **Dokploy授权** | |
| 27.| **farcdn授权** | |
| 28.| **FlexCDN授权** | |
| 29.| **Gcore** | Gcore |
| 30.| **Github授权** | |
| 31.| **namesilo授权** | |
| 32.| **proxmox** | |
| 33.| **网宿授权** | |
| 34.| **金山云授权** | |
| 35.| **APISIX授权** | |
| 36.| **Dokploy授权** | |
| 37.| **godaddy授权** | |
| 38.| **新网授权** | |
| 39.| **新网授权(代理方式)** | |
| 40.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 |
| 41.| **中国移动CND授权** | |
| 42.| **UCloud授权** | 优刻得授权 |
| 43.| **FTP授权** | |
| 44.| **s3/minio授权** | S3/minio oss授权 |
| 45.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 |
| 46.| **易盾DCDN授权** | https://user.yiduncdn.com |
| 47.| **易盾rcdn授权** | 易盾CDN,每月免费30G[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
| 48.| **易发云短信** | sms.yfyidc.cn/ |
| 49.| **cdnfly授权** | |
| 31.| **godaddy授权** | |
| 32.| **金山云授权** | |
| 33.| **FTP授权** | |
| 34.| **七牛OSS授权** | |
| 35.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 |
| 36.| **s3/minio授权** | S3/minio oss授权 |
| 37.| **namesilo授权** | |
| 38.| **1panel授权** | 账号和密码 |
| 39.| **支付宝** | |
| 40.| **白山云授权** | |
| 41.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 |
| 42.| **cdnfly授权** | |
| 43.| **k8s授权** | |
| 44.| **括彩云cdn授权** | 括彩云CDN,每月免费30G[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
| 45.| **LeCDN授权** | |
| 46.| **lucky** | |
| 47.| **猫云授权** | |
| 48.| **plesk授权** | |
| 49.| **长亭雷池授权** | |
| 50.| **群晖登录授权** | |
| 51.| **k8s授权** | |
| 52.| **1panel授权** | 账号和密码 |
| 53.| **LeCDN授权** | |
| 54.| **白山云授权** | |
| 55.| **plesk授权** | |
| 51.| **uniCloud** | unicloud授权 |
| 52.| **微信支付** | |
| 53.| **易盾rcdn授权** | 易盾CDN,每月免费30G[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
| 54.| **易发云短信** | sms.yfyidc.cn/ |
| 55.| **易盾DCDN授权** | https://user.yiduncdn.com |
| 56.| **易支付** | |
| 57.| **支付宝** | |
| 58.| **微信支付** | |
| 59.| **长亭雷池授权** | |
| 60.| **lucky** | |
| 61.| **括彩云cdn授权** | 括彩云CDN,每月免费30G[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
| 62.| **uniCloud** | unicloud授权 |
| 63.| **猫云授权** | |
| 64.| **EAB授权** | ZeroSSL证书申请需要EAB授权 |
| 65.| **google cloud** | 谷歌云授权 |
| 57.| **proxmox** | |
| 58.| **UCloud授权** | 优刻得授权 |
| 59.| **又拍云** | |
| 60.| **网宿授权** | |
| 61.| **西部数码授权** | |
| 62.| **我爱云授权** | 我爱云CDN |
| 63.| **新网授权(代理方式)** | |
| 64.| **新网授权** | |
| 65.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 |
| 66.| **Zenlayer授权** | Zenlayer授权 |
| 67.| **雨云授权** | https://app.rainyun.com/ |
| 68.| **GoEdge授权** | |
| 67.| **GoEdge授权** | |
| 68.| **雨云授权** | https://app.rainyun.com/ |
<style module>
table th:first-of-type {
+95 -90
View File
@@ -1,129 +1,134 @@
# 任务插件
`111` 款任务插件
`116` 款任务插件
## 1. 证书申请
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **证书申请(JS版)** | 免费通配符域名证书申请,支持多个域名打到同一个证书上 |
| 2.| **证书申请(Lego** | 支持海量DNS解析提供商,推荐使用,一样的免费通配符域名证书申请,支持多个域名打到同一个证书上 |
| 3.| **商用证书托管** | 手动上传自定义证书后,自动部署(每次证书有更新,都需要手动上传一次) |
| 4.| **获取阿里云订阅证书** | 从阿里云拉取订阅模式的商用证书 |
| 1.| **商用证书托管** | 手动上传自定义证书后,自动部署(每次证书有更新,都需要手动上传一次) |
| 2.| **获取阿里云订阅证书** | 从阿里云拉取订阅模式的商用证书 |
| 3.| **证书申请(JS版)** | 免费通配符域名证书申请,支持多个域名打到同一个证书上 |
| 4.| **证书申请(Lego** | 支持海量DNS解析提供商,推荐使用,一样的免费通配符域名证书申请,支持多个域名打到同一个证书上 |
## 2. 主机
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **主机-执行远程主机脚本命令** | 可以执行重启nginx等操作让证书生效 |
| 2.| **主机-部署证书到SSH主机** | SFTP上传证书到主机,然后SSH执行部署脚本命令 |
| 3.| **主机-复制到本机** | 【仅管理员使用】实际上是复制证书到docker容器内的某个路径,需要做目录映射到宿主机 |
| 1.| **主机-复制到本机** | 【仅管理员使用】实际上是复制证书到docker容器内的某个路径,需要做目录映射到宿主机 |
| 2.| **主机-执行远程主机脚本命令** | 可以执行重启nginx等操作让证书生效 |
| 3.| **IIS-部署到IIS站点** | |
| 4.| **上传证书到对象存储OSS** | 支持阿里云OSS、腾讯云COS、七牛云KODO、S3、MinIO、FTP、SFTP |
| 5.| **IIS-部署到IIS站点** | |
| 6.| **FTP-上传证书到FTP** | 将证书上传到FTP服务器 |
| 5.| **主机-部署证书到SSH主机** | 上传证书到主机覆盖原来的证书文件,然后自动执行部署脚本命令使证书生效 |
| 6.| **Exsi-部署证书到Exsi** | |
| 7.| **FTP-上传证书到FTP** | 将证书上传到FTP服务器 |
| 8.| **Openwrt-部署证书到Openwrt** | |
## 3. CDN
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **西数-部署到虚拟主机** | 西部数码部署证书到虚拟主机 |
| 2.| **多吉云-部署到多吉云CDN** | |
| 3.| **我爱云-部署证书到我爱云CDN** | 部署证书到我爱云CDN |
| 4.| **CacheFly-部署证书到CacheFly** | 部署证书到 CacheFly |
| 5.| **Gcore-部署证书到Gcore** | 仅上传 并不会部署到cdn |
| 6.| **Gcore-刷新Gcore证书** | 刷新现有的证书 |
| 7.| **又拍云-部署证书到CDN/USS** | 支持又拍云CDN,又拍云云存储USS |
| 8.| **FlexCDN-更新证书** | |
| 9.| **farcdn-更新证书** | www.farcdn.net |
| 10.| **云-更新证书** | app.rainyun.com |
| 11.| **网宿-更新证书** | 网宿证书自动更新 |
| 12.| **金山云-更新CDN证书** | 金山云自动更新CDN证书 |
| 13.| **APISIX-更新证书** | 自动更新APISIX证书 |
| 14.| **中国移动-部署证书到CDN** | 中国移动自动部署证书到CDN |
| 15.| **GoEdge-更新证书** | GoEdge |
| 16.| **易盾-部署到易盾DCDN** | 主要是防御,http://user.yiduncdn.com/ |
| 17.| **易盾-部署到易盾RCDN** | 易盾CDN,每月免费30G[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
| 18.| **cdnfly-部署证书到cdnfly** | cdnfly |
| 19.| **LeCDN-更新证书** | |
| 20.| **LeCDN-更新证书V2** | 支持新版本LeCDN |
| 21.| **白山云-更新证书** | |
| 22.| **天翼云-部署证书到CDN** | 部署证书到天翼云CDN和全站加速 |
| 23.| **括彩云-部署到括彩云CDN** | 括彩云CDN,每月免费30G[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
| 24.| **Zenlayer-刷新证书** | 刷新Zenlayer 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.| **威联通-部署证书到威联通** | 部署证书到qnap |
| 1.| **Dokploy-部署server证书** | 自动更新Dokploy server证书 |
| 2.| **飞牛NAS-部署证书** | |
| 3.| **Proxmox-上传证书到Proxmox** | |
| 4.| **Dokploy-部署server证书** | 自动更新Dokploy server证书 |
| 5.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 |
| 6.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书,目前支持宝塔网站站点、docker站点等。本插件也支持aaPanel。 |
| 7.| **宝塔-WAF证书部署** | 部署宝塔云WAF/aaWAF |
| 3.| **1Panel-部署面板证书** | 更新1Panel的面板证书 |
| 4.| **1Panel-更新证书** | 更新1Panel的证书,包括面板证书和站点证书 |
| 5.| **宝塔-删除过期证书** | 删除证书夹中过期证书 |
| 6.| **宝塔-WAF证书部署** | 部署宝塔云WAF/aaWAF |
| 7.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 |
| 8.| **宝塔win-网站证书部署** | 部署到Windows版宝塔管理的站点的ssl证书 |
| 9.| **宝塔-删除过期证书** | 删除证书夹中过期证书 |
| 10.| **群晖-部署证书到群晖面板** | Synology,支持6.x以上版本 |
| 11.| **K8S-部署证书到Secret** | 部署证书到k8s的secret |
| 12.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress |
| 13.| **K8S-Apply自定义yaml** | apply自定义yaml到k8s |
| 14.| **1Panel-部署证书到1Panel** | 更新1Panel的证书 |
| 15.| **1Panel-部署面板证书** | 更新1Panel的面板证书 |
| 16.| **Plesk-部署Plesk网站证书** | |
| 17.| **雷池-更新证书** | 更新长亭雷池WAF的证书 |
| 18.| **lucky-更新Lucky证书** | |
| 19.| **uniCloud-部署到服务空间** | 部署到服务空间 |
| 9.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书,目前支持宝塔网站站点、docker站点等。本插件也支持aaPanel。 |
| 10.| **K8S-Apply自定义yaml** | apply自定义yaml到k8s |
| 11.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress |
| 12.| **K8S-部署证书到Secret** | 部署证书到k8s的secret |
| 13.| **lucky-更新Lucky证书** | |
| 14.| **Plesk-部署Plesk网站证书** | |
| 15.| **Plesk-更新证书** | 不会创建新证书记录,直接更新旧的证书 |
| 16.| **雷池-更新证书** | 更新长亭雷池WAF的证书 |
| 17.| **群晖-部署证书到群晖面板** | Synology,支持6.x以上版本 |
| 18.| **uniCloud-部署到服务空间** | 部署到服务空间 |
| 19.| **Proxmox-上传证书到Proxmox** | |
| 20.| **威联通-部署证书到威联通** | 部署证书到qnap |
## 5. 阿里云
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **阿里云-部署证书至CDN** | 自动部署域名证书至阿里云CDN |
| 2.| **阿里云-部署证书至DCDN** | 依赖证书申请前置任务,自动部署域名证书至阿里云DCDN |
| 3.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss |
| 4.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 |
| 5.| **阿里云-部署至阿里云WAF** | 部署证书阿里云WAF |
| 6.| **阿里云-部署至ALB(应用负载均衡)** | ALB,更新监听器的默认证书 |
| 7.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 |
| 8.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) |
| 1.| **阿里云-部署到Ack** | 部署到阿里云Ack集群Ingress等通过Secret管理证书的应用 |
| 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.| **阿里云-部署至ESA** | 部署证书到阿里云ESA(边缘安全加速),自动删除过期证书 |
| 11.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod |
| 12.| **阿里云-部署证书至API网关** | 自动部署域名证书阿里云API网关(APIGateway |
| 13.| **阿里云-部署至云原生API网关/AI网关** | 自动部署域名证书至云原生API网关、AI网关 |
| 14.| **阿里云-部署到Ack** | 部署到阿里云Ack集群Ingress等通过Secret管理证书的应用 |
| 10.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 |
| 11.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss |
| 12.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书阿里云CLB(传统负载均衡) |
| 13.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod) |
| 14.| **阿里云-部署至阿里云WAF** | 部署证书到阿里云WAF |
| 15.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 |
## 6. 华为云
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **华为云-部署证书至CDN** | |
| 2.| **华为云-上传证书至CCM** | 上传证书到华为云云证书管理(CCM |
| 3.| **华为云-部署证书至OBS** | |
| 2.| **华为云-部署证书至OBS** | |
| 3.| **华为云-上传证书至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.| **腾讯云-删除即将过期证书** | 仅删除未使用的证书 |
| 8.| **腾讯云-部署到腾讯云直播** | https://console.cloud.tencent.com/live/ |
| 9.| **腾讯云-部署到TKE** | 修改TKE集群密钥配置,支持Opaque和TLS证书类型。注意:
1. serverless集群请使用K8S部署插件;
2. Opaque类型需要【上传到腾讯云】作为前置任务;
3. ApiServer需要开通公网访问(或者certd可访问),实际上底层仍然是通过KubeClient进行部署 |
| 10.| **腾讯云-部署到腾讯云直播** | https://console.cloud.tencent.com/live/ |
| 10.| **腾讯云-更新证书(Id不变)** | 根据证书id一键更新腾讯云证书并自动部署(Id不变),注意该接口为腾讯云白名单功能,非白名单用户无法使用该功能 |
| 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. 京东云
| 序号 | 名称 | 说明 |
@@ -136,22 +141,22 @@
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **UCloud-部署到CDN** | 将证书部署到UCloud CDN |
| 2.| **UCloud-上传到USSL** | 将证书上传到UCloud USSL |
| 3.| **UCloud-部署到WAF** | 将证书部署到UCloud WAF |
| 2.| **UCloud-部署到WAF** | 将证书部署到UCloud WAF |
| 3.| **UCloud-上传到USSL** | 将证书上传到UCloud USSL |
## 11. 百度云
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **百度云-部署证书到CDN** | 部署到百度云CDN |
| 2.| **百度云-部署证书到负载均衡** | 部署到百度云负载均衡,包括BLB、APPBLB |
| 1.| **百度云-部署证书到负载均衡** | 部署到百度云负载均衡,包括BLB、APPBLB |
| 2.| **百度云-部署证书到CDN** | 部署到百度云CDN |
| 3.| **百度云-上传到证书托管** | 上传证书到百度云证书托管中心 |
## 12. 七牛云
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **七牛云-部署证书至CDN/DCDN** | 自动部署域名证书至七牛云CDN、DCDN |
| 2.| **七牛云-上传证书到七牛云** | 上传到七牛云 |
| 3.| **七牛云-部署证书至OSS** | 自动部署域名证书至七牛云KODO,注意是自定义源站域名,不是CDN域名 |
| 2.| **七牛云-部署证书至OSS** | 自动部署域名证书至七牛云KODO,注意是自定义源站域名,不是CDN域名 |
| 3.| **七牛云-上传证书到七牛云** | 上传到七牛云 |
## 13. 亚马逊云
| 序号 | 名称 | 说明 |
@@ -164,17 +169,17 @@
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **Demo-测试插件** | |
| 2.| **等待** | 等待一段时间 |
| 2.| **Github-检查Release版本** | 检查最新Release版本并推送消息 |
| 3.| **邮件发送证书** | 通过邮件发送证书 |
| 4.| **webhook方式部署证书** | 调用webhook部署证书 |
| 5.| **Github-检查Release版本** | 检查最新Release版本并推送消息 |
| 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 {
+12 -12
View File
@@ -2,22 +2,22 @@
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **阿里** | 阿里DNS解析提供商 |
| 2.| **阿里ESA** | 阿里ESA DNS解析 |
| 1.| **阿里ESA** | 阿里ESA DNS解析 |
| 2.| **阿里** | 阿里DNS解析提供商 |
| 3.| **AWS Route53** | AWS Route53 DNS解析提供商 |
| 4.| **火山引擎** | 火山引擎DNS解析提供商 |
| 5.| **京东云** | 京东云DNS解析提供商 |
| 6.| **新网** | 新网域名解析 |
| 7.| **新网(代理方式)** | 新网域名解析(代理方式) |
| 8.| **腾讯云** | 腾讯云域名DNS解析提供者 |
| 9.| **腾讯云EO DNS** | 腾讯云EO DNS解析提供者 |
| 10.| **华为云** | 华为云DNS解析提供商 |
| 11.| **西部数码** | west dns provider |
| 12.| **dns.la** | dns.la |
| 6.| **新网(代理方式)** | 新网域名解析(代理方式) |
| 7.| **新网** | 新网域名解析 |
| 8.| **cloudflare** | cloudflare dns provider |
| 9.| **dns.la** | dns.la |
| 10.| **godaddy** | GoDaddy |
| 11.| **华为云** | 华为云DNS解析提供商 |
| 12.| **namesilo** | namesilo dns provider |
| 13.| **雨云** | 雨云DNS解析提供商 |
| 14.| **cloudflare** | cloudflare dns provider |
| 15.| **namesilo** | namesilo dns provider |
| 16.| **godaddy** | GoDaddy |
| 14.| **腾讯云** | 腾讯云域名DNS解析提供者 |
| 15.| **腾讯云EO DNS** | 腾讯云EO DNS解析提供者 |
| 16.| **西部数码** | west dns provider |
| 17.| **Dns提供商Demo** | dns provider示例 |
| 18.| **51dns** | 51DNS |
| 19.| **新网互联** | 新网互联 |
+14 -14
View File
@@ -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 {
+1
View File
@@ -45,6 +45,7 @@
"dependencies": {
"copyfiles": "^2.4.1",
"lodash-es": "^4.17.21",
"root": "link:",
"typescript": "^5.4.2"
},
"workspaces": [
+9 -9
View File
@@ -17,31 +17,31 @@
"compile": "tsc --skipLibCheck --watch"
},
"dependencies": {
"@alicloud/openapi-client": "^0.4.14",
"@alicloud/openapi-client": "^0.4.15",
"@alicloud/openapi-util": "^0.3.2",
"@alicloud/pop-core": "^1.7.10",
"@alicloud/tea-util": "^1.4.10",
"psl": "^1.15.0",
"@aws-sdk/client-s3": "^3.787.0",
"@alicloud/tea-util": "^1.4.11",
"@aws-sdk/client-s3": "^3.964.0",
"@certd/acme-client": "^1.37.17",
"@certd/basic": "^1.37.17",
"@certd/pipeline": "^1.37.17",
"@certd/plus-core": "^1.37.17",
"@kubernetes/client-node": "0.21.0",
"ali-oss": "^6.22.0",
"basic-ftp": "^5.0.5",
"cos-nodejs-sdk-v5": "^2.14.6",
"cos-nodejs-sdk-v5": "^2.15.4",
"dayjs": "^1.11.7",
"iconv-lite": "^0.6.3",
"lodash-es": "^4.17.21",
"psl": "^1.15.0",
"punycode.js": "^2.3.1",
"qiniu": "^7.12.0",
"rimraf": "^5.0.5",
"socks": "^2.8.3",
"socks-proxy-agent": "^8.0.4",
"ssh2": "1.17.0",
"strip-ansi": "^7.1.0",
"tencentcloud-sdk-nodejs": "^4.0.1005",
"@certd/acme-client": "^1.37.17",
"@certd/plus-core": "^1.37.17",
"punycode.js": "^2.3.1"
"tencentcloud-sdk-nodejs": "^4.1.166"
},
"devDependencies": {
"@types/chai": "^4.3.3",
+2 -2
View File
@@ -29,8 +29,8 @@
"dependencies": {
"@ant-design/colors": "^7.0.2",
"@ant-design/icons-vue": "^7.0.1",
"@aws-sdk/client-s3": "^3.535.0",
"@aws-sdk/s3-request-presigner": "^3.535.0",
"@aws-sdk/client-s3": "^3.964.0",
"@aws-sdk/s3-request-presigner": "^3.964.0",
"@certd/vue-js-cron-light": "^4.0.14",
"@ctrl/tinycolor": "^4.1.0",
"@fast-crud/editor-code": "^1.27.8",
@@ -811,9 +811,9 @@ export default {
templateProviderSelectorPlaceholder: "未配置",
},
notice: "系统通知",
noticeHelper: "系统通知,将在顶部显示",
noticePlaceholder: "系统通知",
notice: "系统公告",
noticeHelper: "系统公告,将在首页显示",
noticePlaceholder: "系统公告",
},
},
modal: {
@@ -71,7 +71,7 @@
</div>
</template>
</a-alert>
<a-alert type="warning" show-icon>
<a-alert v-if="settingStore.sysPublic.notice" type="warning" show-icon>
<template #message>
{{ settingStore.sysPublic.notice }}
</template>
+2
View File
@@ -17,3 +17,5 @@ function slimming(filePath, find, rep) {
});
}
slimming(filePath, find, rep);
slimming("./tsconfig.json",`"sourceMap": true,`, `"sourceMap": false,`)
@@ -1,107 +0,0 @@
import "./dist/plugins/index.js";
import { accessRegistry, notificationRegistry, pluginGroups, pluginRegistry } from "@certd/pipeline";
import { dnsProviderRegistry } from "@certd/plugin-cert";
import fs from "fs";
function genPluginMd() {
const plugins = {
access: [],
deploy: [],
dnsProvider: [],
notification: []
};
plugins.access = accessRegistry.getDefineList();
plugins.deploy = pluginRegistry.getDefineList();
plugins.dnsProvider = dnsProviderRegistry.getDefineList();
plugins.notification = notificationRegistry.getDefineList();
// function genMd(list) {
// let mdContent = `<table style='width:100%'>
// <thead style='width:100%'>
// <tr >
// <th width='70'>序号</th><th width='265'>名称</th><th>说明</th>
// </tr>
// </thead>
// <tbody>
// `;
// let i = 0;
// for (const x of list) {
// i++
// mdContent += `<tr> <td>${i}.</td> <td style='font-weight: bold'>${x.title}</td> <td>${x.desc||''}</td> </tr>`;
// }
// mdContent += `</tbody></table>`;
// return mdContent;
// }
// function genMd(list) {
// let mdContent = ``;
// let i = 0;
// for (const x of list) {
// i++
// mdContent += `${i}. **${x.title}** \n${x.desc||''} \n\n\n`;
// }
// return mdContent;
// }
function genMd(list) {
let mdContent = `
| 序号 | 名称 | 说明 |
|-----|-----|-----|
`;
let i = 0;
for (const x of list) {
i++
mdContent += `| ${i}.| **${x.title}** | ${x.desc||''} | \n`;
}
return mdContent;
}
function addTableStyle(){
return `
<style module>
table th:first-of-type {
width: 65px;
}
table th:nth-of-type(2) {
width: 240px;
}
</style>
`
}
let mdContent = "";
mdContent = "# 授权列表\n";
mdContent += genMd(plugins.access);
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/access.md", mdContent);
mdContent = "# DNS提供商\n";
mdContent += genMd(plugins.dnsProvider);
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/dns-provider.md", mdContent);
mdContent = "# 通知插件\n";
mdContent += genMd(plugins.notification);
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/notification.md", mdContent);
mdContent = "# 任务插件\n";
mdContent += `\`${plugins.deploy.length}\` 款任务插件 \n`
let index =0
for (const key in pluginGroups) {
index++
const group = pluginGroups[key];
mdContent += `## ${index}. ${group.title}\n`;
mdContent += genMd(group.plugins);
}
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/deploy.md", mdContent);
process.exit()
}
genPluginMd()
+112 -2
View File
@@ -6,6 +6,8 @@ import { pathToFileURL } from "node:url";
import * as yaml from "js-yaml";
import { AbstractTaskPlugin, BaseAccess, BaseNotification} from "@certd/pipeline";
import { BaseAddon} from "@certd/lib-server";
import { dnsProviderRegistry } from "@certd/plugin-cert";
import { pluginRegistry ,accessRegistry,notificationRegistry,pluginGroups} from "@certd/pipeline";
function scanDir(dir) {
const files = fs.readdirSync(dir);
@@ -117,9 +119,117 @@ async function genMetadata(){
}
}
}
process.exit()
}
async function genPluginMd() {
const plugins = {
access: [],
deploy: [],
dnsProvider: [],
notification: []
};
plugins.access = accessRegistry.getDefineList();
plugins.deploy = pluginRegistry.getDefineList();
plugins.dnsProvider = dnsProviderRegistry.getDefineList();
plugins.notification = notificationRegistry.getDefineList();
// function genMd(list) {
// let mdContent = `<table style='width:100%'>
// <thead style='width:100%'>
// <tr >
// <th width='70'>序号</th><th width='265'>名称</th><th>说明</th>
// </tr>
// </thead>
// <tbody>
// `;
// let i = 0;
// for (const x of list) {
// i++
// mdContent += `<tr> <td>${i}.</td> <td style='font-weight: bold'>${x.title}</td> <td>${x.desc||''}</td> </tr>`;
// }
// mdContent += `</tbody></table>`;
// return mdContent;
// }
// function genMd(list) {
// let mdContent = ``;
// let i = 0;
// for (const x of list) {
// i++
// mdContent += `${i}. **${x.title}** \n${x.desc||''} \n\n\n`;
// }
// return mdContent;
// }
function genMd(list) {
let mdContent = `
| 序号 | 名称 | 说明 |
|-----|-----|-----|
`;
let i = 0;
for (const x of list) {
i++
mdContent += `| ${i}.| **${x.title}** | ${x.desc||''} | \n`;
}
return mdContent;
}
function addTableStyle(){
return `
<style module>
table th:first-of-type {
width: 65px;
}
table th:nth-of-type(2) {
width: 240px;
}
</style>
`
}
let mdContent = "";
mdContent = "# 授权列表\n";
mdContent += genMd(plugins.access);
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/access.md", mdContent);
mdContent = "# DNS提供商\n";
mdContent += genMd(plugins.dnsProvider);
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/dns-provider.md", mdContent);
mdContent = "# 通知插件\n";
mdContent += genMd(plugins.notification);
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/notification.md", mdContent);
mdContent = "# 任务插件\n";
mdContent += `\`${plugins.deploy.length}\` 款任务插件 \n`
let index =0
for (const key in pluginGroups) {
index++
const group = pluginGroups[key];
mdContent += `## ${index}. ${group.title}\n`;
mdContent += genMd(group.plugins);
}
mdContent += addTableStyle()
fs.writeFileSync("../../../docs/guide/plugins/deploy.md", mdContent);
}
// import why from 'why-is-node-running'
// setTimeout(() => why(), 100); // 延迟打印原因
genMetadata()
async function main(){
await genMetadata()
await genPluginMd()
process.exit()
}
main()
@@ -3,9 +3,9 @@ default:
strategy:
runStrategy: 1
name: 1PanelDeployToWebsitePlugin
title: 1Panel-部署证书到1Panel
title: 1Panel-更新证书
icon: svg:icon-onepanel
desc: 更新1Panel的证书
desc: 更新1Panel的证书,包括面板证书和站点证书
group: panel
needPlus: false
input:
@@ -0,0 +1,30 @@
showRunStrategy: false
default:
strategy:
runStrategy: 1
name: ExsiDeployCert
title: Exsi-部署证书到Exsi
icon: svg:icon-lucky
group: host
needPlus: true
input:
cert:
title: 域名证书
helper: 请选择前置任务输出的域名证书
component:
name: output-selector
from:
- ':cert:'
required: true
order: 0
accessId:
title: 主机SSH授权
component:
name: access-selector
type: ssh
required: true
order: 0
output: {}
pluginType: deploy
type: builtIn
scriptFilePath: /plugins/plugin-plus/exsi/plugin-deploy-to-exsi.js
@@ -0,0 +1,30 @@
showRunStrategy: false
default:
strategy:
runStrategy: 1
name: OpenwrtDeployCert
title: Openwrt-部署证书到Openwrt
icon: svg:icon-lucky
group: host
needPlus: true
input:
cert:
title: 域名证书
helper: 请选择前置任务输出的域名证书
component:
name: output-selector
from:
- ':cert:'
required: true
order: 0
accessId:
title: 主机SSH授权
component:
name: access-selector
type: ssh
required: true
order: 0
output: {}
pluginType: deploy
type: builtIn
scriptFilePath: /plugins/plugin-plus/openwrt/plugin-deploy-to-openwrt.js
@@ -6,7 +6,7 @@ name: uploadCertToHost
title: 主机-部署证书到SSH主机
icon: line-md:uploading-loop
group: host
desc: SFTP上传证书到主机,然后SSH执行部署脚本命令
desc: 上传证书到主机覆盖原来的证书文件,然后自动执行部署脚本命令使证书生效
order: 1
input:
cert:
@@ -20,12 +20,14 @@ input:
order: 0
certType:
title: 证书格式
helper: 要部署的证书格式,支持pem、pfx、der、jks
helper: |-
要部署的证书格式,支持pem/crt、pfx、der、jks、p7b
你原来的证书是哪种格式就选择哪种
component:
name: a-select
options:
- value: pem
label: pemcrtNginx等大部分应用
label: pem/crt用于Nginx等大部分应用,证书和私钥2个文件
- value: pfx
label: pfx,一般用于IIS
- value: der
+6 -7
View File
@@ -23,9 +23,8 @@
"lint": "mwts check",
"lint:fix": "mwts fix",
"ci": "npm run cov",
"build": "cross-env NODE_ENV=production mwtsc --cleanOutDir --skipLibCheck && npm run export-metadata && npm run export-md",
"build": "cross-env NODE_ENV=production mwtsc --cleanOutDir --skipLibCheck && npm run export-metadata",
"export-metadata": "node export-plugin-yaml.js",
"export-md": "node export-plugin-md.js",
"dev-build": "echo 1",
"build-on-docker": "node ./before-build.js && npm run build",
"up-mw-deps": "npx midway-version -u -w",
@@ -41,11 +40,11 @@
"@alicloud/pop-core": "^1.7.10",
"@alicloud/tea-typescript": "^1.8.0",
"@alicloud/tea-util": "^1.4.10",
"@aws-sdk/client-acm": "^3.699.0",
"@aws-sdk/client-cloudfront": "^3.699.0",
"@aws-sdk/client-iam": "^3.699.0",
"@aws-sdk/client-route-53": "^3.957.0",
"@aws-sdk/client-s3": "^3.705.0",
"@aws-sdk/client-acm": "^3.964.0",
"@aws-sdk/client-cloudfront": "^3.964.0",
"@aws-sdk/client-iam": "^3.964.0",
"@aws-sdk/client-route-53": "^3.964.0",
"@aws-sdk/client-s3": "^3.964.0",
"@certd/acme-client": "^1.37.17",
"@certd/basic": "^1.37.17",
"@certd/commercial-core": "^1.37.17",
@@ -16,7 +16,16 @@ export class AutoBLoadPlugins {
if (process.env.certd_plugin_loadmode === "metadata") {
await this.pluginService.registerFromLocal("./metadata")
}else{
await import("../../plugins/index.js")
// await import("../../plugins/index.js")
const fs = await import("fs");
const list = fs.readdirSync("./dist/plugins");
console.log("list", list);
for (const file of list) {
if (!file.includes(".")){
logger.info(`加载插件文件:${file}`);
await import(`../../plugins/${file}/index.js`);
}
}
}
// await import("../../plugins/index.js")
await this.pluginService.registerFromDb()
+47 -47
View File
@@ -1,47 +1,47 @@
export * from './plugin-aliyun/index.js';
export * from './plugin-tencent/index.js';
export * from './plugin-host/index.js';
export * from './plugin-huawei/index.js';
export * from './plugin-demo/index.js';
export * from './plugin-other/index.js';
export * from './plugin-west/index.js';
export * from './plugin-doge/index.js';
export * from './plugin-qiniu/index.js';
export * from './plugin-woai/index.js';
export * from './plugin-cachefly/index.js';
export * from './plugin-gcore/index.js';
export * from './plugin-qnap/index.js';
export * from './plugin-aws/index.js';
export * from './plugin-aws-cn/index.js';
export * from './plugin-dnsla/index.js';
export * from './plugin-upyun/index.js';
export * from './plugin-volcengine/index.js'
export * from './plugin-jdcloud/index.js'
export * from './plugin-51dns/index.js'
export * from './plugin-notification/index.js'
export * from './plugin-flex/index.js'
export * from './plugin-farcdn/index.js'
export * from './plugin-fnos/index.js'
export * from './plugin-rainyun/index.js'
export * from './plugin-cloudflare/index.js'
export * from './plugin-github/index.js'
export * from './plugin-namesilo/index.js'
export * from './plugin-proxmox/index.js'
export * from './plugin-wangsu/index.js'
export * from './plugin-admin/index.js'
export * from './plugin-ksyun/index.js'
export * from './plugin-apisix/index.js'
export * from './plugin-dokploy/index.js'
export * from './plugin-godaddy/index.js'
export * from './plugin-captcha/index.js'
export * from './plugin-xinnet/index.js'
export * from './plugin-xinnetconnet/index.js'
export * from './plugin-oauth/index.js'
export * from './plugin-cmcc/index.js'
export * from './plugin-template/index.js'
export * from './plugin-ucloud/index.js'
export * from './plugin-goedge/index.js'
export * from './plugin-lib/index.js'
export * from './plugin-plus/index.js'
export * from './plugin-cert/index.js'
export * from './plugin-zenlayer/index.js'
// export * from './plugin-aliyun/index.js';
// export * from './plugin-tencent/index.js';
// export * from './plugin-host/index.js';
// export * from './plugin-huawei/index.js';
// export * from './plugin-demo/index.js';
// export * from './plugin-other/index.js';
// export * from './plugin-west/index.js';
// export * from './plugin-doge/index.js';
// export * from './plugin-qiniu/index.js';
// export * from './plugin-woai/index.js';
// export * from './plugin-cachefly/index.js';
// export * from './plugin-gcore/index.js';
// export * from './plugin-qnap/index.js';
// export * from './plugin-aws/index.js';
// export * from './plugin-aws-cn/index.js';
// export * from './plugin-dnsla/index.js';
// export * from './plugin-upyun/index.js';
// export * from './plugin-volcengine/index.js'
// export * from './plugin-jdcloud/index.js'
// export * from './plugin-51dns/index.js'
// export * from './plugin-notification/index.js'
// export * from './plugin-flex/index.js'
// export * from './plugin-farcdn/index.js'
// export * from './plugin-fnos/index.js'
// export * from './plugin-rainyun/index.js'
// export * from './plugin-cloudflare/index.js'
// export * from './plugin-github/index.js'
// export * from './plugin-namesilo/index.js'
// export * from './plugin-proxmox/index.js'
// export * from './plugin-wangsu/index.js'
// export * from './plugin-admin/index.js'
// export * from './plugin-ksyun/index.js'
// export * from './plugin-apisix/index.js'
// export * from './plugin-dokploy/index.js'
// export * from './plugin-godaddy/index.js'
// export * from './plugin-captcha/index.js'
// export * from './plugin-xinnet/index.js'
// export * from './plugin-xinnetconnet/index.js'
// export * from './plugin-oauth/index.js'
// export * from './plugin-cmcc/index.js'
// export * from './plugin-template/index.js'
// export * from './plugin-ucloud/index.js'
// export * from './plugin-goedge/index.js'
// export * from './plugin-lib/index.js'
// export * from './plugin-plus/index.js'
// export * from './plugin-cert/index.js'
// export * from './plugin-zenlayer/index.js'
@@ -0,0 +1 @@
export * from "./plugin-deploy-to-exsi.js";
@@ -0,0 +1,90 @@
import { IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from "@certd/pipeline";
import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert";
import { AbstractPlusTaskPlugin, CertReader } from "@certd/plugin-lib";
import { SshAccess } from "../../plugin-lib/ssh/ssh-access.js";
import { SshClient } from "../../plugin-lib/ssh/ssh.js";
@IsTaskPlugin({
name: "ExsiDeployCert",
title: "Exsi-部署证书到Exsi",
icon: "svg:icon-lucky",
group: pluginGroups.host.key,
default: {
strategy: {
runStrategy: RunStrategy.SkipWhenSucceed,
},
},
needPlus: true,
})
export class ExsiDeployCertPlugin extends AbstractPlusTaskPlugin {
//证书选择,此项必须要有
@TaskInput({
title: "域名证书",
helper: "请选择前置任务输出的域名证书",
component: {
name: "output-selector",
from: [...CertApplyPluginNames],
},
required: true,
})
cert!: CertInfo;
// @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
// certDomains!: string[];
//授权选择框
@TaskInput({
title: "主机SSH授权",
component: {
name: "access-selector",
type: "ssh",
},
required: true,
})
accessId!: string;
async onInstance() { }
async execute(): Promise<void> {
const sshConf = await this.getAccess<SshAccess>(this.accessId);
const sshClient = new SshClient(this.logger);
// /etc/vmware/ssl/rui.crt
// /etc/vmware/ssl/rui.key
const certReader = new CertReader(this.cert);
await certReader.readCertFile({
logger: this.logger,
handle: async (ctx) => {
const crtPath = ctx.tmpCrtPath;
const keyPath = ctx.tmpKeyPath;
sshClient.uploadFiles({
connectConf: sshConf,
transports: [
{
localPath: crtPath,
remotePath: "/etc/vmware/ssl/rui.crt",
},
{
localPath: keyPath,
remotePath: "/etc/vmware/ssl/rui.key",
},
],
mkdirs: true,
});
},
});
const cmd = `/etc/init.d/hostd restart
/etc/init.d/vpxa restart`
await sshClient.exec({
connectConf: sshConf,
script: cmd,
});
this.logger.info(`证书部署完成`);
}
}
new ExsiDeployCertPlugin();
@@ -19,3 +19,5 @@ export * from "./kuocai/index.js";
export * from "./unicloud/index.js";
export * from "./maoyun/index.js";
export * from "./xinnet/index.js";
export * from "./exsi/index.js";
export * from "./openwrt/index.js";
@@ -0,0 +1 @@
export * from "./plugin-deploy-to-openwrt.js";
@@ -0,0 +1,90 @@
import { IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from "@certd/pipeline";
import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert";
import { AbstractPlusTaskPlugin, CertReader } from "@certd/plugin-lib";
import { SshAccess } from "../../plugin-lib/ssh/ssh-access.js";
import { SshClient } from "../../plugin-lib/ssh/ssh.js";
@IsTaskPlugin({
name: "OpenwrtDeployCert",
title: "Openwrt-部署证书到Openwrt",
icon: "svg:icon-lucky",
group: pluginGroups.host.key,
default: {
strategy: {
runStrategy: RunStrategy.SkipWhenSucceed,
},
},
needPlus: true,
})
export class OpenwrtDeployCertPlugin extends AbstractPlusTaskPlugin {
//证书选择,此项必须要有
@TaskInput({
title: "域名证书",
helper: "请选择前置任务输出的域名证书",
component: {
name: "output-selector",
from: [...CertApplyPluginNames],
},
required: true,
})
cert!: CertInfo;
// @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
// certDomains!: string[];
//授权选择框
@TaskInput({
title: "主机SSH授权",
component: {
name: "access-selector",
type: "ssh",
},
required: true,
})
accessId!: string;
async onInstance() { }
async execute(): Promise<void> {
const sshConf = await this.getAccess<SshAccess>(this.accessId);
const sshClient = new SshClient(this.logger);
// /etc/vmware/ssl/rui.crt
// /etc/vmware/ssl/rui.key
const certReader = new CertReader(this.cert);
await certReader.readCertFile({
logger: this.logger,
handle: async (ctx) => {
const crtPath = ctx.tmpCrtPath;
const keyPath = ctx.tmpKeyPath;
sshClient.uploadFiles({
connectConf: sshConf,
transports: [
{
localPath: crtPath,
remotePath: "/etc/uhttpd.crt",
},
{
localPath: keyPath,
remotePath: "/etc/uhttpd.key",
},
],
mkdirs: true,
});
},
});
this.logger.info(`证书上传完成,准备重启uhttpd生效`);
const cmd = `/etc/init.d/uhttpd restart`
await sshClient.exec({
connectConf: sshConf,
script: cmd,
});
this.logger.info(`证书部署完成`);
}
}
new OpenwrtDeployCertPlugin();
@@ -1,5 +1,5 @@
import { AccessInput, BaseAccess, IsAccess } from "@certd/pipeline";
import { SynologyClient } from "./client.js";
import { SynologyClient } from "@certd/plugin-plus";
/**
* 这个注解将注册一个授权配置
* 在certd的后台管理系统中,用户可以选择添加此类型的授权
@@ -125,9 +125,8 @@ export class SynologyAccess extends BaseAccess {
timeout = 120;
onLoginWithOPTCode(data: { otpCode: string }) {
console.log("onLoginWithOPTCode", this);
const ctx = this.ctx;
const client = new SynologyClient(this, ctx.http, ctx.logger, this.skipSslVerify);
const client = new SynologyClient(this as any, ctx.http, ctx.logger, this.skipSslVerify);
return client.doLoginWithOTPCode(data.otpCode);
}
}
@@ -1,3 +1,2 @@
export * from "./plugins/index.js";
export * from "./access.js";
export * from "./client.js";
@@ -58,7 +58,7 @@ export class SynologyDeployToPanel extends AbstractPlusTaskPlugin {
async onInstance() {}
async execute(): Promise<void> {
const access: SynologyAccess = await this.getAccess<SynologyAccess>(this.accessId);
const client = new SynologyClient(access, this.ctx.http, this.ctx.logger, access.skipSslVerify);
const client = new SynologyClient(access as any, this.ctx.http, this.ctx.logger, access.skipSslVerify);
// await client.init();
await client.doLogin();
// const res = await client.getInfo();
+854 -2009
View File
File diff suppressed because it is too large Load Diff
+15 -5
View File
@@ -56,19 +56,29 @@ echo "构建完成"
echo "下载前端ui"
front_zip="ui-$version.zip"
# 如果zip有了就不下载
if [ -f ./ui-$version.zip ]; then
echo "ui-$version.zip 已经存在,不需要下载"
if [ -f ./$front_zip ]; then
echo "$front_zip 已经存在,不需要下载"
else
echo "ui-$version.zip 不存在,开始下载"
echo "$front_zip 不存在,开始下载"
# 下载之前清理一下
rm -rf ui-*.zip
# https://atomgit.com/certd/certd/releases/download/v1.37.16/ui-1.37.16.zip
# 判断是否下载失败
wget https://atomgit.com/certd/certd/releases/download/v$version/ui-$version.zip
URL="https://atomgit.com/certd/certd/releases/download/v$version/ui-$version.zip"
if command -v wget &> /dev/null; then
wget -O "$front_zip" "$URL"
elif command -v curl &> /dev/null; then
curl -L -o "$front_zip" "$URL"
else
echo "错误:需要 wget 或 curl 来下载前端文件包,请先安装 wget 或 curl"
exit 1
fi
fi
# 覆盖解压缩
unzip -o -q ui-$version.zip -d ./public
unzip -o -q $front_zip -d ./public
echo "启动服务"