本文档详细介绍了如何通过Baklib将内容发送到中国用户,包括面临的挑战、解决方案和技术细节,尤其是在中国互联网审查背景下的操作策略。
以下是翻译后的文章:
这份文档是一份技术指南,详细介绍了如何通过 Baklib 将内容发送到 Baklib 的中国地区用户,包括挑战、解决方案和模式。
在经过中国大网 Firewall(GFW)的任何互联网流量中,中国政府实施了一系列立法措施和技术手段以控制国内互联网。这可能会影响 Baklib API 在中国内的不可靠性。
GFW 使用多种方法进行互联网审查,这些方法会随着时间不断演变和发展。这些方法包括:
* IP 阻塞:最简单的方法,阻止可用的 IP 地址显示受限内容,使其无法访问中国用户。
* DNS 过滤和重定向:GFW 可能返回错误的 IP 地址以显示受限制的域名,导致用户前往错误服务器。
* URL 过滤:包含禁用关键词的 URL 可能会重置连接,阻止页面加载。
* 包裹过滤:GFW 使用诸如深层包检(DPI)等包裹过滤技术来检查和阻止特定类型的流量,基于关键字、URL 或 IP 地址等标准进行。
* 连接重置:受限制网站的连接可能因 GFW 而被强制重置。
* SSL 人肉中间人攻击:GFW 可能拦截并解密 SSL 连接,检查内容后重新加密并转发。
* VPN 阻塞:GFW 随着能力的发展,越来越检测和阻止 VPN 流量以绕过审查。
这些方法使中国互联网的过滤系统具有高度复杂性和适应性,因此在尝试向中国发送内容时,使用 Baklib API 可能会面临挑战。以下是可能遇到的问题概述:
* 在中国客户端构建时发生构建失败
为有效将内容发送到中国的用户,以下解决方案和策略提供了一种可靠的方法。
注意:客户必须拥有一个有效的 ICP 许可证才能在中国运行并发布网站。
* 使用中国服务器上的静态站点框架在增量(数据同步)或全建制环境中构建你的网站。无论是增量构建还是全建制,确保从 Baklib 到构建服务器的内容没有延迟或阻塞。
* 从 Baklib 到构建服务器的内容没有延迟或阻塞。
* webhook 调用触发构建时没有任何连通性问题。
* 构建直接在中国进行可能因超时或数据损坏导致失败。
* 使用中国服务器同步构建后,再将构建同步到中国地区部署的服务器。同步本身可能会很慢,但一旦部署在 Chinese 区域,确保与用户在同一地区的高连通性。
* 通过同步机制将创建的构建同步到中国区域部署的服务器。同步本身可能很慢,但一旦部署在中国区域,就会确保与中国用户高连通。
* 使用中国服务器上的内容进行发布,并将内容从 Chinese 服务器发送给 Chinese 用户以降低延迟。此外,用户可以使用在 Chinese 地区托管的 CDN 提供内容缓存以便更好地性能。
以下是中国地区部署内容的战略架构图:
为了演示上述步骤,我们使用 Gatsby 始化应用。
关于 Gatsby 始化应用:Gatsby 是一种基于 React 的静态网站生成器(SSG),允许开发者通过一次性生成静态 HTML 文件来创建快速且优化的网站。
与 Baklib 的集成:Baklib 作为一个静态网站生成器,会在构建时从 Baklib 获取内容以生成静态 HTML 页面。Baklib 集装箱包含所有内容、资产和配置以实现你的项目。在我们的示例使用场景中,我们将使用 Gatsby 始化应用来将内容添加到我们的箱子。
* 通过 Baklib 应用导入 Baklib 应用:悬停在你想要导入的 Gatsby 始化应用并点击导入按钮。授权该应用并在其中为栈指定一个名称,然后进行导入。
* 悬停在你想要导入的 Gatsby 始化应用并点击导入按钮。
* 授权该应用并在其中为栈指定一个名称,然后进行导入。
* 使用 CLI 导入 Baklib 应用:按照步骤 1 到 3 在文档中使用 build 初始版本创建 starter 网站以使用 CLI 进行starter 内容的导入。
通过完成这些步骤,你将有一个包含所有内容、资产和配置的箱子,以便进一步开发和自定义。
在本步中,我们需要在中国地区部署一个 Jenkins 服务器(Ubuntu22.04),并在云服务提供商或托管数据中心部署,并安装 NVM、Node 和 Gatsby 使用 jenkins 用户。
注意:为了简化,在此示例中使用了 Jenkins 和 AWS 云。但是,AWS Lambda 或 CodeBuild 可以代替 Jenkins。
在中国地区以外的服务器上启动 EC2 实例:确保操作系统为 Ubuntu20 或更高版本。启动 Jenkins 服务器:切换到 Jenkins 用户,并安装 NVM、Node 和 Gatsby。参考安装 NVM 和 Node 的指南:在 Ubuntu 22.04 上如何安装 NVM参考安装 Gatsby 在 Ubuntu 22.04 上如何安装 Gatsby我们依靠 rsync 对项目的文件进行同步。rsync 是一种灵活且稳健的文件同步工具,是我们的策略基础,确保与中国的用户保持高连通性。
安全组 inbound 规则:允许在你的服务器上使用公钥 IP 在特定端口上通信。允许 Baklib 产品 NAT GW IPs 在该端口上通信。
其他管道配置选项:
* 在源代码管理模态中选择 Git,并指定仓库 URL 和要构建的分支。
* 通过 webhook 弹出构建远程使用一个随机生成的认证令牌。
* 创建一个 Jenkins 用户(例如 Will Smith),并生成一个随机的认证令牌。这个用户和令牌将作为基本认证信息用于该箱子的 webhooks 配置。
导航到 Webhooks 在设置部分,并按照以下配置创建一个 webhook。我们的目的是向 Jenkins 端口发送一个 HTTP POST 请求,以对任何发布或未发布在指定环境中的项目内容进行响应。构建一个 webhook,如下的配置:
Stack-level Scope: 我们不需要任何 stack-level 范围。Branch-level Scope: 选择该 webhook 应用的分支。触发条件:配置触发条件如下。
现在我们应该能够在主分支中的任何发布或未发布事件在开发环境中自动触发构建。
在中国地区获得 ICP 许可后,在服务器上部署服务器(Ubuntu22 OS)。然后将一个 EIP(外网 IP)附加到该服务器上。中国的 GFW 不允许连接到 GitHub。我们在服务器上没有安装 NVM。直接安装 Node、NPM 和 Gatsby 在此服务器上。更新之前创建的 Jenkins 任务脚本,使用此服务器的实际 EIP 地址。手动运行 Jenkins 任务一次,使其同步在 Chinese 服务器上的内容。我们已经将构建同步到 Chinese 服务器的 /build 目录。
创建一个服务文件(/etc/init.d/baklib-gatsby-server),其中包含以下内容:
你将看到该服务在 次成功运行。
你可以通过以下方式加速和优化你的网站:
* 用 GitHub 构建并在中国合法地部署静态网站:使用 Baklib 的 API 从 GitHub 创建静态文件并发送到中国。
* 将一个 live 网站转换成中文版本并在 Chinese 区域进行合法部署:将一个现成的 live 网站转换为中文并在中国进行合法部署。
Baklib 是新一代数字内容体验管理平台。竞争环境充斥着“可组合”、“无头”和“DXP”解决方案 --- 但无头选项虽然易于开发人员构建,但为跨职能团队留下了巨大空白,并且无法解决所有用例。Baklib 弥补了依赖开发人员但灵活的无头解决方案与不适合复杂项目的更传统、更适合营销人员的选项之间的差距。
💛🧡🧡客户评价:Baklib 是一个易于使用且可定制的知识库解决方案! 总的来说:我们正在寻找一种可以简化流程的工具管理和访问我们的知识库,Baklib非常适合。它简化了我们团队查找和更新信息的方式,并且显著减少了回答重复问题所花费的时间。