使用 GitHub Actions 自动部署 Reflex 应用到 Reflex Cloud
【免费下载链接】reflex🕸️ Web apps in pure Python 🐍项目地址: https://gitcode.com/GitHub_Trending/re/reflex
本指南讲解如何在 GitHub Actions 工作流中使用 Reflex 官方部署 Action(reflex-dev/reflex-deploy-action@v1),将 Reflex 应用自动部署到 Reflex Cloud。读完本文后,你将掌握完整的 CI/CD 配置方法:创建工作流文件、配置认证 Token 与项目 ID 密钥、理解全部 Action 输入参数,并能将安全扫描、多环境部署等最佳实践融入自动化流程。
前置要求:本 Action 要求
reflex>=0.6.6,且你的应用应已在本地通过reflex init与reflex run验证可运行(参见 Deploy Quick Start)。
工作流配置:创建.github/workflows/deploy.yml
在你的仓库中新建.github/workflows/deploy.yml文件,内容如下:
name: Deploy Reflex App on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Deploy to Reflex Cloud uses: reflex-dev/reflex-deploy-action@v1 with: auth_token: ${{ secrets.REFLEX_AUTH_TOKEN }} project_id: ${{ secrets.REFLEX_PROJECT_ID }} app_directory: "my-app-folder" # Optional, defaults to root extra_args: "--region sjc" # Optional python_version: "3.12" # Optional配置要点说明:
- 触发条件:示例在
main分支收到push时触发部署;若希望每次 PR 合并或手动触发,可改用pull_request/workflow_dispatch事件; - 运行环境:
runs-on: ubuntu-latest即可满足构建需要; - 核心步骤:仅需一个
uses: reflex-dev/reflex-deploy-action@v1步骤,并通过with传入鉴权信息与部署参数; - 密钥引用:
${{ secrets.REFLEX_AUTH_TOKEN }}与${{ secrets.REFLEX_PROJECT_ID }}是 GitHub 仓库 Secrets,切勿把真实值直接写入 YAML。
该 Action 底层会执行等效于reflex deploy的流程:以DEPLOY编译上下文导出前后端产物并打包上传(对应 reflex/hosting.py 中的prepare_deploy与export_for_deploy,以及 deploy 命令实现)。在无人工干预的 CI 环境中,所有交互式提问都会被跳过,部署完全由参数驱动。
配置 GitHub Secrets
Action 需要两个凭据,请将它们以 GitHub 仓库 Secret 的形式保存:
- 进入你的 GitHub 仓库,打开Settings > Secrets and variables > Actions;
- 创建Deploy模板的 Token:在组织工作区的Tokens页面创建 Token,选择Deploy模板(该模板授予 Projects 与 Apps 的读写权限,足以创建和部署应用),并将项目范围限制为仅目标项目("Only select projects"),然后将其保存为
REFLEX_AUTH_TOKEN。Token 的创建、模板选择与项目范围限制详见 Tokens 文档; - 创建
REFLEX_PROJECT_ID:从 Reflex Build 中目标项目的设置页复制项目 ID(UUID 形式,例如2a432b8f-2605-4753-####-####0cd1####),保存为同名 Secret。该 ID 即reflex deploy --project <PROJECT_ID>中使用的项目 ID,参见 Deploy Quick Start。
安全实践(依据 Tokens 文档):
- 每个 Token 只服务于单一用途,仅授予所需资源与项目权限;
- 为 Token 设置与工作流生命周期匹配的过期时间;
- 自动化 Token 应存放于平台的 Secret 管理器(即 GitHub Secrets);
- 切勿将 Token 提交进代码、截图或日志;
- Token 不再需要或疑似泄露时立即吊销。
说明:Token 归属于创建者个人。若希望长期运行的自动化不依赖某个成员的账号状态(如角色变动或离职),建议改用组织拥有的 service account(详见仓库中 docs/ai/organization 目录)。
Action 输入参数(Inputs)详解
下表列出reflex-deploy-action@v1支持的全部输入参数:
| 名称 | 描述 | 必填 | 默认值 |
|---|---|---|---|
auth_token | 存储于 GitHub Secrets 的 Reflex 认证 Token | 是 | N/A |
project_id | 目标部署项目的 ID | 是 | N/A |
app_directory | 包含 Reflex 应用的目录 | 否 | .(仓库根目录) |
extra_args | 透传给reflex deploy命令的附加参数 | 否 | N/A |
python_version | 部署环境使用的 Python 版本 | 否 | 3.12 |
auth_token(必填)
即REFLEX_AUTH_TOKEN,用于对 Reflex Cloud 的 CLI/API 请求鉴权。可参考 Tokens 文档 使用--token参数的场景——在 CI 中通过${{ secrets.REFLEX_AUTH_TOKEN }}注入。
project_id(必填)
目标项目 ID。它对应reflex deploy --project <PROJECT_ID>中的项目 ID,可在 Reflex Build 项目设置页复制。
app_directory(可选)
默认指向仓库根目录(.)。当 Reflex 应用位于子目录(如my-app-folder)时设置此项。注意:无论指向何处,应用根目录都应有requirements.txt,其中包含全部 Python 依赖(可用pip freeze > requirements.txt生成)。
extra_args(可选)
透传给reflex deploy的附加命令行参数,多个参数以空格分隔。常用选项包括:
--region <code>:指定部署区域,可重复使用以部署到多个区域,例如--region sjc --region iad;未指定时默认使用sjc(参见 Regions 文档 中的区域列表与 CLI 用法);--env <key>=<value>:设置环境变量,可重复使用;--vmtype <id>:指定虚拟机规格(默认c1m1,可用reflex cloud vmtypes查询选项);--config <path>:指定云端配置文件(如cloud-prod.yml);--envfile <path>:指定环境变量文件(默认.env);--description <text>:为本次部署添加描述,显示在部署历史中;--no-ssr:关闭服务端渲染(默认开启);--provider gcp与--gcp-connection <name>:面向 GCP 的部署选项。
完整参数清单可在 deploy 命令源码 中查看。
python_version(可选)
部署环境使用的 Python 版本,默认3.12。建议与本地开发环境保持一致,避免依赖解析差异。
高级实践:组合安全扫描、多环境与配置管理
在部署前执行安全扫描
Reflex 提供reflex cloud scan命令(详见 security-scan.md),可对应用源码做 Reflex 感知的安全审查。在 CI 中可将其与部署串联:先扫描,通过后再部署。单独的安全扫描工作流示例:
name: Security Scan on: pull_request: branches: - main jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 with: python-version: "3.12" - name: Install Reflex run: pip install reflex - name: Run security scan run: reflex cloud scan --no-interactive --fail-on high --token ${{ secrets.REFLEX_AUTH_TOKEN }}其中--no-interactive确保 CI 环境不会弹出交互提示,--fail-on high让存在 high/critical 级别问题时命令以非零退出码结束,从而阻断合并或后续部署。
多环境部署:结合cloud.yml配置文件
Reflex 支持通过cloud.yml(可由reflex cloud config生成)定义部署配置,且支持按环境拆分(如cloud-dev.yml、cloud-staging.yml、cloud-prod.yml),详见 config_file.md。在 GitHub Actions 中,可通过extra_args指定配置文件实现多环境部署:
- name: Deploy to Production uses: reflex-dev/reflex-deploy-action@v1 with: auth_token: ${{ secrets.REFLEX_AUTH_TOKEN }} project_id: ${{ secrets.REFLEX_PROJECT_ID }} extra_args: "--config cloud-prod.yml"例如生产配置可定义多区域与更高规格:
name: myapp-production description: 'Production environment' regions: sjc: 2 lhr: 1 vmtype: c4m4 hostname: myapp envfile: .env.production在 CI 中直接调用reflex deploy
若不使用官方 Action,也可以像安全扫描那样显式安装 Reflex 后直接执行部署命令:
- name: Install Reflex run: pip install reflex - name: Deploy run: reflex deploy --project ${{ secrets.REFLEX_PROJECT_ID }} --no-interactive --token ${{ secrets.REFLEX_AUTH_TOKEN }}注意:reflex deploy默认是交互式命令(会核对requirements.txt、确认新建应用、询问描述等,参见 Deploy Quick Start),在 CI 中必须显式传入--no-interactive并保证所需信息均由参数提供。所有 flag 值会在多次运行间保留(见 Deploy Quick Start 中的相关提示),因此 CI 中的参数传递应保持确定性。
常见问题与排错
- Action 报版本过低:确认本地与 CI 环境的 Reflex 版本均满足
>=0.6.6;reflex deploy在执行前会调用check_version()校验 reflex-hosting-cli 是否为最新版,若落后会直接退出并提示升级(参见 deployments.py)。 - 认证失败:检查
REFLEX_AUTH_TOKEN是否过期、项目范围是否包含目标项目。Token 过期后需在 Tokens 页面重新创建并更新 Secret。 - 找不到应用目录:应用不在仓库根目录时,务必设置
app_directory,并确保该目录内含requirements.txt。 - 部署到错误区域/规格:通过
extra_args传入--region、--vmtype,或改用--config指定配置文件;CLI 参数会覆盖配置文件中的对应值。 - CI 中卡在交互提示:确保所有必要信息均已通过参数或 Secrets 提供,并添加
--no-interactive。
小结
通过reflex-dev/reflex-deploy-action@v1,你可以用十几行 YAML 完成 Reflex 应用到 Reflex Cloud 的持续部署。核心要点可归纳为三点:其一,正确创建并保存REFLEX_AUTH_TOKEN与REFLEX_PROJECT_ID两个 Secrets;其二,理解五个输入参数的语义,善用extra_args透传reflex deploy的丰富选项;其三,将安全扫描、cloud.yml多环境配置等能力融入流水线,实现既自动化又受控的发布流程。相关命令与接口的底层实现可进一步阅读 reflex/hosting.py 与 deploy 命令源码。
【免费下载链接】reflex🕸️ Web apps in pure Python 🐍项目地址: https://gitcode.com/GitHub_Trending/re/reflex
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考