
部署Certimate管理自己的证书
Docker 安装
推荐熟悉 Docker 的用户采用这种方式安装 Certimate。
要求
Docker Engine 1.13.1+
Docker Compose 1.27.0+
Docker Compose
你可以复制以下命令到终端中,即可通过 Docker Compose 一键部署 Certimate:
mkdir -p ~/.certimate && \
cd ~/.certimate && \
curl -O https://raw.githubusercontent.com/usual2970/certimate/refs/heads/main/docker/docker-compose.yml && \
docker compose up -d
上述命令会从 GitHub 仓库中下载 docker-compose.yml
,你也可以根据我们提供的 docker-compose.yml
文件内容自行部署:
version: "3.0"
services:
certimate:
image: usual2970/certimate:latest
container_name: certimate_server
ports:
- 8090:8090
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./data:/app/pb_data
restart: unless-stopped
Docker
如果你不想使用 Docker Compose,也可以通过 docker run
命令运行:
# 拉取镜像
docker pull usual2970/certimate:latest
# 启动容器
docker run -d \
--name certimate_server \
--restart unless-stopped \
-p 8090:8090 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v $(pwd)/data:/app/pb_data \
usual2970/certimate:latest
国内镜像
由于众所周知的原因,国内用户可能无法正常访问 Docker Hub 并拉取镜像。
我们也为此提供了在阿里云上的加速镜像,它与 Docker Hub 上的版本完全一致,你只需在镜像名前增加仓库前缀 registry.cn-shanghai.aliyuncs.com
:
# 拉取镜像
docker pull registry.cn-shanghai.aliyuncs.com/usual2970/certimate:latest
# 启动容器
docker run -d \
--name certimate_server \
--restart unless-stopped \
-p 8090:8090 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v $(pwd)/data:/app/pb_data \
registry.cn-shanghai.aliyuncs.com/usual2970/certimate:latest
运行指定版本
上述 docker-compose.yml
或 docker run
命令示例中,出现的均为 lastest
版本,它表示 Certimate 的当前最新发布的稳定版本。
如果你想运行某个指定版本的 Certimate,你可以在拉取镜像时指定:
# 拉取 v0.3.0 镜像
docker pull usual2970/certimate:v0.3.0
WebUI
WebUI
浏览器中访问 http://127.0.0.1:8090
。
初始的管理员账号及密码:
账号:
admin@certimate.fun
密码:
1234567890
配置
你可以通过 WebUI 来完成 Certimate 的绝大部分配置,除了以下几点。
修改监听地址
通过二进制安装的
出于安全考虑,Certimate 默认监听 127.0.0.1:8090
,这意味着你只能通过本地地址访问 Certimate。
你可以在启动时修改这个配置:
./certimate serve --http 0.0.0.0:9999
通过 Docker 安装的
我们提供的 Docker 镜像已在容器内默认监听 0.0.0.0:8090
。因此你只需要修改其端口映射,即可在宿主机上通过其他地址访问 Certimate。
docker run -d \
--name certimate_server \
--restart unless-stopped \
-p 9999:8090 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v $(pwd)/data:/app/pb_data \
usual2970/certimate:latest
警告
因为需要传输授权、证书等敏感数据,请尽量避免在非可信的网络环境下以 HTTP 方式访问 Certimate。
自身启用 HTTPS
你可以在终端中执行以下命令,来为 Certimate 自身签发一张 Let's Encrypt 的 SSL 证书,并开启 HTTPS 监听。
# 请将 `${your-domain.com}` 替换为实际值
./certimate serve ${your-domain.com}
提示
将使用 HTTP-01 质询完成证书申请,请提前配置好域名解析。
重置登录密码
由于某种原因你忘记了 Certimate 的登录密码,你可以在终端中执行以下命令重置:
# 请将 `${your-account}` 和 `${your-new-password}` 替换为实际值
./certimate admin update ${your-account} ${your-new-password}
如果你是通过 Docker 部署,你可以通过 docker exec
命令进入到容器内再执行上述命令。
实验性功能
Certimate 提供了一些仍未稳定的实验性功能。
初始化管理员账号及密码
默认情况下,管理员账号及密码分别为 admin@certimate.fun
和 1234567890
。你可以在启动 Certimate 后通过 WebUI 重新设置它们。
如果你希望在首次启动时就使用指定的账号及密码,你可以通过环境变量来设置它们:
set CERTIMATE_ADMIN_USERNAME=admin@certimate.fun
set CERTIMATE_ADMIN_PASSWORD=1234567890
注意,你必须在首次启动前完成设置。一旦 Certimate 启动,初始的管理员账号及密码就已经生成,你只能通过 WebUI 重新设置它们。
注意,通过环境变量设置的账号及密码也必须符合特定规则,否则可能因为无法通过 WebUI 的前端表单验证而登录失败。
设置工作流最大并发数
你可以通过环境变量来设置:
set CERTIMATE_WORKFLOW_MAX_WORKERS=16
备份与还原
如果需要升级 Certimate 或将安装转移到新服务,可以备份所有数据,以便稍后重新安装。
备份数据
Certimate 使用 SQLite 来存储全部数据,它位于你的安装路径的 pb_data
目录下。你可以将该目录下的全部文件复制到其他路径。
一个典型的 pb_data
目录结构如下:
.
├─ backups/
├─ storage/
├─ auxiliary.db
└─ data.db # VERY IMPORTANT!
警告
如果你正在使用 Docker 部署,请确保容器内的 /app/pb_data
目录已经挂载到宿主机上,否则你将无法在宿主机上备份这些文件。
当然,你还可以选择使用 docker cp
命令来备份容器内的文件。
你可以使用 Litestream 或其他自动化工具来执行定期备份。
还原数据
先停止 Certimate 服务运行,然后将备份过的全部文件复制回 pb_data
目录下并替换同名文件,重启 Certimate 即可。
警告
对于跨版本升级,请勿直接将低版本的数据还原到高版本的程序中,否则可能产生数据错乱、丢失、损坏等问题。
授权管理
在授权管理页面,你可以管理通过 Certimate 调用各个提供商 API 接口的授权凭证。
如何获取提供商的授权凭证?
阿里云
如何获取请参考阿里云官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
AliyunDNSFullAccess
。部署证书:
AliyunYundunCertFullAccess
+ 相应服务或资源的完全访问权限。
腾讯云
如何获取请参考腾讯云官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
QcloudDNSPodFullAccess
。部署证书:
QcloudSSLFullAccess
+ 相应服务或资源的完全访问权限。
百度智能云
如何获取请参考百度智能云官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
DNSOperatePolicy
。部署证书:
CASFullControlPolicy
+ 相应服务或资源的完全访问权限。
华为云
如何获取请参考华为云官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
DNSFullAccess
。部署证书:
SCMFullAccess
+ 相应服务或资源的完全访问权限。
火山引擎
如何获取请参考火山引擎官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
DNSFullAccess
。部署证书:
SSLFullAccess
+ 相应服务或资源的完全访问权限。
京东云
如何获取请参考京东云官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
JDCloudHTTPDNSAdmin
。部署证书:
JDCloudSSLAdmin
+ 相应服务或资源的完全访问权限。
AWS
如何获取请参考 AWS 官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
route53:ListHostedZones
route53:ListHostedZonesByName
route53:GetHostedZone
route53:ListResourceRecordSets
route53:ChangeResourceRecordSets
route53:GetChange
部署证书:
acm:ListCertificates
acm:GetCertificate
acm:ImportCertificate
相应服务或资源的权限。
Azure
如何获取请参考 Azure 官方用户手册。
必要的最小化权限:
申请证书(DNS-01 质询):
Microsoft.Network/dnsZones/read
Microsoft.Network/dnsZones/TXT/*
部署证书:
Microsoft.KeyVault/vaults/certificates/read
Microsoft.KeyVault/vaults/certificates/write
相应服务或资源的权限。
Cloudflare
请参考以下流程获取:
登录 Cloudflare 控制台,进入控制台域名管理页面。
点击账号头像,依次点击「我的个人资料」->「API 令牌」->「创建令牌」,选择使用「编辑区域 DNS」模板。
配置
Zone.DNS.Edit
权限,然后填入域名后,点击“继续”按钮。