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.ymldocker 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.fun1234567890。你可以在启动 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

请参考以下流程获取:

  1. 登录 Cloudflare 控制台,进入控制台域名管理页面。

  2. 点击账号头像,依次点击「我的个人资料」->「API 令牌」->「创建令牌」,选择使用「编辑区域 DNS」模板。

  3. 配置 Zone.DNS.Edit 权限,然后填入域名后,点击“继续”按钮。