Convex 自托管版 Dashboard 本地运行与配置指南

发布时间:2026/9/24 12:36:05

Convex 自托管版 Dashboard 本地运行与配置指南 数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载导读在自托管 Convex 的完整部署中除后端backend与你的前端应用外还需要一个可视化控制台——即本仓库npm-packages/dashboard-self-hosted目录下的自托管版 Dashboard。本篇指南基于仓库文档 self-hosted/advanced/dashboard.md系统讲解如何从源码在本地启动 Dashboard、如何将它与后端部署对接以及 Monaco 编辑器内核加载方式的两种可选配置CDN 与内置并深入到next.config.js、_app.tsx、monacoInternalLoader.ts等源码文件帮助你理解每一步背后的实现原理。读完本文你将能够在一台开发机上用just与turbo完成依赖安装和构建、以NEXT_PUBLIC_DEPLOYMENT_URL指定后端地址并启动 Dashboard、通过NEXT_PUBLIC_ADMIN_KEY传入管理员密钥、以及在内网/离线环境下把 Monaco 编辑器资源改为从本机加载。一、Dashboard 在自托管架构中的位置自托管 Convex 需要部署三个部分见 self-hosted/README.mdConvex 后端backendConvex Dashboard控制台你的前端应用可自行托管或托管在 Netlify、Vercel 等平台。其中 Dashboard 并不参与业务数据的存储与计算它只是连接后端的控制面板查看数据表、Schema、函数日志、Cron 调度、环境变量管理认证配置等。它的核心能力来自npm-packages/dashboard-self-hosted/src/pages/下的页面集合例如data.tsx数据浏览、schema.tsxSchema 管理、functions.tsx函数管理logs.tsx日志查看、history.tsx历史记录、files.tsx文件存储schedules/crons.tsx与schedules/functions.tsx调度任务settings/下的认证、环境变量、集成、用量限制等设置页。使用默认的 Docker 方式docker compose up时Dashboard 已经随后端一起被提供在http://localhost:6791。而本文档所讲的本地运行则是直接从源码构建 Dashboard适合在开发自托管环境、调试 Dashboard 自身或对 Dashboard 做定制时使用。二、运行前的环境准备2.1 安装 Just仓库的 JavaScript 构建流程统一由Justfile驱动因此需要先安装 Just 命令工具。Just 是一个通用的命令执行器被用来封装install-js、turbo、pnpm等脚本避免直接手敲一串串命令。可以通过cargo install just或brew install just安装也可以通过官方 Packages 页面获取对应平台的安装包。安装完成后在仓库根目录执行just或just --list即可看到所有可用 recipe见 Justfile 的_default定义。2.2 理解端口约定在本地运行前先明确 Dashboard 与后端、CLI 之间的端口分工下表依据 dashboard-self-hosted/package.json 的 scripts 与 self-hosted/README.md 整理端口服务说明3210Convex 后端后端主监听地址http://127.0.0.1:32103211后端 HTTP actions后端对外暴露的 HTTP 动作端口6790Dashboarddev 模式next dev --port 6790见devscript6791Dashboard生产模式/默认访问地址next start -p 6791见startscriptDocker 部署时也在此端口访问在 Docker 部署场景中访问地址是http://localhost:6791本地源码运行时next dev默认在 6790 端口。三、本地运行 Dashboard 的完整步骤官方文档 self-hosted/advanced/dashboard.md 给出的核心流程是在npm-packages/dashboard-self-hosted目录下依次执行四条命令just install-js just turbo run build --filterdashboard-self-hosted^... npm run build NEXT_PUBLIC_DEPLOYMENT_URLyour-backend-url npm run start下面逐条拆解其含义并结合仓库实现说明每一步做了什么。3.1 安装 JavaScript 依赖just install-jsinstall-js定义在 Justfileinstall-js: cd {{justfile_directory()}}/npm-packages; just pnpm install --frozen-lockfile它切换到npm-packages目录用仓库固定的 pnpm 版本执行pnpm install --frozen-lockfile——即严格按照pnpm-lock.yaml锁定版本安装依赖保证任何人拉取同一 commit 后得到一致的依赖树。dashboard-self-hosted是 pnpm workspace 中的一员其依赖如convex-dev/design-system、dashboard-common、convex、system-udfs均以workspace:*形式引用见 package.json所以依赖需要在整个 workspace 层面安装。3.2 构建 Dashboard 的依赖项目just turbo run build --filterdashboard-self-hosted^...turborecipe 同样封装在 Justfile 中它把scripts/node_modules/.bin/turbo放入 PATH进入npm-packages目录执行 turbo。--filterdashboard-self-hosted^...的含义是构建dashboard-self-hosted的所有依赖项目但不包含它自己例如dashboard-common、system-udfs等 workspace 包会先被构建产出。这一步保证了后面npm run build时引用的 workspace 依赖都是最新的构建产物。3.3 构建 Dashboard 本体npm run buildbuildscript 在 package.json 中定义为build: npm run build:generated next build其中build:generated会执行build:generated: python3 ../dashboard-common/scripts/build-convexServerTypes.py该脚本为 Dashboard 生成与后端交互所需的 Convex server 类型定义然后执行next build。关于构建产物next.config.js 中有一个值得注意的分支逻辑默认情况下BUILD_TYPE未设为export使用output: standalone模式生成可独立部署的 standalone 服务若设置BUILD_TYPEexport则切换为静态导出模式output: export并关闭图片优化images.unoptimized: true。build:exportscript 还额外设置了NEXT_PUBLIC_USE_CURRENT_DEPLOYMENT_APItrue与NEXT_PUBLIC_DEFAULT_LIST_DEPLOYMENTS_API_PORT6791。3.4 启动 Dashboard 并指向你的后端npm run start启动命令为NEXT_PUBLIC_DEPLOYMENT_URLyour-backend-url npm run startNEXT_PUBLIC_DEPLOYMENT_URL是必填的核心环境变量指向你的 Convex 后端地址。它可以是一个本地后端如http://127.0.0.1:3210、远程自托管后端甚至 Convex Cloud 的部署地址Cloud 地址可在部署设置页找到。startscript 为next start -p 6791即生产模式下在6791端口提供服务。从 src/pages/_app.tsx 的App.getInitialProps可以看到该变量的消费逻辑服务端渲染时读取process.env.NEXT_PUBLIC_DEPLOYMENT_URL经normalizeUrl去掉尾部斜杠后注入页面 props客户端导航时则从window.__NEXT_DATA__.props.pageProps读取保证整个会话内 URL 一致。3.5 更省事的封装just run-dashboard如果你使用仓库根目录的just其实无需手动执行上述多步。仓库在 Justfile 中提供了run-dashboardreciperun-dashboard *ARGS: cd {{justfile_directory() / npm-packages/dashboard-self-hosted}} \ if [ -n {{ARGS}} ]; then \ NEXT_PUBLIC_DEPLOYMENT_URL{{ARGS}} npm run dev; \ else \ NEXT_PUBLIC_DEPLOYMENT_URLhttp://127.0.0.1:3210 \ NEXT_PUBLIC_ADMIN_KEY$(just generate-admin-key) \ npm run dev; \ fi用法对应 dashboard-self-hosted/README.md# 先完成一次性初始化 just install-js just turbo run build --filterdashboard-self-hosted^... # 传入部署地址启动dev 模式端口 6790 just run-dashboard YOUR_DEPLOYMENT_URL不传参数时run-dashboard会自动指向本地后端http://127.0.0.1:3210并用just generate-admin-key见 Justfile基于本地 instance secret 通过generate_key二进制派生 admin key自动注入NEXT_PUBLIC_ADMIN_KEY实现本地一键启动传入参数时则把参数作为NEXT_PUBLIC_DEPLOYMENT_URL传入适合连接远程部署。四、把 Dashboard 对接后端URL 与 Admin KeyDashboard 与后端的所有管理交互都基于部署 URL Admin Key。除了上文的NEXT_PUBLIC_DEPLOYMENT_URL还有以下相关环境变量见 src/pages/_app.tsx环境变量作用默认/示例NEXT_PUBLIC_DEPLOYMENT_URL后端地址Dashboard 所有 API 请求的目标http://127.0.0.1:3210NEXT_PUBLIC_ADMIN_KEY管理员密钥用于向后端鉴权由generate_admin_key.sh或just generate-admin-key生成NEXT_PUBLIC_DEFAULT_LIST_DEPLOYMENTS_API_PORT后端列表接口端口仅当设为有效端口时启用6791build:export场景NEXT_PUBLIC_USE_CURRENT_DEPLOYMENT_API是否尝试从/api/current_deployment获取凭据CLI 匿名模式使用truebuild:export场景Admin Key 的鉴权方式在 src/lib/checkDeploymentInfo.ts 中有直接体现Dashboard 会向后端发起GET /api/check_admin_key请求请求头携带Authorization: Convex adminKey用于探测当前密钥允许的操作集合allowedOps与是否只读isReadOnly当端点返回 404旧版后端时则放行所有操作。另外src/lib/fetchCurrentDeployment.ts 说明了 CLI 匿名模式下/api/current_deployment端点的用途——自托管 Dashboard 下该端点返回 404因此会回退到其他凭据来源即环境变量。注意在生产部署中Admin Key 拥有后端全部管理权限务必妥善保管不要把带密钥的.env.local提交到版本库参考 self-hosted/README.md 中对CONVEX_SELF_HOSTED_ADMIN_KEY的说明。五、可选配置Monaco 编辑器的加载方式这是 self-hosted/advanced/dashboard.md 中列出的唯一一条 Dashboard 可选配置核心内容如下Dashboard 的所有编辑器类元素Schema 编辑、函数代码查看、环境变量编辑等都使用monaco-editornpm 包。默认情况下Monaco 的核心资源从 CDN 加载如果希望从内部本地/内网加载可将环境变量NEXT_PUBLIC_LOAD_MONACO_INTERNALLY设置为true。5.1 两种加载模式的差异默认CDN 模式monaco-editor/react的 loader 会从公共 CDN 拉取 Monaco 核心与语言服务资源。优点是不增加自身打包体积缺点是在离线、内网或网络受限环境下无法加载且每次首次打开编辑器页面都要依赖外部网络。内置internal模式NEXT_PUBLIC_LOAD_MONACO_INTERNALLYtrue时Monaco 相关资源会随 Dashboard 自身打包并由本机提供适合离线部署与对资源来源有严格要求的场景。5.2 源码中的实现在 src/pages/_app.tsx 中应用启动时会根据环境变量按需加载内置 loader// Monaco only runs in the browser, and pulling it into the server bundle makes // it fail to evaluate there. if ( typeof window ! undefined process.env.NEXT_PUBLIC_LOAD_MONACO_INTERNALLY true ) { import(../lib/monacoInternalLoader).then((a) a).catch(console.error); }注意两点实现细节该模块只在浏览器端typeof window ! undefined动态import避免 Monaco 被打进 Next.js 的 server bundle 导致服务端求值失败当环境变量不是字符串true时走默认的 CDN 加载路径。内置加载的核心实现在 src/lib/monacoInternalLoader.ts它通过window.MonacoEnvironment.getWorker把 JSON、TypeScript/JavaScript 等语言服务的工作线程全部改为从monaco-editor/esm/vs/...的本地 chunk 创建Turbopack 会把每个new Worker(new URL(…))打成独立 chunk再调用loader.config({ monaco })将本地实例注入monaco-editor/react的 loader。5.3 使用方式以npm run start生产模式为例在启动命令前加上环境变量即可NEXT_PUBLIC_DEPLOYMENT_URLhttp://127.0.0.1:3210 \ NEXT_PUBLIC_LOAD_MONACO_INTERNALLYtrue \ npm run startdev 模式next dev下同样适用。需要注意的是该变量属于NEXT_PUBLIC_前缀会在构建时被 Next.js 内联进产物源码注释也标明该判断发生在构建期因此修改后需要重新执行npm run build再start才能生效仅重启next start不会更新取值。六、常见问题与排查建议1. 页面加载了但看不到数据或提示鉴权失败确认NEXT_PUBLIC_DEPLOYMENT_URL指向的后端可达自托管后端默认监听http://127.0.0.1:3210确认 Admin Key 有效Docker 部署用docker compose exec backend ./generate_admin_key.sh生成见 self-hosted/README.md源码本地后端用just generate-admin-key若后端较旧/api/check_admin_key不存在时 Dashboard 会按放行处理可先确认后端版本。2. 编辑器区域空白或控制台报 Monaco 加载失败网络受限环境下优先设置NEXT_PUBLIC_LOAD_MONACO_INTERNALLYtrue并重新构建确认环境变量在构建时已生效可检查构建产物中的内联值。3. 端口被占用dev 模式占用 6790next dev --port 6790生产模式占用 6791next start -p 6791冲突时可调整对应 script 中的端口参数。4. 需要了解构建产物形态默认next build产出 standalone 服务如需纯静态文件部署如直接挂到对象存储可用BUILD_TYPEexport npm run build即npm run build:export此时会启用/api/current_deployment兼容逻辑并默认对接 6791 端口的列表接口。七、延伸阅读self-hosted/advanced/running_binary_directly.md不依赖 Docker直接运行后端二进制self-hosted/advanced/hosting_on_own_infra.md在自有服务器上托管self-hosted/advanced/fly/README.md 与 self-hosted/advanced/railway/README.md托管到 Fly.io 与 Railwayself-hosted/advanced/postgres_or_mysql.md把后端数据库从默认 SQLite 切换到 PostgreSQL 或 MySQLself-hosted/advanced/s3_storage.md将文件、导出、快照等存储到 S3self-hosted/advanced/knobs.md通过 knobs 对后端做高级调优Justfile 与 npm-packages/dashboard-self-hosted/README.md本地运行相关的全部 recipe 与命令参考。结语自托管版 Dashboard 的本地运行本质上是一条清晰的流水线用just install-js锁定安装 workspace 依赖 → 用just turbo run build --filterdashboard-self-hosted^...构建依赖包 → 用npm run build构建 Dashboard 本体 → 以NEXT_PUBLIC_DEPLOYMENT_URL必要时加上NEXT_PUBLIC_ADMIN_KEY启动并指向后端。如果运行环境无法访问公网 CDN再通过NEXT_PUBLIC_LOAD_MONACO_INTERNALLYtrue将 Monaco 编辑器内核切换到内部加载。掌握这三个环节的环境变量与端口约定即可在本地复现与定制完整的自托管 Convex 控制台。赞分享数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载相关推荐使用 Railway.com 一键部署自托管 Convex 后端模板部署、Admin Key 与 Dashboard 配置全指南使用 Railway.com 一键部署自托管 Convex 后端模板部署、Admin Key 与 Dashboard 配置全指南 导读 本文以开源仓库 co数据库后端Nhost Dashboard 完全指南环境配置、本地联调、CSP 自托管与测试体系Nhost Dashboard 完全指南环境配置、本地联调、CSP 自托管与测试体系 Nhost Dashboard 是 Nhost 开源项目Open So后端认证鉴权数据库无服务开发工具云原生Convex 自托管 Docker 镜像构建指南从源码构建后端与 Dashboard 镜像Convex 自托管 Docker 镜像构建指南从源码构建后端与 Dashboard 镜像 导读 本指南基于开源仓库 convex backend 中 sel数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/24 12:31:05

TC397多核MCU上实现FreeRTOS SMP的完整技术指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 12:31:05

多品牌空调红外编码差异与学习模块调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 12:31:05

EMC测试全解析:从原理、标准到整改实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 13:36:11

烘焙后城市场景满是黑斑?用6步检查 Lightmap UV 与光照接缝

城市场景完成光照烘焙后,如果出现整面发黑、局部脏斑、模块接缝发亮,先不要急着提高灯光强度。更常见的原因是 Lightmap UV 重叠、UV 岛间距不足、光照贴图分辨率与对象尺寸不匹配,以及薄面、法线或模块边界存在问题。 本文用一个最小场景演…

2026/9/24 13:31:10

Django云服务器配置Nginx站点SSL证书HTTPS协议

部署 Django 项目并为其开启 HTTPS 服务是保障数据安全、提升用户信任度的重要步骤。在生产环境中,确保 Django 项目通过 HTTPS 协议传输数据不仅是为了遵循安全标准,还可以避免数据在网络传输中的泄露风险。 本教程将介绍如何在已配置 Nginx 的 HTTP 服务基础上,为 Django…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码