Dokku 安装前如何配置 DNS A 记录与通配符子域名?
【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokku
在安装 Dokku 之前,需要先完成一件容易漏掉的事:把域名的 DNS A 记录指到你的 Dokku 服务器 IP。Dokku 依靠 DNS 来区分同一台服务器上的不同应用——如果你使用域名example.tld,两个应用node-js-app1和node-js-app2会分别通过node-js-app1.example.tld和node-js-app2.example.tld访问。因此,在跑安装脚本之前,就要先把主机名和通配符子域名都解析到服务器地址。
完成本文操作后,你应能做到:在 Linux 上用host、dig等命令查询任意<任意子域名>.<主机名>.example.tld都返回你的服务器 IP,并且能通过ssh root@<主机名>.example.tld登录服务器。之后再按 安装文档 继续安装即可。
适用前提
DNS 配置文档 明确列出了三个前提假设:
- 你对 DNS 有基本了解(DNS 把
example.tld这样的名字解析成127.0.0.1这样的地址); - 你已经注册了域名,并且该域名指向你使用的托管 DNS 服务商,或者你自己有一台运行 BIND 的 DNS 服务器;
- 你的服务器已接入互联网,正准备按官方说明安装 Dokku——但此时先不要执行安装。
Dokku 本身对域名的要求见 安装文档:建议给服务器绑定至少一个域名,这并非强制,但绑定后访问应用更方便。文档给出了两种绑定方式的区别:
- 通配符域名(
*.domain.tld的 A 记录):应用通过$APP.domain.tld访问; - 单一域名(
domain.tld的 A 或 CNAME 记录):应用通过domain.tld:$RANDOM_PORT访问。
本文按通配符方案展开,因为它支持按子域名直接访问应用。
文档中同时存在"使用域名根节点"(node-js-app.example.tld)和"使用子域名"(node-js-app.myserver.example.tld)两种写法,但 dns.md 中"使用域名根节点"一节自述work in progress、内容不完整,因此下面只走文档给出完整步骤的子域名路径。
第一步:确认 Dokku 服务器的 IP 地址
先 SSH 登录你的服务器,用ifconfig或ip addr查看 IP 地址:
ip addr记下这个公网 IP,后面两条 A 记录都要用到它。
第二步:在 DNS 中创建两条 A 记录
假设你的域名是example.tld,给 Dokku 服务器起的子域名是myserver(以下example.tld与127.0.0.1均为文档示例值,请替换为你自己的域名和上一步查到的真实服务器 IP):
- 主机名 A 记录:进入你的托管 DNS 服务商后台,创建一条名为
myserver的A记录,值填服务器 IP。这样myserver.example.tld就能解析到服务器。 - 通配符 A 记录:如果你的 DNS 服务商支持通配符,再创建一条名为
*.myserver的A记录,值同样填服务器 IP。这样test.myserver.example.tld、xyzzy.myserver.example.tld等任意子域名都会解析到同一台服务器——这正是 Dokku 按子域名区分应用的机制。
如果你自己用 BIND,zone 文件对应的片段与文档示例一致(文档示例值,需替换为真实域名和 IP):
$ORIGIN example.tld $TTL 5m myserver IN A 127.0.0.1 *.myserver IN A 127.0.0.1托管 DNS 服务商界面不同,但记录类型与内容相同,按上面两条记录的名称和值在服务商后台创建即可。
第三步:验证解析结果
DNS 变更依赖缓存,文档提醒:从几分钟到几天都有可能才传播完毕。所以查询结果可能来自缓存,如果结果不对,先确认变更是否已生效,再排查配置。
在 Linux 上,用以下任一命令验证主机名记录:
host myserver.example.tld dig -t A myserver.example.tld nslookup myserver.example.tld文档给出的成功判断标准:
- 上述命令返回你的服务器 IP;
- 查询
myserver.example.tld下的任意其他名字也都返回服务器 IP,例如:
host test.myserver.example.tld host xyzzy.myserver.example.tld- 还能通过域名登录服务器:
ssh root@myserver.example.tld。
三条都满足,说明 DNS 已经按 Dokku 的要求配好了。
接下来:执行安装并设置全局域名
DNS 就绪后,按 安装文档 安装最新稳定版(Debian 系系统通过 apt-get 安装,文档给出的命令,DOKKU_TAG=v0.38.27对应当前文档版本):
# for debian systems, installs Dokku via apt-get wget -NP . https://dokku.com/install/v0.38.27/bootstrap.sh sudo DOKKU_TAG=v0.38.27 bash bootstrap.sh安装大约需要 5–10 分钟,具体取决于网络速度。安装完成后还有一步收尾:把全局域名设为刚才配好 A 记录的那个域名。文档示例(dokku.me为文档示例值,替换为你的域名,例如myserver.example.tld;文档要求该域名必须有一条 A 记录或 CNAME 指向服务器 IP):
# this domain should have an A record or CNAME pointing at your server's IP dokku domains:set-global dokku.me一个不需要自有域名的可选分支:安装文档提到,也可以把服务器 IP 追加.sslip.io来获得子域名支持,例如dokku domains:set-global 10.0.0.2.sslip.io(10.0.0.2为文档示例 IP,替换为你的服务器 IP)。
全局域名可用dokku domains:report查看当前各应用与全局的 vhost 状态,详见 domains 文档。
限制与注意
- 缓存:如前所述,DNS 变更生效时间不定,验证时拿到的答案可能是缓存结果。
- 通配符支持:
*.myserver记录需要你的 DNS 服务商支持通配符;不支持时只能退化为单一域名方案(应用经domain.tld:$RANDOM_PORT访问)。 - 域名根节点方案:文档中"使用域名根节点"章节尚未写完,本文不展开该路径;如需使用,以 dns.md 的后续更新为准,全局域名可通过 domains 插件调整。
- 系统要求:安装侧要求 Ubuntu 22.04/24.04 或 Debian 11+ x64,架构为
AMD64或arm64,Docker 调度器最低 1GB 内存(K3s 调度器为每节点 2GB),详见 安装文档。
【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokku
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考