mirror of
https://github.com/certd/certd.git
synced 2026-04-23 11:37:23 +08:00
Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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.| **新网互联** | 新网互联 |
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
"dependencies": {
|
||||
"copyfiles": "^2.4.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"root": "link:",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"workspaces": [
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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()
|
||||
@@ -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: pem(crt),Nginx等大部分应用
|
||||
label: pem/crt,用于Nginx等大部分应用,证书和私钥2个文件
|
||||
- value: pfx
|
||||
label: pfx,一般用于IIS
|
||||
- value: der
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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";
|
||||
|
||||
+1
-1
@@ -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();
|
||||
|
||||
Generated
+854
-2009
File diff suppressed because it is too large
Load Diff
@@ -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 "启动服务"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user