mcpField
D
Drobek

Drobek

远程服务
drobek.app云与基础设施4今天更新

关于 Drobek

Drobek 是供已有 AI Agent 使用的开源 Web 应用托管平台,Agent 通过 MCP 编写应用,平台负责编译、预览、版本管理和发布。它提供可自托管部署及认证、数据、表单、邮件、文件和 API 代理等平台模块。

主要功能

  1. 01MCP 驱动的应用构建流程
  2. 02编译反馈与实时预览
  3. 03不可变版本和发布回滚
  4. 04认证、数据及表单模块
  5. 05邮件、上传与 API 代理模块
  6. 06仪表板管理应用和密钥

适用场景

  1. 01让 Agent 构建并预览 Web 应用
  2. 02在发布前迭代修正应用
  3. 03将已构建版本发布或回滚
  4. 04为应用配置登录、数据和外部 API

MCP 相关

Drobek 提供支持 OAuth 2.1 的 MCP 服务,Agent 可调用工具创建应用、写入文件、获取编译结果并发布版本。支持连接托管实例或自托管实例。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://drobek.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

Drobek 像素吉祥物

drobek

CI Release License: AGPL-3.0 Image

开源氛围编程托管平台:你的 AI Agent 构建 Web 应用,drobek 负责编译、预览和发布。

带上 Claude、Claude Code、Cursor 或 Codex。你的 Agent 通过 MCP 连接, 直接在工作区中编写应用,并获取编译反馈和实时预览。何时发布由你决定。 平台模块提供登录、数据、表单、电子邮件、上传、外部 API 和定时导入; 控制面板让你管理应用、用户和密钥。 如果你用 Claude artifact 构建了应用,你的 Agent 会原样迁移文件, 并为你提供预览。

这是一个开源、可自托管的 Lovable、Bolt.new 和 v0 替代方案,适合 已经拥有 Agent 的用户:drobek 没有自己的聊天功能,由你使用的 Agent 负责构建, 而 drobek 负责编译、版本管理、预览并托管它编写的内容。

试用 drobek.app · 自托管 · 作品集 · 文档

在 YouTube 上观看 33 秒的 drobek 演示

35 秒了解代理模块:你的 Agent 注册外部 API,管理员确认谁可以调用它,而你在控制面板中输入的密钥 永远不会传给应用或 Agent。

MCP Registry 名称:io.github.freema/drobek。托管的 Streamable HTTP 端点为 https://drobek.app/mcp,并使用 OAuth 2.1。

选择运行位置

开始使用
drobek.app维护者托管的实例。登录,然后连接你的 Agent。
你自己的服务器使用 Postgres、Redis 和 Caddy 运行相同的公开镜像。按照自托管快速入门操作,然后将 Agent 连接到你服务器的 /mcp 端点。

核心部分采用 AGPL-3.0 许可。构建、测试和自托管均无需访问 运营 drobek.app 的私有仓库。 Agent 插件采用 MIT 许可,可 连接到任一实例。

看看大家构建了什么

  • Drobek Tycoon — 可玩的托管公司模拟游戏,共有三个关卡。
  • Pokédex — 通过 drobek 的代理模块搜索 PokéAPI 并查看统计数据,还可查看实时请求日志。
  • Pixel Wall — 由身份验证、数据和其他平台模块支持的共享 64 × 40 画布。
  • Pixel Crumbs — 浏览器像素艺术和动画编辑器。
  • Drobek Skok — 带排行榜的像素平台游戏。
  • Pekárna Drobek — 小型面包店的演示网站。

这些都是 drobek.app 上的公开应用。浏览作品集 查看更多示例。

在 drobek 上运行的 Drobek Tycoon

构建你的第一个应用

  1. 选择上方的一个实例,然后连接你的 Agent。

  2. 请求构建一个小型应用,例如:

    Build a shift planner for our team on drobek.
    Let people sign in and see their own shifts.
    Give me a preview to try before publishing.
    
  3. 打开预览,请求修改,然后在准备就绪时让 Agent 发布。

应用在浏览器中运行。其后端由已安装的平台模块提供;任意应用服务器代码和每个应用单独执行 npm install 都不在执行模型范围内。如需集成你自己的后端, 编写平台模块。

工作流程

  1. 将 drobek 连接到你的 Agent(一个使用 OAuth 的 MCP 服务——你在浏览器中批准连接)。
  2. 请求构建一个应用:“为我们的仓库制作一个排班规划工具”。Agent 调用 create_app,获取一个可编译的初始项目以及规则说明。
  3. 它调用 write_files。drobek 在进程内使用 esbuild 编译文件,并在同一响应中返回编译错误;Agent 修复错误后再次写入。每次写入都会生成一个不可变版本。
  4. 每次成功编译后,应用都会立即在其预览主机上运行: https://<slug>--preview.<APPS_DOMAIN>——Agent 会将链接发给你。
  5. 满意后,Agent 会调用 publish,版本便会在 https://<slug>.<APPS_DOMAIN>(或你自己的域名)上线。发布较早的版本即可回滚。

这样构建的原因:

  • 服务器绝不执行应用代码。 服务器只负责编译和提供服务;编译结果只在浏览器中运行。每个应用无需独立沙盒,无需 npm install,也不会执行 Agent 的服务器端代码。
  • 密钥绝不会经过 Agent。 应用所有者在控制面板中设置密钥;模块在服务器端使用这些密钥。
  • 每个应用都有自己的源站(<slug>.<APPS_DOMAIN>),与控制面板的源站相互独立。
  • 一个进程、一个镜像(ghcr.io/freema/drobek)+ Postgres + Redis (TLS 使用 Caddy)。可在普通的小型服务器上运行。

核心概念

Agent 插件和平台模块负责不同的工作。 插件教你的 Agent 如何在 drobek 上构建应用。模块在 drobek 服务器上运行,为应用提供后端功能。安装插件不会安装服务器模块。参见仓库与兼容性映射。

  • 工作区 — 包含不同角色的人员(工作区管理员 / 编辑者 / 查看者)。

  • 应用 — 全局唯一的 slug,由某个工作区拥有。其主机包括: <slug>.<APPS_DOMAIN>(已发布)、<slug>--preview.<APPS_DOMAIN>(最新编译成功的版本)、<slug>--v<N>.<APPS_DOMAIN>(确切的第 N 个版本),以及已验证的自定义域名。

  • 版本 — 应用源文件和编译输出的不可变编号快照。发布时只需移动一个指针。

  • 平台模块 — 应用唯一可用的后端:应用主机上 /__drobek/v1/<name> 下的路由、浏览器 SDK 中的 drobek.<name>、由 Agent 提议且在存在风险时由所有者确认的每应用配置,以及供 Agent 阅读的技能。内置模块(位于 modules/,通过 DROBEK_MODULES 启用):

    • auth — 应用用户通过邮件中的验证码登录(允许列表、管理员、<LoginGate>、所有者可撤销的会话);
    • data — 具有逐操作规则(public / user / owner / admin)、JSON Schema 和 CSV 的记录集合;
    • forms — <Form> 提交内容会存储并通过邮件发送给所有者,同时提供机器人防护;
    • email — 向应用所有者发送通知(绝不发送给任意地址),并设有每应用及服务器级预算;
    • files — 终端用户上传文件,系统会根据字节内容识别文件类型,并设有每应用配额;
    • proxy — 在 SSRF 防护机制后调用外部 API,并在服务器端注入密钥。

    运营者可以依据公开契约添加自己的模块: npm create drobek-module@latest <name> 会生成一个模块脚手架,使用 npm 包 @freema/drobek-modules + @freema/drobek-sdk(通过 npm 别名导入为 @drobek/modules / @drobek/sdk)—— docs/MODULES.md → 编写模块。

自托管快速入门

你需要:

  • 一台具有公网 IPv4(和/或 IPv6)的服务器,架构为 linux/amd64(v1 没有 ARM 镜像),且 80 和 443 端口可从互联网访问;

  • 一个用于控制面板的域名和一个用于应用的域名。请在第 3 步之前创建这些 DNS 记录(Let's Encrypt 会检查它们):

    记录指向示例
    控制面板主机的 A(和/或 AAAA)记录服务器drobek.example.com
    通配符 A/AAAA *.<APPS_DOMAIN>服务器*.apps.example.net

    为应用使用单独的可注册域名(如在 example.com 旁使用 example.net)更安全;使用 apps.<your dashboard domain> 也可以。 完全没有 DNS(测试机器)?在第 3 步使用 DOMAIN=localhost——Caddy 的本地 CA(tls internal),只能从机器本身访问。

  • 一个 SMTP 账户(主机、端口、用户名、密码、发件人地址)或一个 Resend API 密钥——登录验证码会通过电子邮件发送。

所有命令都以 root 身份运行(或在命令前加上 sudo)。

1. Docker、git 和 go-task

curl -fsSL https://get.docker.com | sh
apt-get install -y git openssl
snap install task --classic
docker compose version     # → Docker Compose version v2.x (or newer)
task --version             # → Task version: v3.x

2. drobek 文件(compose 文件、脚本、环境变量模板——镜像本身来自 GHCR)

git clone https://github.com/freema/drobek /opt/drobek
cd /opt/drobek
git checkout "$(git tag -l 'v*' --sort=-v:refname | head -n 1)"   # the newest release (skip before the first one)

3. 配置——生成所有密钥,写入 .env.production(权限模式 600),使用镜像自带的生成器渲染 deployments/Caddyfile(主机上无需安装 Node):

DOMAIN=drobek.example.com APPS_DOMAIN=apps.example.net \
[email protected] [email protected] \
SMTP_HOST=smtp.example.com SMTP_PORT=587 [email protected] \
[email protected] \
task selfhost:init

预期输出(已删节):

✓ created .env.production from .env.production.example (mode 600)
✓ generated POSTGRES_PASSWORD
✓ generated DROBEK_MASTER_KEY
✓ generated TLS_ASK_TOKEN
✓ dashboard https://drobek.example.com · apps https://<slug>.apps.example.net
✓ TLS mode for the app hosts: on-demand
✓ rendered deployments/Caddyfile (on-demand)
✓ docker compose config: OK

然后填入 SMTP 密码(切勿在命令行中输入):

nano .env.production       # SMTP_PASS='…'   (single quotes if it has $, # or spaces)

task selfhost:init 不会询问任何内容,也不会覆盖密钥;你可以随时再次运行(更改 TLS 设置后,请运行 task tls:reload)。 真实域名的 TLS 默认模式为按需(每个应用主机一个 Let's Encrypt 证书,由 drobek 控制是否签发);使用 TLS_MODE=wildcard-file 或 TLS_MODE=dns 则选择通配符证书——参见 docs/SELF-HOSTING.md 中的“TLS”。

4. 启动

docker compose --env-file .env.production -f docker-compose.production.yaml up -d --wait

首次启动时会拉取镜像,drobek 会应用所有数据库迁移。预期结果:Container drobek-prod-postgres-1 Healthy、…-redis-1 Healthy、…-drobek-1 Healthy、…-caddy-1 Healthy。

curl -s https://drobek.example.com/healthz      # → {"ok":true,"db":"up","redis":"up"}
curl -s https://drobek.example.com/api/version  # → {"name":"drobek","sha":"<commit>","version":"vX.Y.Z","commitTime":"…","startedAt":"…","modules":[…]}

提示:alias dc='docker compose --env-file .env.production -f docker-compose.production.yaml' ——本指南的其余部分会完整写出命令。

5. 登录——打开 https://drobek.example.com,输入 SUPERADMIN_EMAIL,再输入通过电子邮件收到的 6 位验证码。登录后会进入 /me,其中包含一个个人工作区。

6. 连接 Agent(Claude Code)

claude mcp add --transport http drobek https://drobek.example.com/mcp

Claude Code 会发现 drobek 的 OAuth 服务,在浏览器中打开授权页面(read、write、publish),并获取与你绑定的令牌。如果 Agent 所在的机器上没有浏览器,请改为在服务器上创建 API 密钥,并将其作为标头传入:

docker compose --env-file .env.production -f docker-compose.production.yaml exec drobek \
  node node_modules/@drobek/oauth/dist/cli/api-key-create.js \
  --email [email protected] --name laptop --scopes read,write,publish
# → drk_…   (shown once)
claude mcp add --transport http drobek https://drobek.example.com/mcp \
  --header "Authorization: Bearer drk_…"

7. 发布应用——让 Agent 执行:“在 drobek 上构建一个小费计算器并发布。” 它会依次调用 create_app → write_files → publish;打开它返回的 published_url(https://tip-calculator.apps.example.net)。使用按需 TLS 时,首次访问新的应用主机需要等待几秒钟以获取证书。

没有 DNS 的测试机器——使用 Caddy 的本地 CA 执行相同步骤:

DOMAIN=localhost [email protected] SMTP_HOST=… task selfhost:init   # → TLS mode internal
docker compose --env-file .env.production -f docker-compose.production.yaml up -d --wait
docker compose --env-file .env.production -f docker-compose.production.yaml cp \
  caddy:/data/caddy/pki/authorities/local/root.crt ./drobek-root.crt
curl --cacert drobek-root.crt https://localhost/healthz

在浏览器/操作系统中信任 drobek-root.crt,即可在使用时不出现警告(Node 客户端:NODE_EXTRA_CA_CERTS=drobek-root.crt)。应用主机为 https://<slug>.apps.localhost,浏览器会将其解析到机器本身。 HTTPS_PORT=8443(以及 HTTP_PORT=8080)可让 Caddy 改用非 443 端口——此时所有 URL 都会带上端口。

备份(task backup、task backup:verify、task restore)、升级(task selfhost:upgrade)、轮换 DROBEK_MASTER_KEY(task selfhost:rekey)、三种 TLS 方式、自定义域名、滥用处理和所有设置: docs/SELF-HOSTING.md。

连接你的 Agent

MCP 端点为 <PUBLIC_APP_URL>/mcp(OAuth 2.1;客户端会自行发现、注册并征求你的同意)。作用域:read、write、publish;令牌与你绑定,可访问你所属的每个工作区,并遵循你在各工作区中的角色。

  • **Claude Code:**运行 claude mcp add --transport http drobek https://drobek.example.com/mcp,然后输入 /mcp → 登录。对于托管版 drobek,运行 claude plugin marketplace add freema/drobek-plugin 和 claude plugin install drobek@drobek(MCP 服务 + 构建技能 + /drobek:build-app)。
  • **Claude(网页端 / 桌面端):**使用 /mcp URL 添加自定义连接器。
  • **Cursor:**在 ~/.cursor/mcp.json 中配置 { "mcpServers": { "drobek": { "url": "https://drobek.example.com/mcp" } } }。
  • **Codex:**对于托管版 drobek,运行 codex plugin marketplace add freema/drobek-plugin、codex plugin add drobek@drobek、codex mcp login drobek。
  • **脚本 / CI:**从 /me/api-keys 获取个人 drk_… API 密钥,并将其作为 Authorization: Bearer drk_… 使用。

Agent 可使用这些工具:list_apps、create_app、duplicate_app、get_app、read_file、write_files、restore_version;管理版本历史的 list_versions、keep_version、delete_versions、publish、set_gallery_listing;管理应用设置和生命周期的 unpublish、set_visibility、set_frame_ancestors、release_lease、delete_app、skill_info、configure_module、query_data;管理应用存储数据的 create_records、update_record、delete_record、delete_collection、purge_orphan_records;管理访客数量的 get_logs、get_analytics;管理视频、音频、图像和字体的 create_asset_upload、list_assets、delete_asset(使用上传 URL,文件不会经过模型);管理所有者模块标签页的 list_form_submissions、delete_form_submission、list_end_users、set_end_user_role、set_end_user_blocked、sign_out_end_users、list_uploads、delete_upload、remove_module_secret 和 list_activity;管理成员通过预览中的 Feedback 按钮留下的备注的 list_feedback、get_feedback_screenshot(以图像形式附加到备注的屏幕截图)、resolve_feedback 和 delete_feedback;查看用户所见内容的 request_screenshot(在打开的预览中显示 Capture 栏)和 get_screenshot;管理自定义域名的 list_domains、add_domain、verify_domain、set_primary_domain、remove_domain;管理代理模块外部 API 的 list_upstreams、register_upstream、set_upstream_streaming、remove_upstream;管理同步模块定时导入的 sync_now;以及管理工作区的 create_workspace、list_members、invite_member、set_member_role、remove_member 和 delete_workspace(超级管理员还可使用 set_workspace_publishing、set_workspace_module、takedown_app、restore_app 和 set_gallery_hidden)。完整的 Agent 合约(作用域、简介、技能、/llms.txt)见 docs/AGENT.md;运行中的服务会在 /llms.txt、/llms-full.txt 和 /build-with-your-agent 提供这些内容。不使用插件时,可运行 cp -r skills/drobek ~/.claude/skills/drobek,教 Agent 使用这一工作流程。

本地开发

前置条件:运行服务栈需要 Docker(compose v2);在主机端运行 task check / task e2e 需要 go-task 3、Node 22 和 pnpm 10。

git clone https://github.com/freema/drobek && cd drobek
cp .env.example .env
# Two edits make it yours (the rest have working dev defaults):
#   1. SUPERADMIN_EMAIL  → the email you'll sign in with (becomes super-admin)
#   2. DROBEK_MASTER_KEY → a real key:  openssl rand -hex 32
task dev          # or: docker compose up -d --build
服务主机端口检查方式
drobek(仪表板 + OAuth AS + MCP /mcp)3041GET /healthz → {ok,db,redis}(依赖项不可用时返回 503);GET /health → {ok:true}
postgres 175441pg_isready
redis 76391redis-cli ping
mailpit(开发用 SMTP 接收器)8025登录码会发送到这里

开发服务栈会运行所有内置模块以及示例模块 drobek-module-hello 和 drobek-module-acme-crm(可选,通过 task dev 安装到 ./.modules)。在 localhost:3041 登录 (验证码位于 Mailpit),然后将 Agent 指向 http://localhost:3041/mcp。

在本地打开应用。 APPS_DOMAIN=apps.localhost:3041,浏览器 会将所有 *.localhost 域名解析到你的计算机——无需修改 /etc/hosts:

主机提供内容
http://<slug>--preview.apps.localhost:3041最新的已编译版本
http://<slug>.apps.localhost:3041已发布版本(首次发布前会显示“尚未发布”)
http://<slug>--v<N>.apps.localhost:3041确切的 N 版本

curl 和 Node 并非在所有环境下都能解析 *.localhost;请改为在 Host 请求头中发送应用主机名:

curl -i -H 'Host: <slug>--preview.apps.localhost:3041' http://127.0.0.1:3041/

浏览器会拒绝纯 http://localhost 上的 __Host- Cookie,因此 HTTP 开发 服务栈(NODE_ENV ≠ production)会使用不带前缀、但仍仅限主机的 drobek_session / drobek_app_access / drobek_eu;生产环境和所有 HTTPS 来源都会使用 __Host- 名称。task dev:tls 会通过本地 CA,让开发服务栈 经由 Caddy 在 https://localhost 上运行。对于不需要 OAuth 流程的脚本:task api-key:create [email protected] NAME=laptop SCOPES=read,write。

常用命令:

task dev          # build + start the stack, wait until healthy
task check        # host-side gate: install, doc-lint, build packages + app bundle, typecheck, lint, knip, unit tests
task logs         # tail the drobek service
task health       # curl the health endpoints
task e2e          # Playwright suite (incl. @local specs) vs the stack
task e2e:image    # what CI runs: the prod image behind Caddy + the whole suite
task e2e:smoke    # @smoke specs only (safe against any target, prod included)
task build        # build the production image ghcr.io/freema/drobek:<sha>
task prod:proof   # build + prove the prod image (size, non-root, fail-closed, live boot)
task dev:tls      # dev stack behind Caddy (tls internal); task dev:tls:down to leave
task db:generate  # drizzle-kit generate (journal __drizzle_migrations_core)
task down         # stop the stack (docker compose down -v also wipes the data)

贡献者规则和仓库结构图:CLAUDE.md。 公开仓库、Agent 插件与服务模块的区别,以及外部使用者检查:docs/ECOSYSTEM.md。

端到端测试

tests-e2e 是一个包含两个层级的 Playwright 测试套件:

  • @local — 需要本地堆栈:直接对 Postgres / Redis / Mailpit 进行填充和读取。global-setup.ts 会先对核心表执行 TRUNCATE,但仅当 设置了 ALLOW_DESTRUCTIVE=1,且 DATABASE_URL 的主机在允许列表 (localhost、127.0.0.1、postgres)中时才会执行。

  • @smoke — 仅使用公共 HTTP + MCP,可安全用于生产环境:绝不访问 数据库、Redis 或 Mailpit。MCP 冒烟测试循环(mcp-loop.spec.ts)使用从 环境变量读取的 SMOKE_API_KEY 中的 drk_ 密钥登录, 创建、预览并发布一个 smoke-* 应用,不留下任何残留。 MCP 没有删除工具,因此测试会按目标环境清理:针对本地堆栈 (TEST_ENV=local),会创建一个全新的 smoke-<random> 应用,并在测试结束时 删除它——即使测试失败也会删除——通过仪表板的删除操作完成, 并使用电子邮件 OTP(Mailpit)以冒烟测试用户身份登录;针对任何 其他目标(生产环境),则为每个密钥复用一个固定应用, smoke-<12 hex of a SHA-256 of the key>(list_apps → get_app,然后创建 新版本并发布),因此生产环境中每个冒烟测试身份恰好保留一个冒烟测试应用:

    BASE_URL_WEB=https://drobek.app SMOKE_API_KEY=drk_… task e2e:smoke
    

    如果没有密钥,目标为 localhost 时会跳过该测试,在其他任何目标上都会失败; 运行 task e2e 时,会在本地数据库中生成一个一次性密钥。

mcp-loop.spec.ts 是 Agent 循环的端到端测试:使用官方 MCP SDK 客户端 和 OAuth provider(401 → discovery → DCR → 由 Playwright 驱动的 PKCE consent → token),然后依次执行 list_apps → create_app → write_files(编译错误 → 修复)→ 预览主机 → publish → 生产主机 → restore_version → get_app,并断言整个流程在 90 s 内完成。

task e2e 针对开发堆栈运行(task dev)。task e2e:image 是 CI 流程(.github/workflows/ci.yml 运行相同的 scripts/e2e-image.sh): 构建生产镜像,使用 docker-compose.e2e.yaml 启动(项目名为 drobek-e2e,使用独立的 loopback 端口,因此可以与开发堆栈并行运行),并在 Caddy 后方通过 tls internal 提供 https://localhost:8443 和 https://<slug>--preview.apps.localhost:8443,让它迁移一个全新的数据库,然后 运行 @smoke + @local(阶段 1);再使用 EMAIL_TRANSPORT=relay 和 PUBLISH_APPROVAL=approval 重新创建 drobek,并运行 需要这些设置的测试(阶段 2),最后拆除所有内容。如果某个测试在两个阶段中都未运行, 跳过保护脚本(scripts/e2e-skip-guard.mjs)会使此次运行失败。镜像以 NODE_ENV=production 运行,会忽略开发堆栈的快捷设置,因此 e2e 堆栈会提供符合生产环境形态的替代服务: 模拟 IdP(tests-e2e/mock-oidc.mjs)通过 Caddy 使用 https,作为服务端的 AUTH_OIDC_ISSUER;DNS 服务器(tests-e2e/dns-mock.mjs)作为 DOMAINS_DNS_SERVERS,从与开发 DNS 模拟器相同的 Redis 密钥中响应;以及 drobek 自身在 127.0.0.1:3451 上的端口,供仅由 Caddy 发送的内容使用(TLS 请求、客户端的 X-Real-IP)。设置 DROBEK_IMAGE=… 可跳过构建,设置 E2E_KEEP=1 可保留堆栈;额外参数会用一次 Playwright 运行替代各阶段 (task e2e:image -- tests/mcp-loop.spec.ts;设置 E2E_PHASE=2 可针对阶段 2 的配置运行)。

两个堆栈都会像运维人员那样安装两个外部模块: examples/drobek-module-acme-crm 和仅供运维人员使用的测试 fixture tests-e2e/fixtures/drobek-module-ops-probe(开发堆栈使用 task module:example 和 task module:fixture,镜像流程使用 scripts/e2e-image.sh)。该 fixture 是两个堆栈的错误报告器 (ERROR_REPORTER=capture:报告会发送到 e2e 的 proxy-echo,测试会从那里读取报告),也是 开发堆栈的电子邮件传输方式(EMAIL_TRANSPORT=relay:每条消息都会通过其 HTTP API 发送到 Mailpit); 镜像流程在第一阶段使用内置 SMTP,在第二阶段切换为 relay。

版本与升级

drobek 遵循语义化版本规范;在 0.x 阶段,小版本发布可能需要操作员执行步骤,具体会在发行说明中注明。每个版本发布都对应一个 git 标签 vX.Y.Z、一个不可变镜像 ghcr.io/freema/drobek:vX.Y.Z、一个 GitHub 发行版以及 CHANGELOG.md 中的一条记录;每次发布时,latest 和 previous 都会更新(docs/SELF-HOSTING.md → 镜像标签)。迁移只会向前执行,并作为 task selfhost:upgrade 的独立步骤运行;如果数据库版本比镜像新,镜像将拒绝启动并指出需要运行的版本。回滚时需使用上一个镜像,并在该版本迁移过数据库时,恢复迁移前所做的备份(升级与回滚)。模块会声明所需的契约版本范围,如果服务无法满足模块的要求,就会拒绝启动(docs/MODULES.md → 兼容性)。

扩展 drobek:编写模块

应用的后端由一组平台模块组成,任何人都可以编写模块:将基于已发布契约的 npm 包安装到应用中即可,操作员无需构建镜像。

npm create drobek-module@latest erp   # routes, SDK slice, migration, SKILL.md, tests

该契约以 @freema/drobek-modules 的名称发布在 npm 上;脚手架会以模块代码导入时使用的名称安装它:@drobek/modules("@drobek/modules": "npm:@freema/drobek-modules@^X.Y.Z")。

docs/MODULES.md → 编写模块介绍了契约、发布与安装;examples/drobek-module-hello 是一个可运行的示例,examples/drobek-module-acme-crm 则是一个无需镜像即可安装的可选模块;已发布的模块列出了其他人可以安装的模块。

参与贡献

欢迎提交问题、提问和拉取请求,详情请参阅 CONTRIBUTING.md。问题和想法可发布到讨论区;安全问题请私下报告(SECURITY.md)。

文档

文档内容
docs/ARCHITECTURE.md单进程、源站、版本、编译器、服务、模块、TLS、作业
docs/SELF-HOSTING.md快速入门、compose、所有环境变量、TLS、备份、升级、自定义域名、滥用
docs/MODULES.md平台模块契约和内置模块
docs/AGENT.md连接 Agent、工具与范围、简介、技能、llms.txt
docs/SECURITY.md威胁模型以及如何报告漏洞
docs/LICENSING.mdAGPL-3.0 §13 及与托管版 drobek.app 的界限
CHANGELOG.md所有版本发布记录

许可证

AGPL-3.0 — 请参阅 docs/LICENSING.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。