跳转到内容

域名与公开端口

域名将一个主机名关联到你的某个服务上。Pier 会将其转化为一个 Traefik 路由器,并向 Let’s Encrypt 申请证书——这直接构建在代理与 SSL中所描述的边缘代理之上,因此你永远无需手动改动 Traefik 配置。

添加域名是一个三步流程:添加 → 指向 DNS → 激活

  1. 添加。 在某个服务下,打开 Domains → Add 并输入主机名(例如 app.example.com)。Pier 会将该域名存储为草稿——is_active = 0。此时不会写入任何 Traefik 路由器,也不会申请任何证书,因此配置一个域名永远不会过早占用 Let’s Encrypt 的速率限制额度。
  2. 指向 DNS。 为该主机名创建一条 A(或 AAAA)记录,指向你服务器的公网 IP。Let’s Encrypt 通过 80 端口上的 HTTP 进行验证,因此该记录必须在激活成功之前能够解析。
  3. 激活。 打开激活开关。Pier 会将该域名标记为激活,写入动态配置文件,Traefik 会在一两秒内识别到它并申请证书。

自动生成的 sslip.io 域名(在服务首次以启用代理的方式部署时创建)会跳过此流程——它们会立即处于激活状态。

每个域名都带有一个 ssl_status,反映其证书状态。一个 SSL 监视器会将其与 Traefik 的 acme.json 进行协调对账:

状态含义
provisioning刚刚激活;等待 Traefik 获取证书。
pending等待证书签发。
active证书已签发,正在通过 HTTPS 提供服务。
expiring证书有效,但将在 7 天内过期。
expired证书已超过有效期。

域名是否处于在线状态由一个独立的 is_active 标志决定:无论 SSL 状态如何,草稿或已停用的域名都不会有 Traefik 路由器。

停用POST /api/v1/domains/{id}/deactivate)会将域名从 Traefik 的实时配置中移除——路由会在数秒内停止。数据库记录仍然保留,已签发的证书也仍保存在 acme.json 中,因此之后重新激活是即时的。

激活POST /api/v1/domains/{id}/activate)是其逆操作,并且是幂等的:对一个已激活的域名调用它,只会重新生成配置。

要彻底清除一个域名,请使用删除DELETE /api/v1/domains/{id})。这会移除该记录,并在不包含它的情况下重新生成该服务的 Traefik 配置。

域名为你提供位于某个主机名上的 HTTPS。而当你需要的是一个原始的 host:port——比如数据库管理工具、游戏服务器、TCP 服务——请暴露一个公开端口,而非域名。

在服务的端口设置下切换它(PUT /api/v1/resources/{id}/port-public)。Pier 会将所选端口作为一个直接的 Docker 绑定(0.0.0.0:port)发布在该服务容器本身上——它不会经过 Traefik 路由。默认情况下,公开端口与 Pier 分配的内部端口一致;你也可以显式覆盖它。

公开端口完全绕过 Traefik,因此没有自动 TLS。当你需要 HTTPS 终止时请使用域名;对于非 HTTP 协议或直接访问,请使用公开端口。关于端口如何分配,参见端口与分配