现在存在许多开源的OpenAI解决方案,为了尽量避免修改源代码,直接接入Azure OpenAI。可以考虑使用Azure OpenAI代理方案,它可以实现以OpenAI的API方式去管理Azure的OpenAI实例。
几乎全部的这种方案,都会提示使用容器来部署。类似下面的命令执行。
由于我本身没有容器相关的知识背景,这篇学习笔记也是为了加强记忆。
docker pull yidadaa/chatgpt-next-web
docker run -d -p 3000:3000 \
-e OPENAI_API_KEY="sk-xxxx" \
-e CODE="your-password" \
yidadaa/chatgpt-next-web
Azure容器应用/实例
考虑到零基础学习,我采用了Azure自带的服务去进行部署。
容器实例(Azure Container Instances)是Azure云平台上的一项服务,用于快速部署和运行容器化应用程序。它提供了一种简单、快速且无服务器的方式来运行单个容器实例,无需管理底层的虚拟机基础结构。
通过使用容器实例,你可以快速部署和运行容器化的应用程序,无需关注底层的基础设施管理,从而提高开发和部署的效率。容器实例还可以与其他Azure服务进行集成,如Azure存储、Azure虚拟网络等,以构建更复杂的应用场景。
容器应用(Azure Container Apps)是Azure云平台上的一项服务,用于部署、管理和运行复杂的容器化应用程序。它提供了完整的容器编排和管理功能,使开发人员和运维团队能够更好地管理多个容器实例,并实现高可用性、弹性伸缩和负载均衡等特性。
容器应用建立在Kubernetes容器编排引擎之上,为用户提供了一种托管式的Kubernetes服务。Kubernetes是一个开源的容器编排平台,它可以自动化地管理和调度容器化应用程序,并提供高可用性、弹性伸缩、自动负载均衡等功能。容器应用提供了一些额外的功能,如自动伸缩、负载均衡、监控和日志等。自动伸缩功能可以根据应用的负载情况自动调整容器实例的数量,以满足不同的流量需求。负载均衡功能可以将流量均匀分发给多个容器实例,提高应用程序的可用性和性能。监控和日志功能可以帮助你监控应用程序的运行状态,并收集和分析容器的日志数据。
粗略来看,两者都是提供容器服务的一种服务,但是实际应用的角度来说,对于初学者而言,容器应用更合适一些。
这是因为容器应用可以图形化的去配置证书、自定义域、cors等信息。基本都可以依靠点点点的方式来处理。
配置过程
下面是一个简单的配置过程,以这一段docker的配置举例,翻译成在容器应用中的操作。
docker pull yidadaa/chatgpt-next-web
docker run -d -p 3000:3000 \
-e OPENAI_API_KEY="sk-xxxx" \
-e CODE="your-password" \
yidadaa/chatgpt-next-web
容器应用(Azure Container App)配置过程:
- 登录到Azure门户(https://portal.azure.com)。./)
- 在左侧导航栏中,选择“容器应用”。
- 点击“+ 创建”按钮,开始创建容器应用。
- 在“基本”选项卡中,填写以下信息:
- 订阅:选择你的订阅。
- 资源组:选择或创建一个资源组。
- 应用名称:输入应用的名称。
- 区域:选择容器应用所在的区域。
- 在“映像和标记”选项卡中,填写以下信息:
- 映像位置:选择“公共”。
- 映像:输入
yidadaa/chatgpt-next-web
。
- 在“环境变量”选项卡中,点击“+ 添加环境变量”按钮,添加一个环境变量。
- 名称:输入
OPENAI_API_KEY
。 - 值:输入
sk-xxxx
。 - 依次输入所有的环境变量
- 在“端口”选项卡中,可以添加端口映射。
- 在“高级”选项卡中,可以配置容器应用的高级设置,如CPU、内存等。
- 点击“下一步: 网络”按钮。
- 在“网络”选项卡中,可以配置容器应用的网络设置。
- 点击“下一步: 完成”按钮。
- 在“查看 + 创建”选项卡中,确认配置信息,并点击“创建”按钮来创建容器应用。
从配置过程来看,容器应用需要配置的过程和直接使用docker相似。但是因为整个应用是自动启动的,所以不需要运行docker run
,应用本身也是启动的。
特别注意
特别需要注意,国内用户很可能无法直接使用 容器应用的默认应用程序url,类似https://gptnextxxxxxxxxx。astasia.azurecontainerapps.io
这种地址。国内对此类地址有DNS污染,包括不限于错误的地址引导,错误的证书等。为了解决这个问题,必须要使用自定义域功能,指定到一个自己的域名上。
本身配置比较简单,熟悉流程后操作并不复杂。
- 配置自定义域:
- 在Azure门户中,导航到你的Web App容器实例资源组。
- 找到你的Web App容器实例资源,点击进入。
- 在左侧导航栏中,选择"自定义域"。
- 点击"添加自定义域"按钮。
- 在弹出窗口中,输入你的自定义域名,并选择"使用SSL"选项。
- 如果你有SSL证书,可以选择上传证书;否则,可以选择Azure提供的免费SSL证书。
- 点击"添加"按钮完成自定义域的配置。
- 配置DNS解析:
- 在域名注册商的控制台中,添加DNS解析记录,将域名解析到Azure Web App容器实例的公共IP地址。
- 此处需要注意,需要添加cname和txt两条记录
- 验证配置:
- 使用浏览器访问你的自定义域名,应该能够正常访问到Azure Web App容器实例。
- 常规而言,证书生效在10分钟内。
至此,你应该获得了一个类似于https://xxx.xxx.xx
的容器应用,根据实际需求进行使用即可。
费用对比
Azure的容器应用(Azure Container App)和容器实例(Azure Container Instances)的计费方式有以下不同点:
- 单位:Azure容器应用的计费单位是应用服务计划(App Service Plan),而容器实例的计费单位是每秒钟的实例使用时间。
- 预配资源:Azure容器应用需要预先创建应用服务计划,其中包含一定数量的虚拟机实例和资源分配,而容器实例无需预先创建资源,按需分配。
- 持续运行:Azure容器应用是持续运行的应用服务,按照应用服务计划的定价进行计费。而容器实例是按照实例的使用时间计费,只在需要时启动和运行。
- 容器应用拥有更小的实例(0.25核、0.5G),而容器实例是(1核、1G),因此小规模而言,用容器应用也会更加方便。
作者简介
九叔,《微软SystemCenter2012R2私有云部署实战》图书作者,往届微软MVP,关注云和PowerShell。
免责
本文仅代表个人观点,不代表任何组织、机构或公司的立场。所提供的信息仅供参考和一般性信息之用途。尽管本文力图提供准确、全面的信息,但不能保证其准确性、完整性、及时性或适用性。
读者在采取本文提供的任何行动或依赖所包含的信息时,应自行承担风险。作者和OpenAI不对任何直接或间接引起的损失或损害承担责任。
本文中提到的任何产品、服务、公司或组织的商标、标识、图像等知识产权归其各自所有者所有。
读者应自行进行进一步的研究和咨询,以便做出明智的决策。对于任何与本文相关的具体问题,请咨询相关领域的专业人士或权威机构。
最后,本文的目的是提供一般性信息,并不构成任何形式的专业建议。读者在使用本文提供的信息时应行使谨慎和判断力。
感谢阅读本文,并理解其中的免责声明。