十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何在自己的服务器以生产模式运行 Reflex 并正确配置 api_url 与反向代理?

如何在自己的服务器以生产模式运行 Reflex 并正确配置 api_url 与反向代理? 如何在自己的服务器以生产模式运行 Reflex 并正确配置 api_url 与反向代理【免费下载链接】reflex️ Web apps in pure Python 项目地址: https://gitcode.com/GitHub_Trending/re/reflex如果你已经写好 Reflex 应用需要把前端和后端部署到自己控制的服务器上而不是使用托管式的reflex deploy要完成三件事让浏览器能通过公网地址访问后端api_url、以生产模式启动应用前端静态资源在 3000 端口、后端事件处理在 8000 端口、并让反向代理正确转发 WebSocket 流量。以下内容依据 self-hosting 文档 与 配置参考。前提条件见 安装文档Python 3.10一个已安装 Reflex 的虚拟环境文档推荐 uvvenv、conda、poetry 也可代码已克隆到服务器服务器有一个公网可访问的 IP 或域名下文以app.example.com表示请替换为你的实际地址。在 rxconfig.py 中配置 api_urlapi_url是用户的浏览器用来访问后端的 URL。把它设置为服务器公网地址并带上:8000端口这是前端与后端状态正常交互的关键config rx.Config( app_nameyour_app_name, api_urlhttp://app.example.com:8000, )两条补充规则来自配置文档也可以用环境变量API_URL在运行时或导出时覆盖这样本地开发可以保留http://localhost:8000默认值当api_url指向 localhost 时前端会自动用实际访问应用的域名替换它——即后端与前端从同一地址可达例如都挂在同一个反向代理后面时无需手动设置只有后端监听地址与前端不同时才必须显式设置。反向代理挂在子路径时改用 backend_path如果你用 nginx 之类的代理把子路径例如/api/*路由到 Reflex 后端不要把前缀硬编码进api_url而是设置backend_pathconfig rx.Config( app_nameyour_app_name, api_urlhttp://app.example.com:8000, backend_path/api, )设置后所有后端端点——事件 WebSocket、/ping、/_upload、/_health、/_all_routes——都会挂在该前缀下并且导出时打包进前端的代码会自动调用带前缀的 URL代理端不需要再做请求改写。frontend_path对前端起类似作用两者相互独立两者取值都会规范化为以/开头。注意修改backend_path或frontend_path需要完整重启reflex run因为路由和挂载点在启动时注册热重载不会移动它们。以生产模式启动应用reflex run --env prod生产模式会创建应用的优化构建。默认端口分工静态前端HTML、JavaScript、CSS暴露在3000端口后端事件处理器监听8000端口。如果端口占用情况需要调整可用frontend_port/backend_port配置项或REFLEX_FRONTEND_PORT等环境变量覆盖见 配置文档。反向代理必须放行 WebSocket 的 Upgrade 头这是反向代理配置中最容易漏掉的一项后端使用 WebSocket因此 nginx、Apache 这类代理必须配置为放行Upgrade头否则浏览器无法与后端建立连接self-hosting 文档明确以此作为警告项。代理规则上只需区分两类流量后端流量/_event/*、/ping、/_upload、/_upload/*设置backend_path后为对应前缀下的路径转发到localhost:8000其余请求由代理直接返回 3000 端口的静态前端。部署后验证哪些点文档给出的成功条件是生产模式下 3000 端口能访问到静态前端、8000 端口的后端事件处理器可连接、浏览器页面能与后端状态交互。按这个清单核对访问 3000 端口或代理后的前端地址确认返回的是优化后的静态资源确认后端地址api_url指向的地址对外可达——如果 8000 端口只对代理开放而代理只暴露了前端地址那么api_url必须写浏览器实际能到达的地址页面交互事件回传、状态更新是否正常。如果页面能打开但交互无响应优先检查代理是否放行了Upgrade头以及api_url是否公网可达。后端挂出的/_health等端点在 self-hosting 文档 中有列名可作为后端存活检查入口设置backend_path后它们位于前缀之下。可选分支导出静态构建或用容器运行如果你的前端准备放到 Netlify、GitHub Pages 这类静态托管上而不是让reflex run --env prod同时提供前端可以导出静态构建。导出前确保api_url指向可访问的后端API_URLhttp://app.example.com:8000 reflex export该命令会生成两个文件frontend.zip应用压缩后的 HTML、JavaScript、CSS上传到静态托管服务和backend.zip后端 Python 代码上传到你的服务器运行。也可以传--frontend-only或--backend-only只导出其中一侧加--no-zip则不解压打包前端产物在.web/build/client/目录后端在项目根目录。另一种可选路径是容器化部署在 docker-example 目录中有现成的Dockerfile与说明如production-one-port示例用 Caddy 单端口对外内置 Redis 保存用户状态。构建前把rxconfig.py与requirements.txt放到项目根目录然后docker build -t reflex-project:latest . docker run -d -p 3000:3000 -p 8000:8000 --name app reflex-project:latest单端口示例docker-example/production-one-port额外说明容器本身无持久化停止后会丢失数据需要时用绑定挂载或命名卷持久化database和uploaded_files目录TLS 终结应由外部的负载均衡器或反向代理承担。【免费下载链接】reflex️ Web apps in pure Python 项目地址: https://gitcode.com/GitHub_Trending/re/reflex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表