启用 HTTPS

启用后服务器为每个绑定域名的站点自动申请、续期并热加载证书(ACME HTTP-01,默认 Let's Encrypt)。

前置条件

  • 站点域名已解析(A/AAAA 记录)到服务器公网 IP
  • 服务器 HTTPS 监听端口与 80 端口可被公网访问,且未被其他进程占用(80 是 HTTP-01 验证的固定回源端口)
  • 托管服务器已部署(站内搜索 ?部署托管服务器)

操作步骤

  1. 修改配置文件 service.tls 节:

    tls:
      enabled: true
      email: ops@example.com
    

    email 是 ACME 账户邮箱,用于到期提醒。tls.httpPort(缺省 80)是质询应答与 301 跳转的监听端口:公网直连部署保持缺省即可;反向代理或端口映射部署时,把外部 80 映射到该端口。

  2. 重启服务:docdoc service --config /etc/docdoc/config.yaml stop 后再 start(或直接 systemctl restart docdoc)。

  3. 注册携带域名的站点:

    docdoc add --remote docdoc://docs.example.com ./my-docs --name my-docs --domain docs.example.com
    

    注册时服务器自动为该域名发起签发;完成后 https://docs.example.com/ 可访问,80 端口的普通流量 301 跳转到 HTTPS。

  4. 首个证书签发前,HTTPS 端口无法完成握手。HTTP 端口(80)同时服务管理 API,首次注册直接走默认 80 端口:

    docdoc add --remote docdoc://<服务器IP> ./my-docs --name my-docs --domain docs.example.com
    

    证书签发完成后,后续注册与更新即可走 HTTPS 域名地址。管理 API 在 80 端口为明文 HTTP、仅由 Bearer Token 保护,可改用 managementPort 指定仅对内网开放的管理端口。

运行期事实

  • 证书落盘 dataDir/certs/<域名>/
  • 每日检查有效期,到期前 30 天自动续期,更新后热加载不重启进程
  • 重复注册(del 后 add)时,已有未临期证书则跳过重复签发,不消耗 ACME 配额
  • 联调时把 directoryUrl 切到 Let's Encrypt staging 地址,避免触发正式环境速率限制