当前位置: 首页 > news >正文

[VoiceRAG] Azure | 使用`azd`部署应用 | Dockerfile

第6章:Azure部署

在之前的旅程中,我们构建了一个强大的AI语音助手

从第1章:知识库配置(集成向量化)创建智能知识库开始,到第2章:RAG工具集为AI配备检索与引用工具,再通过第3章:RTMiddleTier(实时中间层)协调实时对话。前端方面,第4章:浏览器音频处理实现了浏览器音频能力,第5章:前端实时通信(useRealTime钩子)建立了前后端实时通信

现在,这个应用已经完成,最后关键一步是:如何将它从本地计算机发布到云端,让全球用户可靠访问

这就是使用Azure开发者CLI(azd)进行Azure部署的意义。

问题:应用上云困难重重

想象你建造了一座梦幻房屋(你的应用),配有图书馆、智能助手和最新科技。但目前它只是后院的设计图和材料堆。要让它成为可参观的真实住宅,你需要:

  1. 土地(云资源):购买土地(Azure服务如服务器、数据库、AI服务)
  2. 施工队:需要专业人员打地基、砌墙、布线、安装智能设备
  3. 搬迁部署:将家具(代码)搬入房屋并启动所有设备
  4. 运维保障:确保可靠运行且易于更新

手动完成这些步骤极其复杂且易出错。你需要逐个创建数十个Azure服务,正确配置它们,再费力将代码部署到正确位置——这简直是噩梦

解决方案:Azure开发者CLI(azd)——总建筑师

Azure开发者CLI(azd如同你的Azure总建筑师。它根据项目蓝图(azure.yaml、基础设施即代码文件和Dockerfile),自动配置所需Azure资源、部署代码,并将整个应用运行在云端。无需手动操作数十个步骤,azd能:

  • 打包代码
  • 创建所有必需的Azure服务(如Azure容器应用、Azure AI搜索、Azure OpenAI)
  • 启动前后端代码

只需几条命令,azd就能将复杂应用部署到Azure。

使用azd部署应用

让我们一步步使用azd部署aisearch-openai-rag-audio项目到Azure。

步骤1:登录Azure

首先,azd需要知道你的身份和要使用的Azure订阅。

azd auth login

说明:此命令将打开浏览器,提示你登录Azure账户。登录后,azd便获得创建资源的权限。

步骤2:创建azd环境

azd环境帮助组织部署,例如开发、测试或生产环境。

azd env new

说明:此命令要求命名环境(如myvoiceragapp)。该名称通常用作Azure资源名称的一部分,确保唯一性。同时会在本地创建.azure/<env-name>文件夹存储环境特定设置。

步骤3:配置资源并部署应用(azd up

这个神奇的命令完成了大部分繁重工作。azd up结合了两个主要操作:资源调配(创建Azure资源)和部署(上传代码)。

azd up

说明

  • azd读取项目蓝图(azure.yamlinfra文件夹)
  • 要求选择Azure区域(以及Azure OpenAI的特定可用区域)
  • 创建所有必需的Azure服务:
    • Azure容器应用:运行后端(Python)和前端(React)代码
    • Azure AI搜索:智能知识库(第1章)
    • Azure OpenAI:生成嵌入和AI响应(第1章、第2章、第3章)
    • Azure Blob存储:存储源文档(第1章)
    • 其他支持资源如Log Analytics
  • 调配完成后,构建应用的Docker镜像(Dockerfile)并部署到Azure容器应用
  • 最后运行"后调配"脚本,通过上传文档和触发索引器完成知识库配置(集成向量化)
  • 完成后,输出部署应用的URL!

步骤4:清理(如需)

如需删除azd创建的所有Azure资源以避免持续费用,可运行:

azd down

说明:此命令安全删除与azd环境关联的所有Azure资源,是管理云支出的关键步骤。

底层原理:总建筑师工具包

让我们看看azd如何知道该构建什么以及如何部署。它依赖于项目中的几个关键文件:

1. 总体规划:azure.yaml

此文件是azd的主要蓝图,告诉azd应用的各个部分(称为"服务")及其部署方式。

# azure.yaml
name: aisearch-openai-rag-audio
services:backend:project: ./applanguage: pyhost: containerappdocker:remoteBuild: true
hooks:postprovision:windows:shell: pwshrun: ./scripts/write_env.ps1; ./scripts/setup_intvect.ps1interactive: trueposix:shell: shrun: ./scripts/write_env.sh; ./scripts/setup_intvect.sh

说明

  • name:项目名称
  • services:定义应用的不同逻辑部分。这里有一个backend服务
    • project: ./app:服务代码位置(app文件夹)
    • language: py:标识为Python项目
    • host: containerapp:指定部署到Azure容器应用
    • docker: remoteBuild: true:在云端而非本地构建Docker镜像
  • hooks: postprovisionazd在创建Azure资源后运行的脚本
    • ./scripts/write_env.sh:从新建的Azure资源收集连接详情(如端点和API密钥),写入后端的.env文件
    • ./scripts/setup_intvect.sh:使用这些环境变量运行知识库配置(集成向量化)流程(通过app/backend/setup_intvect.py),在Azure AI搜索中准备文档

2. 打包指令:app/Dockerfile

Dockerfile包含将应用打包为标准容器镜像的指令。该镜像可在任何地方(包括Azure容器应用)一致运行。

# app/Dockerfile(简化)
# 阶段1:构建前端(React应用)
FROM node:20-slim AS build-stage
COPY frontend ./
WORKDIR /frontend
RUN npm install
RUN npm run build# 阶段2:用Python后端服务构建好的应用
FROM python:3.12-slim AS production-stage
WORKDIR /app
COPY --from=build-stage /frontend/dist /app/static # 复制构建好的前端
COPY ./backend/ /app # 复制后端Python代码
RUN python -m pip install -r requirements.txt # 安装Python依赖
CMD ["python3", "-m", "gunicorn", "app:create_app", "-b", "0.0.0.0:8000", "--worker-class", "aiohttp.GunicornWebWorker"]

说明:此Dockerfile采用两阶段构建:

  1. 使用Node.js镜像构建React前端
  2. 使用Python镜像,复制构建好的前端文件和后端代码,安装Python依赖,最后设置运行Python后端服务器的命令。这个组合镜像包含前后端代码,可在单个容器中运行。

3. 自动化部署流程:.github/workflows/azure-dev.yml

虽然azd up适合本地开发,但你通常希望代码变更时自动部署。这由GitHub Actions工作流处理。

# .github/workflows/azure-dev.yml(简化)
name: 使用azd部署到Azureon:push:branches:- main # 推送变更到'main'分支时触发此工作流jobs:build:runs-on: ubuntu-latestenv: # azd的重要环境变量AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}# ... 其他AZURE_TENANT_ID, AZURE_SUBSCRIPTION_ID等 ...steps:- name: 检出代码uses: actions/checkout@v4- name: 安装azduses: Azure/setup-azd@v2- name: 使用Azure联合凭证登录run: azd auth login --client-id "$Env:AZURE_CLIENT_ID" --federated-credential-provider "github" --tenant-id "$Env:AZURE_TENANT_ID"shell: pwsh- name: 调配基础设施run: azd provision --no-prompt- name: 部署应用run: azd deploy --no-prompt

说明

  • on: push: branches: - main:当代码推送到main分支时触发此工作流
  • steps:GitHub Actions执行的命令
    • 检出代码
    • 安装azd
    • 使用联合凭证安全登录Azure(无需在GitHub中直接存储密钥)
    • azd provision --no-prompt:创建或更新Azure资源。--no-prompt使其适合自动化工作流
    • azd deploy --no-prompt:构建Docker镜像(使用Dockerfile)并推送到Azure容器应用

azd的完整部署流程

以下是运行azd up或触发GitHub工作流时的序列:

在这里插入图片描述

总结

在这最后一章中,我们了解了Azure开发者CLI(azd)如何作为总建筑师,自动化将整个aisearch-openai-rag-audio应用部署到Azure的复杂流程。

azure.yaml为蓝图,Dockerfile为打包工具,以及强大的azd命令(手动或通过GitHub Actions),可以无缝调配所有必要的云资源,并轻松部署前后端代码。

使得实时AI语音助手能够可靠运行,并被全球用户访问。

至此,我们已经涵盖了aisearch-openai-rag-audio项目的所有核心概念,从建立智能知识库到实时音频通信,再到自动化云部署。对这个尖端应用有了全面的理解~

END ★,°:.☆( ̄▽ ̄)/.°★

http://www.dtcms.com/a/465374.html

相关文章:

  • Docker 环境下 GeoPandas/Fiona 报错
  • Docker简易教程
  • vps 网站发布直播软件app下载免费
  • DORIS 服务器宕机重启后出现的问题
  • 网络安全审计技术原理与应用
  • 手机上做网站南宁品牌网站设计公司
  • 第五部分:VTK高级功能模块(第135章 Imaging模块 - 图像处理类)
  • 如何通过 5 种有效方法同步 Android 和 Mac
  • AJAX 知识篇(2):Axios的核心配置
  • 招商网站建设公司申请注册商标的流程
  • 网页美工课程seo网站优化师
  • 海外关键词规划SEO工具
  • AI学习日记——卷积神经网络(CNN):卷积层与池化层的实现
  • iOS 26 系统流畅度实战指南|流畅体验检测|滑动顺畅对比
  • JS中new的过程发生了什么
  • 系统白名单接口添加自定义验证(模仿oauth2.0),防安全扫描不通过
  • 校园服装网站建设预算手机软件应用市场
  • 【AI论文】ExGRPO:从经验中学习进行推理
  • 连接两个世界:QIR——量子-经典混合计算的编译器桥梁
  • 怎样制作网页链接教程狼雨seo教程
  • 第1章:初识Linux系统——连接网络NAT模式
  • CSS3 动画:从入门到精通
  • 在JavaScript / HTML中,所有转义字符(字符实体)
  • shopnc本地生活o2o网站源码网站开发软件怎么做
  • Vue3+socket.io 项目本地vite配置
  • wangEditor
  • Unity网络开发--超文本传输协议Http(1)
  • 从“用框架”到“控系统”——数据流、事件流、接口边界是如何形成的;
  • 有没有什么网站做泰国的东西做网站排名软件
  • 达梦数据库逻辑备份与还原