我正在编写一堆 python 脚本,为我的初创公司启动 FastAPI 服务器,作为我们服务的要求。该服务器初始化 Supabase SDK 客户端来执行一些非常具体的操作。
仅当我们的所有客户购买了我们的服务订阅后,才需要将该服务器分发给他们。不仅如此,我们还需要能够在客户端付款未完成时以某种方式终止服务器。
请注意,该服务器将在我们客户财产上的现有计算机上运行,或者我们将运送一个设备插入墙上来运行该服务器。
我们遇到的另一个问题是,这些服务器出于特定原因使用计算机视觉模型,并且为了降低我们这边的成本(并降低我们服务的价格),我们认为,而不是在某个位置创建推理端点在云中,可能有一种方法可以让模型本身保留在服务器代码中,但有一种方法可以隔离它们或加密它们,以便客户端(或外部实体)无法利用它们。
我尝试创建一个包含所有代码的 Docker 容器,以便稍后使用 Docker Swarm 等进行分发,但是该服务器需要访问计算机的网络并在其中执行一些其他操作,尽管我已经设法获取它有点工作,有些功能似乎不受支持,所以我正在寻找其他方法。
考虑将其打包在 PyPi 中,或者简单地发送一个 .zip,其中包含一个许可证密钥,我们稍后将其映射到每个客户端,以便根据需要删除对 Supabase 的访问,但客户端仍然拥有代码,并且会仍然能够访问其中的模型。
我尝试过 Google AI Vertex 和 Beam 来部署我们的模型并公开推理端点,但我们可能需要一些模型 24/7 运行,而成本非常高。
我们可以通过什么方式分发这个服务器以及所有代码 与此相关,对于我们所有的客户,实现以下目标:
服务器仅在购买订阅后分发,并且服务器 订阅付款未完成后终止或完全删除 经历过;
您可以控制订阅者何时以及如何访问您的应用程序,例如购买后下载等 - 并且您可以提供多个打包和部署选项 - 但您不会拥有相同级别的撤销控制权 - 一旦位于其他人的网络上,您的控制权就受到限制。
您可以将“Phone Home”API 回调添加到您托管的 API,这会在以下情况下禁用应用程序:
PhoneHome: SubscriberStatus = UnPaid
您可以添加更多更激烈的功能 - 例如删除内部系统数据(如果这种情况发生在 3 个连续付款周期或其他情况下)。
如果应用程序无法成功进行 API 调用,您还可以让应用程序采取措施来保护自身。
所有这些都假设客户端无法访问您的应用程序的代码来重写它,或者伪造 API 响应,以便您的应用程序认为它正在成功打电话回家。
每当我们发布新版本时能够更新服务器的代码 更新;
我不知道在实践中如何做到这一点,从来没有这样做过。 我想网上有关于这样做的策略的很好的信息,即使它们不是特定于 Python 的。