@bigbinary/neeto-custom-domains-frontend

中文文档
3.5.8发布于 2026/10/30UNLICENSEDTypeScriptESM + CJS近 30 天下载 1.7万

Repo作为新纳米结构,配置,数据等的真理来源.

中文使用文档
文档目录5 节
  1. 目录
  2. 带有主机应用程序的开发
  3. 将已有域迁移到 Cloudflare
  4. 出版指令
  5. 一体化

需要海关域名

这个 neeto-custom-domains-nano 管理自定义域跨越 neto 应用.

目录

  1. 带有主机应用程序的开发
  2. 出版说明

带有主机应用程序的开发

引擎为netoCustomDomains提供后端设置.

安装

  1. 将此行添加到您的应用程序的 Gemfile 中 :
source "NEETO_GEM_SERVER_URL" do
  # ... existing gems

  gem "neeto-custom-domains-engine"
end
  1. 然后执行:
bundle install
  1. 运行迁移
rails neeto_custom_domains_engine:install:migrations
rails db:migrate

使用量

  1. 添加关联
# If custom domain is associated to Organization
class Organization < ApplicationRecord
  include NeetoCustomDomainsEngine::CustomDomainable
end

# If custom domain is associated to other resources (eg: Site)
class Site < ApplicationRecord
  include NeetoCustomDomainsEngine::CustomDomainable
end

关注的还有: custom_domains 协会, primary_custom_domain 财务报告和审定财务报表 canonical_root_url(fallback)删除任何 has_many :custom_domains 或者说 primary_custom_domain 模型已经定义了。 模型方法凌驾于 关切,而该关切的版本只返回一个没有 重定向,即光子URL和重定向依赖.

  1. 添加控制器

所有常见的控制器逻辑被提取到引擎上. 然而,我们仍然需要 从主机应用程序控制器上装入一些记录.

如果自定义域与 Organization,添加一个 Api::V1::CustomDomainable 在主机应用程序中关注并将其纳入 控制器。 控制器。 这使得装载器可以跨需要它的控制器重新使用.

# app/controllers/concerns/api/v1/custom_domainable.rb
module Api::V1::CustomDomainable
  extend ActiveSupport::Concern

  private

    def load_custom_domainable!
      @custom_domainable = organization
    end
end
class Api::V1::Admin::CustomDomainsController < NeetoCustomDomainsEngine::DomainsController
  include Api::V1::CustomDomainable
end

如果自定义域与另一个资源(如. Site),定义 load_custom_domainable! 直接在控制器中:

class Api::V1::Admin::CustomDomainsController < NeetoCustomDomainsEngine::DomainsController
  private

    def load_custom_domainable!
      @custom_domainable = organization.sites.find(params[:site_id])
    end
end
  1. 添加一个 CustomDomainConcern 模式关注

发动机的 NeetoCustomDomainsEngine::Domain 模式需求 custom_domain_url 财务报告和审定财务报表 organization 可在域名记录中查阅——用于 例如,在通知电子邮件中生成链接时,以及在按下 域名.

在下面的精确路径下定义主机应用程序中的顾虑. 发动机 自动包含通过 include CustomDomainConcern if defined?(CustomDomainConcern), (中文(简体) ), 因此不需要初始器或手动补丁——铁路自动加载处理.

返回路径 custom_domain_url 是特定产品。 指着它 无论自定义域设置页面挂载在您的产品管理器中 面板(下面的示例使用NeetoQuiz的路径;替换为您的产品).

# app/models/concerns/custom_domain_concern.rb
module CustomDomainConcern
  extend ActiveSupport::Concern

  def custom_domain_url
    root_url = organization.root_url
    # Replace this path with the route to the custom domain settings page
    # in your product's admin panel.
    "#{root_url}/admin/admin-panel/custom-domain"
  end

  def organization
    custom_domainable
  end
end

如果 custom_domainable 这不是 Organization (例如:. Site, (中文(简体) ), 更新 organization 转至自己的组织(例如:. custom_domainable.organization) (中文(简体) ).

  1. 在您的应用程序中包含以下模块 config/routes.rb 文件 :
include NeetoCustomDomainsEngine::Routes::Draw

  1. 定义所需路线.
# config/routes.rb
custom_domains_routes :acme

# routes/api.rb within the admin routes
custom_domains_routes :domain
  1. 添加前端组件 . url 应该是自定义域的 api 控制器。 控制器.
import { CustomDomain as NeetoCustomDomainDashboard } from "@bigbinary/neeto-custom-domains-frontend";
import { BASE_API_V1_URL, SINGULAR } from "neetocommons/constants";
import HelpPopover from "neetomolecules/HelpPopover";
import { useTranslation } from "react-i18next";

import routes from "routes";
import { EVENTS } from "src/constants";
import { CUSTOM_DOMAIN_HELP_DOC_URL } from "src/constants/urls";

const CustomDomain = () => {
  const { t } = useTranslation();

  const breadcrumbs = [
    { link: routes.admin.settings.index, text: t("titles.settings") },
    {
      link: routes.admin.settings.customDomain,
      text: t("neetoCustomDomains.customDomain", SINGULAR),
    },
  ];

  const CUSTOM_DOMAIN_DNS_PROVIDER_HELP_DOCS = {
  cloudflare: {
    subdomain: `${PERMANENT_URL}/permanent-url-1`,
    rootDomain: `${PERMANENT_URL}/permanent-url-2`,
  },
  unknown: {
    subdomain: `${PERMANENT_URL}/permanent-url-3`,
    rootDomain: `${PERMANENT_URL}/permanent-url-4`,
  },
  namecheap: {
    subdomain: `${PERMANENT_URL}/permanent-url-5`,
    rootDomain: `${PERMANENT_URL}/permanent-url-6`,
  },
  hostinger: {
    subdomain: `${PERMANENT_URL}/permanent-url-7`,
    rootDomain: `${PERMANENT_URL}/permanent-url-8`,
  },
  digitalocean: {
    subdomain: `${PERMANENT_URL}/permanent-url-9`,
    rootDomain: `${PERMANENT_URL}/permanent-url-10`,
  },
  godaddy: {
    subdomain: `${PERMANENT_URL}/permanent-url-11`,
    rootDomain: `${PERMANENT_URL}/permanent-url-12`,
  },
  squarespace: {
    subdomain: `${PERMANENT_URL}/permanent-url-13`,
    rootDomain: `${PERMANENT_URL}/permanent-url-14`,
  },
  wix: {
    subdomain: `${PERMANENT_URL}/permanent-url-15`,
    rootDomain: `${PERMANENT_URL}/permanent-url-16`,
  },
  porkbun: {
    subdomain: `${PERMANENT_URL}/permanent-url-17`,
    rootDomain: `${PERMANENT_URL}/permanent-url-18`,
  },
  networksolutions: {
    subdomain: `${PERMANENT_URL}/permanent-url-19`,
    rootDomain: `${PERMANENT_URL}/permanent-url-20`,
  },
  aws: {
    subdomain: `${PERMANENT_URL}/permanent-url-21`,
    rootDomain: `${PERMANENT_URL}/permanent-url-22`,
  },
  strato: {
    subdomain: `${PERMANENT_URL}/permanent-url-23`,
    rootDomain: `${PERMANENT_URL}/permanent-url-24`,
  },
}

  return (
    <div className="w-full">
      <NeetoCustomDomainDashboard
        appName="appname" // Eg: `cal`, `form`
        dnsHelpDocs={CUSTOM_DOMAIN_DNS_PROVIDER_HELP_DOCS}
        helpDocUrl={CUSTOM_DOMAIN_HELP_DOC_URL}
        subdomainPlaceholder="subdomain-placeholder" // Eg: `schedule` for NeetoCal and `form` for NeetoForm
        url={`${BASE_URL}/custom-domains`}
        { ...{ breadcrumbs } }
      />
    </div>
  );
};

export default CustomDomain;
  1. 挂载 CustomDomain 在理想路径中实现组件.
SIO: 重定向到自定义域和犬类 URL

一旦自定义域激活,产品子域上的公开页面应当 重定向到它,而犬形URL应该指向它.

  1. 包含 NeetoCustomDomainsEngine::CanonicalHostRedirection 在公众中 只有基础控制器。 永不包含在管理员、 API 或 认证控制器中 . 他们必须继续工作 在子域,所以客户的域破 还可以登录并修复.
  2. 关注的内容是: @organization。如果可域为 其它( 如: a) Site),推翻私有方法 canonical_custom_domainable。 。 。 .
  3. 使用 canonical_url 页:1 <link rel="canonical"> 财务报告和审定财务报表 og:url它会保持 ?page=N 的页面,并删除其他查询参数.
  4. 构建站点映射和机器人 URL canonical_root_url(fallback),其中 倒置是子域基址.

GET 和 HEAD 请求在子域上获得一个 301 到同一路径并查询 主自定义域。 重定向只在域时发生 活动且没有自己的方向。 否则子域服务于 页面和目录 URL 返回到子域。 这些要求从来没有 重定向: JSON 请求, 浏览器加载不属于顶级页面 导航(a) Sec-Fetch-Dest 其他 document,例如iframes,获取 和XHR呼叫或图像),签名用户(因此是私人内容和草稿) 预览会继续在子域上工作,并请求其它自定义 域名。 301型机车被私藏一个小时.

每个重定向臂都有一个存储证书域活性探测器. 若为 重新定向的请求不会在一分钟内到达自定义域, 引擎运行 ReconcileCertificateJob 对于这个领域。 无法实现的域 超过一个小时的地址被标记失败, 并且所有者会收到电子邮件 。 在自定义域上被击中,或者一个探测器, 被信任为六至 7小时,所以每个域 探测最多一次在该窗口.

ENV 变量

对于这个引擎的运行,我们需要以下的env变量.

LETS_ENCRYPT_PRIVATE_KEY: < For requesting SSL certificates >
LETS_ENCRYPT_DIRECTORY_URL: < For requesting SSL certificates >
LETS_ENCRYPT_APP_NAME: < For pushing SSL certificate and custom domains >
NEETO_DEPLOY_APP: < To identify in which platform the app is deployed NeetoDEploy/Heroku>
NEETO_DEPLOY_AUTH_TOKEN: <For pushing SSL certificate and custom domains>

可选的,仅进行:

CUSTOM_DOMAIN_EDGE_CERTIFICATE_SUFFIX: < e.g. review.neetoautomation.com >

主机名在此后缀下的一个标签在未进行DNS检查或检查的情况下被激活 证书, 因为 Cloudflare 的通配证书已经为他们服务 。 没错 仅在 Rails.env.staging?,所以设置它 任何地方没有效果.

将已有域迁移到 Cloudflare

Cloudflare- for-SaaS 启用之前创建的域没有路由 登记 - CloudflareValidationSyncJob 仅当一个域是 创建, 或当获取 DCV 令牌时 。 回填任务就是这条路线. 运行它 在每个产品内,一次一个产品.

# Changes nothing. Shows what would be registered.
bundle exec rake neeto_custom_domains_engine:cloudflare:backfill_report

# Registers them.
bundle exec rake neeto_custom_domains_engine:cloudflare:backfill

它拒绝运行,除非 NEETO_CUSTOM_DOMAINS_CERTIFICATE_BACKEND 实值 dual 或者说 cloudflare 以及两者 CLOUDFLARE_SAAS_ZONE_ID 财务报告和审定财务报表 CLOUDFLARE_SAAS_API_TOKEN 已经设定.

变量默认它会做什么
MAX_IN_FLIGHT100有多少个证书可以同时验证
LIMIT无一次放出这么多就停止
MAX_MINUTES120运行停止前的时钟预算

MAX_IN_FLIGHT 这是最重要的一个. 登记费用 API 单次通话 每个域,但每个域 等待验证民意测验 云浮大约10 每5分钟一次。 每5分钟1,200个请求限值 让天花板在120个证书左右飞行 默认离开 头室. 提高它的风险是同时限制每个产品的速度,因为限制 是每个账户而不是每个区域.

任务可以安全停止和重运行:一个已经持有 cloudflare_hostname_id 被跳过。 仅 active 域已注册 - (单位:千美元) failed 域名的 DNS 不指向我们, 所以注册它只是 对抗CA 域还原 pending 以后再跑一次再接回来 他们开始活动.

一次只能有一个回填;通过Redis锁拒绝第二个回填.

登记不是一种削减。 它离开,让我们加密服务 和云花 一边闲逛 仅当域名的 DNS 开始指向一个 代理主机名.

出版指令

咨询 构建和释放软件包 关于如何出版的详细指南.

一体化

  • 尼托卡尔
  • 内托格式
  • 内托Kb
  • 内托引擎
  • 涅盘点
  • Neeto 记录
  • 尼托布吕克语Name
  • Neeto 课程
  • 新代码
  • 涅托德斯克语Name
  • 尼托基兹语Name
  • 尼托规划器
  • Neeto 发票
  • 内托聊天
  • 涅盘运行器

版本与发布记录

@bigbinary/neeto-custom-domains-frontend 共发布 66 个版本,首次发布于 2024/09/24;过去 12 个月发布了 31 个版本。

版本发布日期距今
3.5.8latest2026/10/309 天前
3.5.72026/10/1127 天前
3.5.62026/10/0930 天前
3.5.52026/10/021 个月前
3.5.42026/10/011 个月前
3.5.32026/09/281 个月前

其他发布通道:beta → 2.1.0-beta3。

关于 @bigbinary/neeto-custom-domains-frontend 的常见问题

@bigbinary/neeto-custom-domains-frontend 是什么?

Repo作为新纳米结构,配置,数据等的真理来源.

如何安装 @bigbinary/neeto-custom-domains-frontend?

在项目目录运行 npm install @bigbinary/neeto-custom-domains-frontend,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:qs(6.16.2)、url(0.11.4)、yup(0.32.11)、antd(5.22.1)、util(^0.12.5)、axios(1.20.0)、ramda(0.29.0)、react(18.3.1)、buffer(^6.0.3)、formik(2.4.6)、i18next(22.5.1)、zustand(4.4.2)、dompurify(3.4.17)、js-logger(1.6.1)、react-dom(18.3.1)、classnames(2.5.1)、stream-http(3.2.0)、tailwindcss(3.4.14)、react-helmet(^6.1.0)、os-browserify(0.3.0)、react-i18next(12.3.1)、vm-browserify(1.1.2)、@babel/runtime(7.29.7)、react-toastify(8.0.2)、tty-browserify(0.0.1)、path-browserify(^1.0.1)、https-browserify(1.0.0)、mixpanel-browser(^2.45.0)、react-router-dom(5.3.3)、crypto-browserify(3.12.1)、source-map-loader(4.0.1)、stream-browserify(^3.0.0)、@bigbinary/neetoui(8.8.3)、@honeybadger-io/js(6.10.1)、@bigbinary/neeto-cist(1.0.17)、@honeybadger-io/react(6.1.25)、@tanstack/react-query(5.59.20)、@bigbinary/neeto-atoms(1.1.2)、@bigbinary/neeto-icons(1.20.89)、@bigbinary/neeto-molecules(5.9.10)、@tanstack/react-query-devtools(5.59.20)、@bigbinary/neeto-commons-frontend(4.14.5)、@bigbinary/neeto-filters-frontend(4.5.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bigbinary/neeto-custom-domains-frontend 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bigbinary/neeto-custom-domains-frontend 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@bigbinary/neeto-custom-domains-frontend 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.13。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bigbinary/neeto-custom-domains-frontend 可以商用吗?

@bigbinary/neeto-custom-domains-frontend 使用 UNLICENSED 许可。作者声明为 UNLICENSED,即不授予公开使用许可(与公共领域的 Unlicense 不同)。使用前需获得作者授权。以上为概括,不构成法律意见,请以许可原文为准。

@bigbinary/neeto-custom-domains-frontend 的下载量有多少?

根据 npm 官方下载统计,@bigbinary/neeto-custom-domains-frontend 在 2026/10/08 – 2026/11/06 这 30 天内被下载 16,777 次,日均约 559 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bigbinary/neeto-custom-domains-frontend 还在维护吗?

最新版本 3.5.8 发布于 2026/10/30(9 天前);至今共发布 66 个版本,其中过去 12 个月发布了 31 个;首次发布于 2024/09/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。