====== 06 Windows/IIS 生产部署 ======
===== 部署主线 =====
Windows/IIS 是 RhinoCompute 生产部署的主线。IIS 位于最前面,负责接收请求并启动/托管 ''rhino.compute.exe''。''rhino.compute'' 再启动一个或多个 ''compute.geometry'' 子进程执行实际求解。
典型链路:
客户端 / Hops / 业务后端
|
v
IIS
|
v
rhino.compute.exe
|
v
compute.geometry.exe 子进程
|
v
Rhino.Inside + Rhino + Grasshopper
===== 为什么生产环境使用 IIS =====
直接启动 ''rhino.compute.exe'' technically 可行,但生产环境还需要:
* 机器重启后自动恢复服务。
* 进程异常退出后自动拉起。
* 与 Windows Server/IIS 运维体系集成。
* 配置端口、HTTPS、日志、应用池空闲策略。
* 让 Compute 不必一直运行,按请求唤醒,空闲后关闭子进程以控制计费。
因此生产环境建议按官方 IIS 部署指南执行。
===== 前置条件 =====
* Windows Server 2019 或更高版本。
* 可远程登录服务器的 RDP 权限。
* Rhino 下载所需邮箱。
* Compute API Key:自定义的高强度密钥,用于客户端认证。
* RhinoToken:从 Licenses Portal 获取的 Core-Hour Billing token。
* 明确使用 Rhino 8 还是 Rhino 7 的部署脚本。
===== Bootstrap 安装流程 =====
官方部署流程使用 PowerShell bootstrap 脚本安装 Rhino、IIS、Compute,并配置 IIS 站点。教学中应强调:
* 在全新 VM 上执行最简单。
* 用管理员权限打开 PowerShell。
* 脚本会提示输入邮箱、API Key、Rhino Token。
* 安装完成后,IIS 应能在收到请求时启动 RhinoCompute。
不要把生产 token 或 API key 写进教学截图、共享文档或代码仓库。
===== web.config 的作用 =====
IIS 通过 ''web.config'' 启动 ASP.NET Core 应用。部署后常见路径:
C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\rhino.compute\web.config
其中 ''aspNetCore'' 节点的 ''arguments'' 可配置 RhinoCompute 启动参数,例如:
修改前建议备份 ''web.config''。修改后重启 IIS 或回收应用池。
===== 常用生产参数 =====
^ 参数 ^ 推荐理解 ^
| ''--port 80'' | IIS/Compute 监听端口。除非清楚网络配置,不要随意改。 |
| ''--childcount 4'' | 子进程数量。提高并发,但增加内存和授权占用。 |
| ''--idlespan 3600'' | 子进程空闲关闭时间,单位秒。默认常见为 1 小时。 |
| ''--spawn-on-startup'' | 启动 Compute 时立即拉起子进程。生产常保持 false,按请求唤醒。 |
| ''--load-grasshopper false'' | 不需要 GH 求解时可关闭 Grasshopper 加载,缩短启动。 |
| ''--max-request-size N'' | 调整最大请求体。大模型或大 DataTree 可能需要提高。 |
| ''--timeout N'' | 调整服务端超时。长耗时 Grasshopper 定义可能需要提高。 |
| ''--apikey KEY'' | 会覆盖环境变量中的 API Key。生产更推荐环境变量或部署脚本管理。 |
| ''--block-private-urls'' | 公网服务建议启用,防止服务端 URL 抓取访问云元数据或内网资源。 |
===== idlespan 与 IIS Idle Timeout =====
''idlespan'' 控制 ''compute.geometry'' 子进程空闲多久后关闭。IIS 应用池也有自己的 Idle Timeout。两者要配合:
* IIS Idle Timeout 应略大于 Compute 的 ''idlespan''。
* 否则 IIS 可能先关闭 ''rhino.compute'',导致子进程管理和日志不清晰。
* idlespan 太短会增加冷启动延迟;太长会增加服务器计费时间。
===== 部署后测试 =====
在客户端机器上测试:
http://server-ip:80/version
http://server-ip:80/healthcheck
http://server-ip:80/activechildren
http://server-ip:80/sdk
然后在 Hops 中配置:
* Hops-Compute server URL:''http://server-ip:80/''
* API Key:部署时输入的 API Key
最后运行一个最小 Hops 定义,而不是直接运行完整业务定义。
===== HTTPS 与反向代理 =====
公网服务建议使用 HTTPS。可以按官方“Configure Compute to use HTTPS”流程配置,也可以在企业架构中把 HTTPS 终止放到更前面的负载均衡或网关层。
基本原则:
* 不要在公网裸露无 API Key 的 Compute。
* API Key 不等于完整用户权限系统,只适合保护 Compute 服务入口。
* 多用户业务应由外层业务服务完成用户认证、授权、限流和审计。
===== 更新 Compute =====
生产服务器更新分两类:
* 更新 Rhino。
* 更新 RhinoCompute。
更新前应:
* 记录当前 Rhino 版本、Compute 版本、插件版本。
* 备份 ''web.config'' 和部署脚本配置。
* 在测试 VM 上验证业务 GH 定义和自定义端点。
* 安排维护窗口。
===== 本章检查点 =====
* IIS 是否能启动 RhinoCompute?
* ''/healthcheck'' 和 ''/sdk'' 是否能从客户端访问?
* Hops 使用远程 URL 和 API Key 是否能求解最小定义?
* 日志目录是否能看到当天日志?
* idlespan 与 IIS Idle Timeout 是否协调?
===== 参考资料 =====
* [[https://developer.rhino3d.com/guides/compute/deploy-to-iis/|Deployment to Production Servers]]
* [[https://developer.rhino3d.com/guides/compute/core-hour-billing/|Licensing & Billing]]
* [[https://developer.rhino3d.com/guides/compute/compute-faq/|Compute FAQ]]