ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OrchardCore 远程部署模块(Remote Deployment)完整指南:跨站点部署计划的推送与执行

OrchardCore 远程部署模块(Remote Deployment)完整指南:跨站点部署计划的推送与执行 CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载导读本文围绕 OrchardCore 的OrchardCore.Deployment.Remote模块展开讲解如何将一个 OrchardCore 站点源站点上构建的部署计划Deployment Plan打包成.zip通过 HTTPS 推送到另一个 OrchardCore 站点目标站点并立即执行其 Recipe实现内容、配置与文件的跨站点一键迁移。读完本文你将掌握远程客户端的配置、远程实例的注册、部署计划的远程执行流程、权限模型以及完整的密钥与网络安全加固方案。模块定位与整体工作流Remote Deployment 模块为 Deployment 模块 提供了额外的执行目标Deployment Target把远程 OrchardCore 站点当作部署计划的执行目的地。从 Manifest.cs 可以看到该模块声明依赖OrchardCore.Deployment归类为 Deployment。模块描述为 Provide the ability to export and import to and from a remote server.一次完整的远程部署遵循如下流程源站点执行某个部署计划时由ExportRemoteInstanceController.Execute调用IDeploymentManager.ExecuteDeploymentPlanAsync生成部署包并用ZipFile.CreateFromDirectory打包成计划名.zip源站点通过HttpClient以multipart/form-data形式向目标站点的导入端点发送POST请求表单字段包含Contentzip 文件、ClientName、ApiKey目标站点的ImportRemoteInstanceController.Import校验客户端名称与 API Key将上传的 zip 解压到临时目录然后调用IDeploymentManager.ImportDeploymentPackageAsync执行包内的Recipe.json目标站点返回HTTP 200 OK源站点据此在管理界面弹出部署执行成功的通知。前置条件在启用远程部署前需要同时满足以下条件源站点与目标站点都要启用两个功能Deployment部署与Remote Deployment远程部署。网络连通性源站点必须能够向目标站点发起 HTTPS 请求。功能对齐目标站点必须启用导出 Recipe 中每个步骤Step所依赖的全部功能否则导入执行时可能因缺少功能而失败。权限收敛只将部署相关权限授予可信管理员。⚠️安全警告远程部署会在目标站点上无需人工确认地直接执行 Recipe。因此必须使用独立、强度足够的 API Key且仅通过 HTTPS 传输并只为可信的源站点配置客户端。配置目标站点创建远程客户端Remote Client目标站点通过远程客户端来授权接收来自源站点的部署包。配置路径为管理后台工具Tools 部署Deployments 远程客户端Remote Clients点击添加远程客户端Add Remote Client输入一个唯一的客户端名称Client Name生成一个高强度 API Key妥善保存副本并填入API Key字段保存客户端。源码视角API Key 的加密存储在目标站点上API Key 并不是明文落库的。从 RemoteClientService.cs 可以看到CreateRemoteClientAsync使用IDataProtector保护器名称为OrchardCore.Deployment且为ToTimeLimitedDataProtector对 API Key 进行加密仅把密文ProtectedApiKey写入RemoteClient文档RemoteClient模型见 Models/RemoteClient.cs只包含Id、ClientName、ProtectedApiKey三个字段不保留明文。由于 API Key 由ASP.NET Core Data Protection保护一旦 Data Protection 密钥丢失或被更换目标站点将无法再解出旧 API Key。此时需要在目标站点为该客户端重新生成并保存新的 API Key在源站点更新对应的远程实例配置使其与新的客户端名称和 API Key 保持一致。在导入校验时ImportRemoteInstanceController.Import见 ImportRemoteInstanceController.cs会先按ClientName找到客户端再用_dataProtector.Unprotect还原明文与请求中的ApiKey比对客户端不存在返回400 Bad RequestThe remote client was not provided密钥不匹配同样返回400The Api Key was not recognized。配置源站点添加远程实例Remote Instance源站点需要把目标站点注册为远程实例配置路径为管理后台工具Tools 部署Deployments 远程实例Remote Instances点击添加远程实例Add Remote Instance输入一个描述性名称Name在URL字段填写目标租户的远程导入端点https://example.com/OrchardCore.Deployment.Remote/ImportRemoteInstance/Import当目标站点不是默认租户时必须带上租户 URL 前缀例如https://example.com/my-tenant/OrchardCore.Deployment.Remote/ImportRemoteInstance/Import输入在目标站点上创建的客户端名称与API Key保存远程实例。源码视角远程实例的持久化RemoteInstance模型见 Models/RemoteInstance.cs包含Id、Name、ClientName、Url、ApiKey五个字段。与目标站点不同源站点上的远程实例文档以明文保存 API Key——这正是 RemoteInstanceService.cs 通过IDocumentManagerRemoteInstanceList直接持久化的原因该服务提供GetOrCreateMutableAsync加载可写副本与GetOrCreateImmutableAsync读取缓存副本两种读取方式分别用于管理与共享场景。⚠️安全警告源站点的远程实例文档中保存着调用目标站点所需的 API Key。必须严格限制对租户数据库、备份文件以及管理远程实例Manage remote instances权限的访问范围。执行部署计划远程推送配置完成后即可发起远程部署在源站点后台进入工具Tools 部署Deployments 计划Plans打开目标部署计划点击执行Execute在目标列表中选择已配置的远程实例。源码视角导出与推送的完整调用链RemoteInstanceDeploymentTargetProvider见 Services/RemoteInstanceDeploymentTargetProvider.cs实现了IDeploymentTargetProvider把每个已配置的远程实例转换为一个名为Sends the deployment plan to a remote instance.的执行目标路由指向ExportRemoteInstance控制器的Execute动作。执行时见 ExportRemoteInstanceController.cs校验当前用户是否具备DeploymentPermissions.Export导出数据权限否则返回Forbid()读取DeploymentPlan与远程实例若任一不存在则返回404使用TemporaryFileBuilderDeploymentPlanResult在临时目录中生成部署文件并以计划名ToSafeName()命名的.zip打包通过HttpClientFactory创建的客户端以MultipartFormDataContent发送三个字段Contentzip 文件流、ClientName、ApiKeyPOST到远程实例的Url若目标返回HTTP 200 OK源站点显示成功通知否则显示An error occurred while sending the deployment to the remote instance: \{ReasonPhrase} ({StatusCode})\无论成功与否finally中都会删除本地临时 zip。目标端收到请求后见 ImportRemoteInstanceController.cs该动作标注了[IgnoreAntiforgeryToken]因为调用方是外部应用无法携带有效的防伪令牌安全完全依赖私有 API Key源码注释对此有明确说明校验ClientName与ApiKey通过后将上传文件经由FileCreationService进行上传校验校验失败同样返回400将 zip 解压到临时目录调用_deploymentManager.ImportDeploymentPackageAsync(new PhysicalFileProvider(tempArchiveFolder))执行包内 Recipe若执行过程抛出RecipeExecutionException会把StepResult.Errors中的错误逐条写入通知其他异常则记录日志并提示Unexpected error occurred while executing a deployment plan.finally中清理临时 zip 与解压目录。Startup.cs见 Startup.cs注册了AddHttpClient()、FileCreationService、RemoteInstanceService、RemoteClientService、IDeploymentTargetProvider及权限提供器是上述调用链得以工作的依赖装配入口。权限模型该模块定义了三项权限见 Permissions.cs权限用途DeploymentPermissions.ManageRemoteInstances管理源站点的远程实例增删改DeploymentPermissions.ManageRemoteClients管理目标站点的远程客户端增删改DeploymentPermissions.ExportRemoteInstances向远程实例导出部署包此外执行部署计划还要求具备 Deployment 模块的「导出数据Export Data」权限即DeploymentPermissions.Export在ExportRemoteInstanceController.Execute中直接校验。默认情况下管理员Administrator角色自动获得以上全部权限。建议采用分离的角色分配如果操作人员只需要执行部署、而不应能创建或查看远程凭据则只授予其「导出数据」与「向远程实例导出」权限不要授予「管理远程实例 / 管理远程客户端」权限。安全加固清单全程使用 HTTPS客户端名称与 API Key 随部署包一起传输明文 HTTP 会直接泄露凭据。每对站点使用独立 API Key不同源站点与目标站点的配对应使用不同的密钥避免单点泄露波及全部通道。定期轮换 API Key并在此后立刻更新目标站点客户端与源站点远程实例两端的配置一旦怀疑泄露应立即更换。及时清理不再使用的远程客户端与远程实例减少攻击面与误操作入口。将导出的部署包视为敏感数据包内可能包含部署计划所选中的内容、配置和文件。关注目标站点的上传限制与文件校验配置在传输大体积部署包前先确认上传大小上限如 Kestrel 请求体限制、反向代理的client_max_body_size等与文件类型校验不会拦截。部署失败排查当远程部署失败时按以下顺序逐项核查目标 URL 是否正确是否包含正确的租户前缀与完整端点路径/OrchardCore.Deployment.Remote/ImportRemoteInstance/Import凭据是否一致客户端名称与 API Key 在源站点远程实例与目标站点客户端两端是否完全匹配注意 API Key 区分大小写、避免首尾空格功能是否齐全目标站点是否已启用 Recipe 每一步所需的功能反向代理是否放行是否允许 multipartPOST请求以及所需大小的请求体查看目标站点应用日志是否出现 Recipe 执行错误或文件上传校验错误如RecipeExecutionException记录的错误明细。关联阅读部署计划的基础概念与本地导出Deployment 模块文档src/docs/reference/modules/Deployment/README.md模块声明与依赖关系Manifest.cs导入端校验与执行实现ImportRemoteInstanceController.cs导出端打包与推送实现ExportRemoteInstanceController.cs远程客户端服务与密钥加密存储RemoteClientService.cs远程实例文档服务RemoteInstanceService.cs权限定义与默认角色Permissions.cs依赖注入装配Startup.cs赞分享CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载相关推荐Chevrotain完全指南JavaScript解析器构建工具包的终极入门教程Chevrotain完全指南JavaScript解析器构建工具包的终极入门教程 Chevrotain是一个 超快速 且 功能丰富 的JavaScript解析器StyLua终极Lua代码格式化工具一站式解决多版本兼容难题StyLua终极Lua代码格式化工具一站式解决多版本兼容难题 StyLua是一款专为Lua开发者打造的代码格式化工具能够自动调整代码风格确保团队协作中的开发工具CLI代码格式化如何把 MCP Server 部署到 Vercel 与 Cloudflare完整远程部署指南如何把 MCP Server 部署到 Vercel 与 Cloudflare完整远程部署指南 如果你是第一次接触 MCP Server 远程部署 这篇指南就示例工程上一篇Serial Studio 的 Qt/C 评审规则手册热路径不变式、线程模型与已知地雷下一篇5分钟搞定APA 7th引用格式让Word自动生成完美参考文献创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表