免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Convex 自托管(Self-hosted)完整指南:Docker 部署、SQL 数据库与 S3 存储实战

Convex 自托管(Self-hosted)完整指南:Docker 部署、SQL 数据库与 S3 存储实战 数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载本文是 Convex 开源响应式数据库后端convex-backend自托管部署的权威实操指南。围绕 self-hosted/README.md 展开覆盖 Docker Compose 快速起步、admin key 与 CLI 对接、Postgres/MySQL 外部数据库、S3 存储、以及 Fly.io / Railway / 自有服务器等生产级部署方案。读完本文你将能够从零搭建一套属于自己的 Convex 后端与 Dashboard并掌握升级、数据迁移与并发调优的完整方法论。Convex 是一个开源的响应式数据库同时运行数据库与计算函数后端即服务。官方云产品自带免费额度但当你需要把数据与基础设施完全掌控在自己手中时自托管是唯一路径。自托管 Convex 需要部署三个服务Convex backend负责数据库与函数执行的核心服务Convex dashboard可视化查看日志、读写数据、运行函数的管理界面你的前端应用Convex backend 不托管你的 Web 应用前端可以自行托管也可以放在 Netlify、Vercel 等托管服务上。Docker 配置快速起步默认情况下Convex backend 会把所有状态存储在本地 SQLite 数据库中。官方建议先用这种基础配置跑通之后再迁移到托管平台或按需把后端指向独立的 SQL 数据库以形成生产级配置。启动后端与 Dashboard首先获取仓库中的docker-compose.yml文件然后在包含该文件的目录下启动docker compose up等待容器启动后用以下命令为 Dashboard/CLI 生成 admin keydocker compose exec backend ./generate_admin_key.sh服务端口约定服务地址说明Dashboardhttp://localhost:6791管理界面BackendConvex 客户端 APIhttp://127.0.0.1:3210与convexCLI 交互的入口Backend HTTP actionshttp://127.0.0.1:3211后端 HTTP 动作路由在/http路径下配置 CLI 环境变量在你的 Convex 项目中创建.env.local文件不要提交到版本控制CONVEX_SELF_HOSTED_URLhttp://127.0.0.1:3210 CONVEX_SELF_HOSTED_ADMIN_KEYyour admin key然后安装最新版 Convex 客户端并开始使用npm install convexlatest npx convex dev # 持续部署边改边推 npx convex --help # 查看所有可用命令npx convex dev会持续把函数推送到自托管后端并自动在你的前端环境变量如VITE_CONVEX_URL中写入连接地址适合开发模式npx convex deploy则是一次性部署适合生产发布。你还可以用npx convex export导出数据、npx convex import导入数据。数据持久化默认情况下backend 把数据存放在 Docker 管理的 volume 中compose 文件中名为data的卷挂载到容器内/convex/data。在任意云托管平台上运行 Docker 容器时都必须为该卷配置持久化存储例如 AWS EBS否则容器重建会导致数据丢失。默认数据库是本地 SQLite但你也可以把数据库指向 SQL 服务或把文件类数据导出、快照、模块、用户文件、搜索索引迁移到 S3详见下文。docker-compose.yml 环境变量详解仓库自带的 docker-compose.yml 是理解后端可配置项的最佳入口。它暴露了 backend 与 dashboard 两个服务以及一套完整的可调环境变量环境变量默认值说明PORT3210后端 Convex 客户端 API 端口SITE_PROXY_PORT3211后端 HTTP actions 端口DASHBOARD_PORT6791Dashboard 端口CONVEX_CLOUD_ORIGINhttp://127.0.0.1:${PORT}后端对外的客户端 API 地址函数内可通过process.env.CONVEX_CLOUD_URL访问CONVEX_SITE_ORIGINhttp://127.0.0.1:${SITE_PROXY_PORT}后端对外的 HTTP API 地址函数内可通过process.env.CONVEX_SITE_URL访问INSTANCE_NAME默认convex-self-hosted实例名同时决定数据库名-替换为_INSTANCE_SECRET—实例根密钥持有者可部署与读取你的全部数据DATABASE_URL/POSTGRES_URL/MYSQL_URL—外部 SQL 数据库连接串不含数据库名与查询参数S3_STORAGE_*_BUCKET5 个—S3 各用途存储桶导出、快照导入、模块、用户文件、搜索索引S3_ENDPOINT_URL—兼容 S3 API 的自建端点如 Cloudflare R2 必须设置AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_REGION/AWS_SESSION_TOKEN—AWS 凭证AWS_S3_FORCE_PATH_STYLE/AWS_S3_DISABLE_SSE/AWS_S3_DISABLE_CHECKSUMS—S3 兼容存储的行为开关APPLICATION_MAX_CONCURRENT_*16各类操作的并发上限queries/mutations/V8 actions/Node actions详见 knobs 一节DOCUMENT_RETENTION_DELAY1728002 天文档保留时间自托管默认比云产品低RUST_LOGinfoRust 日志级别DISABLE_METRICS_ENDPOINTtrue设为false可启用 Prometheus 兼容的/metrics端点DISABLE_BEACON—禁用遥测上报DO_NOT_REQUIRE_SSL—本地连接外部数据库时禁用 SSL 校验REDACT_LOGS_TO_CLIENT—对客户端日志做脱敏处理V8_ACTION_USER_TIMEOUT_SECS/NODE_ACTION_USER_TIMEOUT_SECS—V8/Node action 的用户超时时间CONVEX_RELEASE_VERSION_DEV—开发版发布版本号INSTANCE_SECRET相关—详见直接运行二进制一节Dashboard 服务的两个关键变量NEXT_PUBLIC_DEPLOYMENT_URL指向后端地址默认http://127.0.0.1:${PORT}与NEXT_PUBLIC_LOAD_MONACO_INTERNALLY让 monaco-editor 从内部加载而非 CDN。compose 文件还内置了健康检查curl -f http://localhost:3210/version每 5 秒执行一次启动宽限期 10 秒Dashboard 通过depends_on: condition: service_healthy等待后端就绪。Convex Auth 支持如果使用 Convex Auth请按照其 manual 模式设置。目前CLI 尚不支持自托管部署的 Convex Auth 一键配置需要手动接入。自托管时记得设置好CONVEX_CLOUD_ORIGIN与CONVEX_SITE_ORIGIN因为 Convex Auth 生成认证回调 URL 时依赖后端知道自己对外的地址。部署你的前端应用Convex backend 负责数据库与计算函数但不托管你的 Web 应用。如果你在 Netlify/Vercel 等平台托管前端需要把官方生产托管文档中的环境变量替换为SELF_HOSTED等价物不再设置CONVEX_DEPLOY_KEY改为设置CONVEX_SELF_HOSTED_URL后端地址再设置CONVEX_SELF_HOSTED_ADMIN_KEY用generate_admin_key.sh生成的 admin key。后台实例本身不区分开发/生产环境——是否把某个实例当作生产由你决定。一个后端既可以用npx convex dev实时更新也可以用npx convex deploy一次性部署同理你可以在 staging 或 preview 场景下拥有多个后端区别仅在于环境变量指向哪个实例。高级配置与生产化方案仓库的 self-hosted/advanced 目录提供了覆盖不同场景的进阶文档下面逐一展开核心要点。直接运行二进制如果你不想用 Docker可以从源码构建或下载预编译二进制。macOS 上首次运行可能需要按住option双击以绕过 Gatekeeper 提示。生成实例密钥root secret持有者可部署代码并读取全部数据务必保密、绝不提交到版本库export INSTANCE_SECRET$(openssl rand -hex 32) # 64 位十六进制字符串注意轮换该密钥会使所有指向该后端的 keys/sessions 失效。生成 admin key需要 Rust 工具链cargo run -p keybroker --bin generate_key -- convex-self-hosted $INSTANCE_SECRET输出形如convex-self-hosted|01c046ab1512d9306a6abda3eedec5dfe862f1fe0f66a5aee774fb9ae3fda87706facaf682b9d4f9209a05e038cbd6e9b8。启动后端数据库存储在当前工作目录而非二进制所在目录./convex-local-backend --instance-name convex-self-hosted --instance-secret $INSTANCE_SECRET要使用 Postgres/MySQL在命令中追加--db postgres-v5 connection string或--db mysql-v5 connection string连接串需去掉数据库名与查询参数。运行./convex-local-backend --help可查看端口、origin URL、本地存储目录等全部选项。托管在 Fly.io仓库提供了 fly.toml 配置。用npx degit get-convex/convex-backend/self-hosted/fly fly拷贝配置后在backend目录运行fly launch选择与数据库相同的地域在[env]段设置CONVEX_CLOUD_ORIGIN fly-backend-url、CONVEX_SITE_ORIGIN fly-backend-url/http也可用fly secrets set存为密钥fly deploy生效检查fly logs确认后端启动fly ssh console --command ./generate_admin_key.sh生成 admin key在应用中写.env.local的CONVEX_SELF_HOSTED_URL/CONVEX_SELF_HOSTED_ADMIN_KEYnpx convex dev或npx convex deploy --env-file env file部署函数。HTTP actions 运行在app.fly.dev/http路径下例如后端在https://self-hosted-backend.fly.dev时路由/sendEmail的 action 需访问https://self-hosted-backend.fly.dev/http/sendEmail。默认 Fly 配置分配最小资源数据卷仅 1GB遇到限流/性能问题建议提升内存与 CPU磁盘不足用fly volume extend扩容。托管在 Railway.comRailway 指引由社区维护self-hosted/advanced/railway/README.md提供 ConvexSQLite、ConvexPostgres、ConvexMySQL 三种一键部署模板。部署后通过railway ssh选择convex-backend服务运行./generate_admin_key.sh获取 admin key再访问convex-dashboard的公开 URL 并粘贴该 key 登录。若想拆分 API 与 HTTP 域名可在Public Networking中分别为端口 3210convex api与 3211http actions生成域名然后重新部署两个服务。托管在自有服务器完整方案见 hosting_on_own_infra.md。基本原则是把 backend 与 dashboard 容器部署到你自己的基础设施配置持久化卷与外部数据库其余步骤与 Docker 起步流程一致。在 Postgres 或 MySQL 上运行数据库Convex backend 被设计为同时兼容 SQLite、Postgres、MySQL官方测试过 Postgres v17 与 MySQL v8其他版本也可能工作。生产环境建议使用托管 Postgres/MySQL 服务。务必让后端与数据库处于同一区域且尽量接近任何额外的网络延迟都会直接影响查询性能。切换数据库提供商前先用npx convex export导出数据。连接 Neon 上的 Postgres从 Neon 控制台复制连接串并创建数据库export DATABASE_CONNECTIONconnection string psql $DATABASE_CONNECTION -c CREATE DATABASE convex_self_hostedPOSTGRES_URL应是不含数据库名与查询参数的连接串以neon.tech结尾export POSTGRES_URL$(echo $DATABASE_CONNECTION | sed -E s/\/[^/](\?.*)?$//)在 Fly 等平台上用fly secrets set POSTGRES_URL$POSTGRES_URL注册该变量本地则重启后端生效。日志中出现Connected to Postgres即连接成功注意要用npx convex deploy把已有函数重新部署到新数据库。本地连接 Postgres / MySQL# Postgres psql postgres -c CREATE DATABASE convex_self_hosted export POSTGRES_URLpostgresql://your-usernamehost.docker.internal:5432 export DO_NOT_REQUIRE_SSL1 docker compose up # MySQL mysql -e CREATE DATABASE convex_self_hosted; export MYSQL_URLmysql://your-usernamehost.docker.internal:3306 export DO_NOT_REQUIRE_SSL1 docker compose up数据库命名规则后端使用的数据库名等于实例名-替换为_。Docker 镜像默认实例名为convex-self-hosted因此默认连接数据库convex_self_hosted可用INSTANCE_NAME环境变量改名export POSTGRES_URLconnection string export INSTANCE_NAMEyour-instance-name psql $POSTGRES_URL -c CREATE DATABASE your_instance_name;使用 S3 存储默认后端把文件数据存在容器文件系统。改用 S3 存储需要设置以下环境变量export AWS_REGIONyour-region export AWS_ACCESS_KEY_IDyour-access-key-id export AWS_SECRET_ACCESS_KEYyour-secret-access-key export S3_STORAGE_EXPORTS_BUCKETconvex-snapshot-exports export S3_STORAGE_SNAPSHOT_IMPORTS_BUCKETconvex-snapshot-imports export S3_STORAGE_MODULES_BUCKETconvex-modules export S3_STORAGE_FILES_BUCKETconvex-user-files export S3_STORAGE_SEARCH_BUCKETconvex-search-indexes使用 Cloudflare R2 或其他兼容 AWS S3 API 的替代存储时必须额外设置S3_ENDPOINT_URL。存储提供商迁移在本地存储与 S3 之间切换或反向时需要先导出再导入npx convex export --path path-to-export-file npx convex import --replace-all path-to-export-file # 在配置了新存储的全新后端上执行清空或重置数据后端刻意没有提供破坏性的 reset database 命令。清空数据的标准做法是用空快照导入替换目标表——这样做不会删除 Docker volume、无需重新部署且会保留 schema 与函数。清空前务必先备份npx convex export --path backup.zip--replace -y不可撤销且要确认CONVEX_SELF_HOSTED_URL指向你想清空的实例。清空单表npx convex import --table $tableName --replace --format jsonLines /dev/null -y清空应用全部表for tableName in \npx convex data; do npx convex import --table $tableName --replace -y --format jsonLines /dev/null; done清空组件的全部表for tableName in \npx convex data --component $component; do npx convex import --component $component --table $tableName --replace -y --format jsonLines /dev/null; done/dev/null作为空导入文件在 Linux/macOS 可用WindowsPowerShell没有/dev/null需改用自建空文件。命令以convexlatest2026-06 验证为准可运行npx convex import --help查看当前 flag 行为。本地运行 Dashboard从仓库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 startDashboard 的编辑器类组件使用 monaco-editor默认从 CDN 加载核心在内网环境可设置NEXT_PUBLIC_LOAD_MONACO_INTERNALLYtrue改为内部加载。禁用日志功能日志相关功能流式日志、日志持久化等可通过环境变量关闭具体变量列表见 disabling_logging.md适用于数据合规或最小化资源占用的场景。升级自托管版本升级有两种方式详见 upgrading.md原地升级Option 1避免停机升级前强烈建议npx convex export备份。启动新版本后观察迁移日志例如Executing Migration 114/115. MigrationComplete(115)每条迁移日志会指示应等待哪条日志确认完成导出/导入Option 2数据库重建先停止外部流量 →npx convex export导出 →npx convex env list保存环境变量 → 升级镜像 →npx convex import --replace-all导入 →npx convex env set恢复环境变量 → 恢复流量。导出是时间点快照必须在停止写入后再做最终导出以避免丢数据数据量大时该方式会产生停机可先在运行中的实例上做一次测试导出估算耗时。基准测试仓库提供了针对自托管性能评估的指引 benchmarking.md以及load_generatorcrate 与工作负载配置crates/load_generator可用于压测后端的读写吞吐。用 knobs 做高级调优大量细粒度配置项定义在 crates/common/src/knobs.rs全部通过环境变量配置。需要把它们添加到docker-compose.yml的env段常见可覆盖项已列在 compose 文件中。以并发类 knob 为例源码中APPLICATION_MAX_CONCURRENT_QUERIES与APPLICATION_MAX_CONCURRENT_MUTATIONS默认值为 16knobs.rs 第 1065-1090 行而APPLICATION_MAX_CONCURRENT_V8_ACTIONS与APPLICATION_MAX_CONCURRENT_NODE_ACTIONS的默认值为 64knobs.rs 第 1096-1111 行另有APPLICATION_MAX_CONCURRENT_UPLOADS默认 4。docker-compose 中把前四项统一默认设为 16。提高并发上限会直接增加系统负载超过一定阈值后性能反而下降必须基于自己的硬件与工作负载实测调参。局限性说明自托管 Convex 支持云托管产品的全部免费档特性云托管产品针对规模化做了专门的优化。如果你的目标是超大规模场景云托管仍是更合适的选择。问题与贡献加入 Convex Discord 社区#self-hosted频道寻求帮助构建与使用开源 backend 时遇到的问题通过 GitHub Issues 报告欢迎提交 bug 修复见crates/convex/CONTRIBUTING.md仓库与内部开发同步周期为数天。结语从一条docker compose up命令到生产级部署自托管 Convex 的路径清晰且高度可定制SQLite 满足开发起步Postgres/MySQL 保障生产可用性S3 承接文件与索引存储Fly.io/Railway/自有服务器覆盖各种托管偏好knobs 与基准测试则赋予你按负载精细调优的能力。以 self-hosted/README.md 为入口配合 self-hosted/advanced 系列文档与 docker-compose.yml你可以在自己的基础设施上完整复刻 Convex 的开发体验。赞分享数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载相关推荐Earthly 自托管卫星Self-Hosted Satellites部署与运维完全指南Earthly 自托管卫星Self Hosted Satellites部署与运维完全指南 本文以 docs/cloud/satellites/self hoCI/CDDevOps构建工具ToolJet 部署选型指南自托管Self-Hosted与云服务Cloud的完整决策与实践路径ToolJet 部署选型指南自托管Self Hosted与云服务Cloud的完整决策与实践路径 ToolJet 是一个面向内部工具、数据看板、业务应用低代码后端前端AI 应用MCP 服务基于 Docker Compose 部署 MLflowPostgreSQL 元数据存储 S3 兼容对象存储RustFS完整指南基于 Docker Compose 部署 MLflowPostgreSQL 元数据存储 S3 兼容对象存储RustFS完整指南 一、背景与核心价值 MMLOpsLLMOps人工智能大模型模型评测LLM 网关可观测性创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表