Reflex Build 应用源码下载与本地自托管:Download App 完整指南
【免费下载链接】reflex🕸️ Web apps in pure Python 🐍项目地址: https://gitcode.com/GitHub_Trending/re/reflex
导读
Download(下载)是 Reflex Build(Reflex 的 AI Builder 平台)中"应用生命周期"管理的关键动作之一:它为当前应用生成一份一次性的源码导出包,供你在本地继续开发或迁移到自托管环境。本文基于 download_app.md 展开,并结合仓库中reflex export的 CLI 实现(reflex/reflex.py、reflex/utils/export.py)以及自托管、Secrets、Git 集成等配套文档,讲清下载产物里有什么、哪些值不会被打包、下载后如何接续开发与部署。读完你可以完整掌握"从 Reflex Build 下载 → 本地运行 → 接回源码控制"的端到端流程。
一、下载源码:操作入口与步骤
1.1 两个入口
下载动作在 Reflex Build 中有两个等效入口:
- Deploy 按钮旁的菜单:打开应用页面右上角Deploy旁边的更多菜单(more menu),选择Download。
- 应用 Settings(设置)页:从应用的更多菜单进入Settings,在"Reuse and Export(复用与导出)"区域同样提供下载入口。
这一点与 Copy App 一致——Copy与Download两个动作都出现在 Settings 中,Deploy 菜单则同时提供两者的快捷入口,参见 General App Settings。
1.2 执行步骤
- 打开Deploy旁边的菜单。
- 选择Download(该动作同样可以在应用Settings中找到)。
- 保存并解压生成的归档文件。
下载即触发一次"一次性导出"(one-time source export),目的是为本地开发(local development)或自托管(self-hosting)提供可移植的源码副本。
说明:Download 与 Deploy App 不同——Deploy 是将当前应用发布到 Reflex Cloud 或已连接的云厂商;Download 则是把源码完整取回本地,后续由你自己决定如何运行和部署。
二、归档里有什么:一次导出包含的完整内容
根据文档,下载得到的归档包含四类内容,足以支撑脱离 Build 平台继续开发:
| 内容 | 说明 |
|---|---|
| 应用源码(app source) | 应用的全部 Python 代码,即页面、组件与状态逻辑 |
| 资源文件(assets) | 应用中引用的静态资源,例如图片、字体、favicon.ico、robots.txt等 |
| 依赖清单(dependency manifests) | 锁定项目依赖的清单文件,例如仓库中示例应用使用的 app/reflex.lock/bun.lock 与 app/reflex.lock/package.json,以及 Python 侧的pyproject.toml/requirements.txt |
| Reflex 配置(Reflex configuration) | 项目根目录的rxconfig.py(如 app/rxconfig.py),保存app_name、api_url、frontend_port/backend_port等运行参数 |
源码级印证:导出机制的底层实现
"把应用编译、构建并打包"这一整套能力在仓库中对应reflex exportCLI 命令与其底层实现 reflex/utils/export.py 中的export()函数。从 reflex/reflex.py#L595-L690 的命令定义与实现看,一次导出会依次完成:
- 编译生产版本应用:调用
prerequisites.get_compiled_app(prerender_routes=ssr, trigger="export")确保模块可导入且执行app.compile(); - 搭建前端:调用
build.setup_frontend(Path.cwd())准备.web目录并安装前端依赖; - 构建:调用
build.build()生成前端产物; - 打包:调用
build.zip_app(...)将前端(frontend)与后端(backend)打包为 zip(frontend.zip/backend.zip),对应参数zipping、frontend、backend、zip_dest_dir。
整个过程会通过telemetry.send("export", ...)上报编译、构建、打包各阶段耗时,详见 reflex/utils/export.py#L74-L117。可以推断,Reflex Build 平台上的Download动作正是这套导出能力在云端侧的呈现——把"编译好的应用源码 + 资产 + 依赖 + 配置"聚合为一份可下载的归档。
CLI 导出参数速查(本地项目同样适用)
如果你在本地直接操作 Reflex 项目,reflex export命令提供了更细粒度的控制,常见参数如下(见 reflex/reflex.py#L595-L690):
| 参数 | 作用 |
|---|---|
--zip/--no-zip | 是否将前后端导出打包为 zip,默认--zip;--no-zip时前端产物落在.web/build/client/,后端源码保留在项目根目录 |
--frontend-only/--backend-only | 只导出前端或只导出后端(二者互斥) |
--zip-dest-dir | zip 文件输出目录,默认当前工作目录 |
--exclude-from-backend | 从后端 zip 中排除指定文件或目录,可重复使用 |
--ssr/--no-ssr | 是否启用前端服务端渲染(SSR),默认开启 |
--env | 导出环境,可选dev/prod,默认prod |
自托管文档也印证了导出产物的用途,详见 self-hosting.md:API_URL=http://app.example.com:8000 reflex export会生成可直接上传静态托管服务的frontend.zip(含压缩后的 HTML、JavaScript、CSS)以及包含后端 Python 代码的backend.zip。
三、不会被导出的部分:Secrets 与受保护项目值
下载归档是"可移植源码",但不是完整的环境快照。文档明确强调:
Secrets、集成凭据(integration credentials)以及其他受保护的项目值,不是源码导出的可移植部分。必须在目标环境中单独配置,并且绝不提交到源码控制。
这是下载功能最重要的安全边界:
- 导出包内不含API 密钥、数据库连接串、Token、OAuth 凭据等敏感值;
- 拿到归档后,你需要在本地/自托管环境自行配置这些环境变量,否则应用运行时会因缺少凭据而失败;
- 任何时候都不要把敏感值写入源码文件或提交进 Git。
关于凭据的正确管理方式,参见 Secrets and Environment Variables:
应用内读取:后端 Python 代码用
os.environ读取,例如:import os database_url = os.environ["ASYNC_DB_URL"]部署时注入:通过 CLI 传参注入,例如:
reflex deploy --project <project-id> --envfile .env reflex deploy --project <project-id> --env OPENAI_API_KEY=<value>多个值可重复使用
--env;同时提供--envfile与--env时,--envfile中的值优先。Deployments 面板管理:已部署应用可在Deployments → Settings → Secrets中搜索、编辑环境变量,支持
NAME=value原始编辑器,并可选择是否重启应用使变更立即生效;开启Sensitive模式后,团队成员将无法查看、编辑或删除这些值(可用性与修改权限取决于组织套餐与项目权限)。
对于下载后的本地运行,还可在rxconfig.py中通过rx.Config(api_url=...)或运行时环境变量API_URL注入后端地址(参见 self-hosting.md)。多环境场景下,也可以用 Cloud Config File 中的envfile字段(如.env.production)区分开发/预发/生产配置。
四、下载之后:本地开发与自托管接续
下载归档解压后,你可以把它当作一个普通 Reflex 项目对待。核心接续步骤:
4.1 配置后端地址
编辑rxconfig.py,将api_url设置为公网可达的服务器地址(带:8000端口),这是前端与后端状态交互的前提:
config = rx.Config( app_name="your_app_name", api_url="http://app.example.com:8000", )也可以运行时通过环境变量API_URL覆盖,从而保留本地开发默认值。若需将后端挂在反向代理子路径下(如 nginx 的/api/*),应使用backend_path配置而非把前缀写进api_url,详见 self-hosting.md。
4.2 生产模式运行
reflex run --env prod生产模式生成优化构建:默认静态前端(HTML/JS/CSS)暴露在3000端口,后端(事件处理器)监听8000端口。由于后端使用 WebSocket,nginx、Apache 等反向代理需配置传递Upgrade头。
4.3 容器化自托管(可选)
仓库的 docker-example/README.md 提供了多种容器化部署参考:
- simple-two-port:最基础的双端口生产部署,依赖既有负载均衡转发流量;
- simple-one-port:静态导出前端并用 Caddy 以单端口服务;
- production-compose:单台 VPS 上一站式
compose.yaml,包含 Web 服务器、一个或多个后端实例、Redis 与 PostgreSQL; - production-app-platform:面向 Azure、AWS、Google Cloud Run 等应用托管平台的后端镜像。
构建前需在项目根目录放置requirements.txt(包含reflex包)并更新rxconfig.py的api_url为浏览器可直接访问的外部地址。
五、接回源码控制:Download 与 Git 集成的分工
Download 是一次性导出,适合"取走一份快照";如果你需要持续的版本管理,应使用 Git 集成,而不是反复手动下载:
- 连接 GitHub(
reflex-buildGitHub App):通过 OAuth 将单个 Builder 应用与 GitHub 仓库双向同步——支持 push(把编辑器当前状态提交为普通 Git commit)、pull(拉取远端提交更新编辑器文件)、切换分支与回滚到任意历史版本;仓库默认main分支且为私有。详见 Connecting to GitHub。 - 连接项目仓库(Project Repositories):在项目侧连接 GitHub、GitLab、Bitbucket、Azure DevOps、自建 Git 服务器等 HTTPS Git 远程仓库(提供仓库 HTTPS 克隆 URL 与个人访问令牌),让 Reflex Build 在 Agent 开始工作前先克隆已有代码。详见 Connecting to Git Providers。
两者的典型配合是:先用 Download 把云端应用取回本地 → 本地开发调试 → 通过 Git 集成把变更推回 Build 或推送到你自己的仓库。无论走哪条路,都请遵守同一安全红线——凭据单独配置、永不提交进源码控制。
六、与 Copy 的边界:什么时候用 Download 而不是 Copy
Copy App 与 Download 都位于应用生命周期管理之中,但定位不同:
| 动作 | 产物 | 典型场景 |
|---|---|---|
| Copy | 在当前项目内生成一个独立的新应用(包含代码、状态、配置与依赖),对副本的改动不影响原应用 | 尝试重大变更而不动原应用;复用已验证的起点 |
| Download | 一份一次性的源码导出归档,脱离 Build 平台到本地 | 本地开发、自托管、迁移到自己的基础设施 |
两者都遵循同一安全原则:共享或部署前,需单独复核集成、Secrets 与可见性设置(详见 General App Settings)。若你的目标是把应用"带回家"自己跑,Download 是正确的选择。
小结
Download App 是 Reflex Build 应用生命周期中连接"云端构建"与"本地/自托管"的桥梁:一份归档带走应用源码、资产、依赖清单与 Reflex 配置,却刻意不带走任何 Secrets——这正是它既便携又安全的原因。结合仓库中 reflex/utils/export.py 与 reflex/reflex.py 的实现可以看到,导出能力在 CLI 侧同样完整可用(reflex export及其--frontend-only、--no-zip、--ssr等参数),自托管侧则由 self-hosting.md 与 docker-example 提供落地路径。下载之后,请用 Git 集成接续版本控制,并在目标环境单独配置凭据,即可无缝衔接本地开发与生产部署。
【免费下载链接】reflex🕸️ Web apps in pure Python 🐍项目地址: https://gitcode.com/GitHub_Trending/re/reflex
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考