操作步骤

配置域名解析

在自己的域名运营商处添加三个解析记录,这里以我想用的域名wehome.qiuyedx.com和前端Canister ID4blhg-uyaaa-aaaag-qjpqq-cai为例。

  1. 添加 CNAME 记录,Host 为自定义域名wehome.qiuyedx.com,Value 为wehome.qiuyedx.com.icp1.io
  2. 添加 TXT 记录,Host 为_canister-id,Value 为前端 Canister ID4blhg-uyaaa-aaaag-qjpqq-cai
  3. 添加 CNAME 记录,Host 为_acme-challenge,Value 为_acme-challenge.wehome.qiuyedx.com.icp2.io

添加自定义域名配置

在IC项目中添加一些配置,以便边缘节点知道有哪些可用的自定义域名。

  1. dfx.json中前端 Canister 的source字段中添加一个新的目录,如domain-assets:
"source": [
        "src/ic_test_frontend/dist",
        "src/ic_test_frontend/domain-assets"
      ],
  1. 在这个domain-assets目录中新建一个名为.well-known的文件夹,并在该文件夹中新建一个名为ic-domains的文件,在其中列出所有的自定义域名和子域名:
wehome.qiuyedx.com
  1. domain-assets目录中新建一个名为.ic-assets.json的文件,并写入:
[
    {
        "match": ".well-known",
        "ignore": false
    }
]

目录结构

现在,目录结构应该大致为:

project-root/
├─ frontend/
│  ├─ domain-assets/
│  │  ├─ .well-known/
│  │  │  ├─ ic-domains
│  │  ├─ .ic-assets.json

部署 Canister

完成配置后,使用dfx deploy --ic或其他命令部署 Canister 到主网上,dfx会根据.ic-assets.json的配置,将.well-known/ic-domains文件包含在部署中。

注册自定义域名

在终端中执行以下命令,这里以我使用的域名wehome.qiuyedx.com为例:

curl -sLv -X POST \
    -H 'Content-Type: application/json' \
    https://icp0.io/registrations \
    --data @- <<EOF
{
    "name": "wehome.qiuyedx.com"
}
EOF

如果调用成功,我们将收到一个 JSON 响应,其中正文中包含请求 ID,我们可以使用该响应来查询注册请求的状态:

{"id":"REQUEST_ID"}

注册大概需要几分钟,我们可以在浏览器中访问以下 URL 来使用上面这个请求 ID 查询注册请求的处理状态:
https://icp0.io/registrations/REQUEST_ID

如果显示Available则表示注册请求已成功处理,我们就可以直接使用自定义域名,如wehome.qiuyedx.com来访问自己的前端服务了~

相关资料


A Student on the way to full stack of Web3.