将 Reflex 应用部署到 Databricks Apps:GitHub 接入、单端口配置与 Unity Catalog 权限完整指南
2026/9/11 19:42:36 网站建设 项目流程

将 Reflex 应用部署到 Databricks Apps:GitHub 接入、单端口配置与 Unity Catalog 权限完整指南

【免费下载链接】reflex🕸️ Web apps in pure Python 🐍项目地址: https://gitcode.com/GitHub_Trending/re/reflex

本指南以官方托管文档 docs/hosting/databricks.md 为核心,完整讲解如何把基于 Reflex(纯 Python Web 框架)构建的应用部署到 Databricks Apps 平台:从 Git 仓库接入、app.yaml应用配置、Enterprise 单端口模式改造,到 SQL Warehouse 与 Unity Catalog 权限授予和增量更新发布。读完本文,你将能独立完成一次可运行的 Databricks 托管部署,并理解$DATABRICKS_APP_PORTuse_single_port在底层如何协同工作。

为什么选择 Databricks Apps 承载 Reflex 应用

Databricks 是面向数据湖仓的统一分析与 AI 平台,其Apps服务允许用户把 Web 应用直接运行在 Databricks 工作区内部。对 Reflex 开发者而言,这意味着:

  • 应用可以直接运行在靠近数据的地方,通过DATABRICKS_WAREHOUSE_IDDATABRICKS_CATALOGDATABRICKS_SCHEMA等环境变量就近访问 SQL Warehouse 与 Unity Catalog 中的表;
  • 复用 Databricks 现有的身份体系与服务主体(Service Principal),无需额外管理服务器;
  • 部署、更新、日志查看都在同一个工作区内完成,运维链路短。

需要说明的是,本文讨论的是将 Reflex 应用部署到 Databricks Apps;而 Databricks 作为数据源被 Reflex 应用调用(OAuth / Service Principal 连接、SQL 查询、仪表盘构建)属于另一类集成场景,可参考仓库中的 packages/integrations-docs 集成文档,两者可以组合使用,但本指南聚焦前者。

前提条件

开始前请确认已具备以下条件:

条件说明
Databricks 工作区已启用 Unity Catalog(DATABRICKS_CATALOG/DATABRICKS_SCHEMA的授权均依赖 Unity Catalog 权限模型)
GitHub 仓库存放 Reflex 应用的源码,Databricks 通过 Git 文件夹(Git folder)接入
Reflex Enterprise 许可证单端口部署依赖reflex-enterprise包,必须持有 Enterprise 授权(详见后文“启用单端口部署”)

Step 1:连接你的 GitHub 仓库

Databricks 通过Git 文件夹将外部仓库挂载进工作区,这是后续构建应用时的代码来源:

  1. 登录进入 Databricks 工作区;
  2. 进入你的用户目录(User directory);
  3. 点击CreateGit folder
  4. 粘贴存放 Reflex 应用的 GitHub 仓库 URL。

完成挂载后,仓库内容会出现在你的用户目录下,可以在后续部署时直接作为代码路径引用。

Step 2:配置应用设置

创建配置文件app.yaml

关键约束app.yaml必须直接在 Databricks 内创建,而不是提交到 GitHub 仓库中。它属于部署侧的运行配置,与源码解耦。

在 Databricks 的 Notebook / 文件编辑界面中新建app.yaml,内容如下:

command: [ "reflex", "run", "--env", "prod", "--backend-port", "$DATABRICKS_APP_PORT" ] env: - name: "HOME" value: "/tmp/reflex" - name: "REFLEX_ACCESS_TOKEN" value: "your-token-here" - name: "DATABRICKS_WAREHOUSE_ID" value: "your-sql-warehouse-id" - name: "DATABRICKS_CATALOG" value: "your-catalog-name" - name: "DATABRICKS_SCHEMA" value: "your-schema-name" - name: "REFLEX_SHOW_BUILT_WITH_REFLEX" value: 0

各字段的含义与注意事项:

  • command:Databricks Apps 启动容器时执行的命令。这里以生产模式(--env prod)启动 Reflex,并将后端端口绑定到 Databricks 平台注入的动态端口$DATABRICKS_APP_PORT。不要硬编码端口号,平台每次部署分配的端口可能不同。
  • env.HOME:将应用主目录设置为/tmp/reflex,避免在容器内使用不可写的默认主目录导致初始化失败。
  • env.REFLEX_ACCESS_TOKEN:用于 Reflex Cloud 认证的令牌,替换为实际生成的 token(见下文“获取所需令牌”)。
  • env.DATABRICKS_*:连接 SQL Warehouse 与 Unity Catalog 所需的资源定位信息。
  • env.REFLEX_SHOW_BUILT_WITH_REFLEX:控制是否显示 Reflex 品牌标识,Enterprise 专属,0关闭、1开启。

获取所需令牌与资源标识

1. Reflex Access Token

  1. 访问仓库中的 Reflex Cloud Tokens 文档(对应线上路径/docs/hosting/tokens);
  2. 进入Account Settings → Tokens
  3. 创建新令牌并复制其值;
  4. 替换app.yaml中的your-token-here

关于令牌的使用,docs/hosting/tokens.md 给出了一些值得注意的实践:token 可以在支持--token的命令中使用,或通过REFLEX_ACCESS_TOKEN环境变量传递;令牌由创建者持有,建议按用途单独创建并设置过期时间,长期自动化建议改用组织级 Service Account;切勿将令牌提交到代码库或日志中。

2. Databricks 资源标识

  • DATABRICKS_WAREHOUSE_ID:你的 SQL Warehouse 标识(在 Databricks 的 SQL Warehouses 页面查看连接详情可获得);
  • DATABRICKS_CATALOG:目标目录(catalog)名称,如main
  • DATABRICKS_SCHEMA:目标 schema 名称,如default

Step 3:启用单端口部署

Databricks Apps 只暴露一个端口给应用,而 Reflex 默认前后端分离运行(前端 Vite/静态服务与后端 ASGI 服务各占一个端口,见 reflex/reflex.py 中frontend_port/backend_port的处理逻辑)。因此需要将应用改造为单端口模式,让后端通过代理挂载到前端端口上。

更新rxconfig.py

import reflex as rx import reflex_enterprise as rxe rxe.Config(app_name="app", use_single_port=True)

use_single_port=True会通过把后端代理到前端端口的方式,让应用只监听一个端口。该功能对应仓库 docs/enterprise/single-port-proxy.md 描述的机制,且被列为 Reflex Enterprise 的核心部署特性(见 docs/enterprise/overview.md 中 featureuse_single_port的说明:"Enable single-port deployment by proxying backend to frontend")。

更新应用入口文件

将定义rx.App的地方改为使用 Enterprise 版:

import reflex_enterprise as rxe app = rxe.App( # your app configuration )

补充依赖

同时,在requirements.txt中追加:

reflex-enterprise asgiproxy

asgiproxy负责把 ASGI 后端请求代理到单端口,是单端口模式下后端可被外部访问的关键依赖。安装完成后,reflex-enterprisereflex需同时存在,才能启用上述企业特性。

底层视角:为什么$DATABRICKS_APP_PORT+ 单端口配置缺一不可?从源码看,Reflex 在_run中校验生产模式下的端口一致性——当运行环境为PROD且同时指定了--frontend-port--backend-port时,两者若不相同会直接报错退出(reflex/reflex.py);而_run_prod则会主动将frontend_portbackend_port设置为同一个端口,并在该端口上同时提供前端静态资源与后端 API(reflex/reflex.py)。因此,Databricks 场景下把--backend-port指向平台注入的$DATABRICKS_APP_PORT,正是让单端口模式与平台端口分配机制正确对接的关键。

Step 4:创建 Databricks App

  1. 进入ComputeApps
  2. 点击Create App
  3. 选择Custom App
  4. 为应用配置 SQL Warehouse(应用运行期间用于查询 Unity Catalog 数据)。

Step 5:设置权限

如果使用samplesCatalog,可跳过本节——该目录预置了足够的公共访问权限。使用自有 Catalog / Schema 时必须完成以下授权,否则应用在运行时会出现权限错误。

Catalog 权限

  1. 进入Catalog,选择你的目标 catalog;
  2. 打开Permissions
  3. 添加应用对应的service principal用户;
  4. 授予以下权限:
    • USE CATALOG:允许访问该目录;
    • USE SCHEMA:允许访问其中的 schema。

Schema 权限

  1. 进入具体的 schema;
  2. 打开Permissions
  3. 授予以下权限:
    • USE SCHEMA
    • EXECUTE:允许执行 SQL / 函数;
    • SELECT:允许读取表数据;
    • READ VOLUME(如需要):允许读取卷(Volume)中的文件。

权限粒度说明:catalog 层决定“能否进入”,schema 层决定“能做什么操作”,两者叠加构成了应用对 Unity Catalog 资源的最终访问边界。若应用还需要写入数据或管理表,应在此基础上按最小权限原则追加相应授权。

Step 6:部署应用

  1. 发起部署:在 Apps 界面点击Deploy,当提示提供代码路径时,选择前面创建的 Git 文件夹路径或对应的仓库文件夹;
  2. 监控部署:部署会自动开始,此时应留意部署日志,排查配置错误(如 token 无效、端口配置缺失、依赖安装失败等)。

更新你的应用

每次在 GitHub 上提交新代码后,按以下流程同步到 Databricks:

  1. 拉取最新代码:在部署界面点击Deployment Source,选择main分支,点击Pull从 GitHub 拉取最新更改;
  2. 重新部署:再次点击Deploy应用更新。

注意:更新流程需要手动触发,不会自动监听 GitHub 的推送事件;app.yaml中的环境变量变更同样需要通过重新部署生效。

配置参考:环境变量一览

下表汇总了app.yaml中全部环境变量的作用与示例值,供排错与扩展时查阅:

环境变量说明示例
HOME应用主目录/tmp/reflex
REFLEX_ACCESS_TOKEN用于 Reflex Cloud 的认证令牌rx_token_...
DATABRICKS_WAREHOUSE_IDSQL Warehouse 标识自动分配
DATABRICKS_CATALOG目标 catalog 名称main
DATABRICKS_SCHEMA目标 schema 名称default
REFLEX_SHOW_BUILT_WITH_REFLEX是否显示 Reflex 品牌标识(仅 Enterprise)01

Troubleshooting:常见问题排查

  • 权限错误(Permission Errors):逐一核对 catalog 层(USE CATALOGUSE SCHEMA)与 schema 层(USE SCHEMAEXECUTESELECTREAD VOLUME)的授权是否齐全,且授予对象是否为应用对应的 service principal;使用samplescatalog 可快速验证是否为权限问题。
  • 端口问题(Port Issues):确认command中使用了$DATABRICKS_APP_PORT,且应用已切换为单端口配置(use_single_port=True+rxe.App)。回顾上文源码分析,生产模式下前后端端口不一致会导致启动失败。
  • 令牌问题(Token Issues):检查REFLEX_ACCESS_TOKEN是否有效、是否已过期、权限范围是否覆盖所需资源;可参考 docs/hosting/tokens.md 重新生成并妥善保存。
  • 部署失败(Deployment Failures):查看部署日志中的具体报错信息;常见诱因包括requirements.txt缺少reflex-enterprise/asgiproxy、依赖版本不兼容、HOME目录不可写等。

关键注意事项

  • 单端口部署要求 Reflex Enterprise 许可证,use_single_portrxe.App均为reflex-enterprise包提供的特性;
  • app.yaml必须直接在 Databricks 中创建,而不是从 GitHub 推送——它属于部署平台侧的运行配置;
  • 应用更新需要从部署界面手动 Pull 最新分支再重新部署,GitHub 上的提交不会自动触发发布;
  • 令牌属于敏感信息,务必通过平台的密钥管理能力保管,不要提交到仓库或写入日志。

【免费下载链接】reflex🕸️ Web apps in pure Python 🐍项目地址: https://gitcode.com/GitHub_Trending/re/reflex

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询