域名与公开端口
域名将一个主机名关联到你的某个服务上。Pier 会将其转化为一个 Traefik 路由器,并向 Let’s Encrypt 申请证书——这直接构建在代理与 SSL中所描述的边缘代理之上,因此你永远无需手动改动 Traefik 配置。
域名生命周期
Section titled “域名生命周期”添加域名是一个三步流程:添加 → 指向 DNS → 激活。
- 添加。 在某个服务下,打开 Domains → Add 并输入主机名(例如
app.example.com)。Pier 会将该域名存储为草稿——is_active = 0。此时不会写入任何 Traefik 路由器,也不会申请任何证书,因此配置一个域名永远不会过早占用 Let’s Encrypt 的速率限制额度。 - 指向 DNS。 为该主机名创建一条
A(或AAAA)记录,指向你服务器的公网 IP。Let’s Encrypt 通过 80 端口上的 HTTP 进行验证,因此该记录必须在激活成功之前能够解析。 - 激活。 打开激活开关。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 配置。
以公开端口作为替代方案
Section titled “以公开端口作为替代方案”域名为你提供位于某个主机名上的 HTTPS。而当你需要的是一个原始的 host:port——比如数据库管理工具、游戏服务器、TCP 服务——请暴露一个公开端口,而非域名。
在服务的端口设置下切换它(PUT /api/v1/resources/{id}/port-public)。Pier 会将所选端口作为一个直接的 Docker 绑定(0.0.0.0:port)发布在该服务容器本身上——它不会经过 Traefik 路由。默认情况下,公开端口与 Pier 分配的内部端口一致;你也可以显式覆盖它。
公开端口完全绕过 Traefik,因此没有自动 TLS。当你需要 HTTPS 终止时请使用域名;对于非 HTTP 协议或直接访问,请使用公开端口。关于端口如何分配,参见端口与分配。