
数据库客户端数据库桌面应用CLI后端MCP 服务AI 应用【免费下载链接】dbx25 MB lightweight cross-platform database client for 90 databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90 数据库提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。项目地址https://gitcode.com/gh_mirrors/dbx7/dbx点击查看免费下载DBX 项目在deploy/database/下为 90 数据库维护了一套可复现的 Docker Compose 测试环境每个数据库版本都有独立的 init 初始化目录。而 Redis 是其中少数不走镜像 init 目录约定的特殊案例它的初始化与验证完全交由make db-verify DBredis7.4创建的dbx:smoke键来完成。本文以 deploy/database/redis/7.4/init/README.md 为起点结合 Makefile、scripts/database-env.mjs、recipe.json 与 compose.yaml 的源码实现讲清这套冒烟验证机制的前因后果、配置写法与底层调用链读完即可自己动手复现与扩展。Redis 为什么没有 init 目录约定DBX 的数据库测试环境遵循统一的 Recipe 布局deploy/database/README.md 给出了标准结构product/version/ ├── recipe.json # connection fields and smoke commands ├── compose.yaml # Docker Compose environment └── init/ # data initialized with the environment其中init/目录的职责是存放随环境一起初始化的数据。但对于 Redis情况不同Redis 官方镜像没有自动执行 init 目录内脚本的约定不像 MySQL 的/docker-entrypoint-initdb.d/那样会在首次启动时按序执行.sql/.sh文件因此在 deploy/database/redis/7.4/init/README.md 中明确写下了这一设计决策Redis has no automatic init directory convention.make db-verify DBredis7.4creates and reads thedbx:smokekey.也就是说这个init/README.md不是要挂载执行的脚本而是留给维护者的说明文档它解释了 Redis 的初始数据由验证命令动态产生而不是在容器启动时通过目录约定注入。同版本 deploy/database/redis/3.0.7/init/README.md 的措辞完全一致命令换成make db-verify DBredis3.0.7印证了这是 Redis 这一类数据库的通用约定而非某个版本的偶然设计。从校验逻辑看每个 recipe 的init目录是强制存在的scripts/database-env.mjs中的validateRecipe()会检查init目录存在且非空否则报错init directory must contain a file而 Redis 正是用这份 README 来满足该约束同时把初始化的职责交给冒烟验证流程。dbx:smoke键的完整定义recipe.json 中的 smoke 步骤真正定义冒烟键的是 Redis 7.4 的 recipe.json。它同时承载了连接字段、shell 入口与冒烟命令三部分信息{ database: redis, name: Redis, version: 7.4.9, displayVersion: 7.4, image: docker.cnb.cool/znb/images/redis:7.4.9-alpine, platforms: [linux/amd64, linux/arm64], service: database, defaultPort: 6379, connection: { host: 127.0.0.1, port: 10501, username: default, password: 123456, database: 0 }, hostPorts: { DB_PORT: 10501 }, shell: [redis-cli, -a, ${DB_PASSWORD}], smoke: { steps: [ { name: seed smoke key, command: [redis-cli, -a, ${DB_PASSWORD}, SET, dbx:smoke, DBX smoke], expect: OK }, { name: read smoke key, command: [redis-cli, -a, ${DB_PASSWORD}, GET, dbx:smoke], expect: DBX smoke } ] } }关键字段的语义如下smoke.steps冒烟验证步骤数组。每一步必须包含name步骤名、command在容器内执行的命令数组和expect期望输出中包含的文本。校验器要求每一步三项齐全见validateRecipe()中every smoke step needs a name and command与every smoke step needs an expected output两条检查。第一步seed smoke key通过redis-cli -a ${DB_PASSWORD} SET dbx:smoke DBX smoke写入键期望输出包含OK第二步read smoke key通过GET dbx:smoke读回期望输出包含DBX smoke。写读闭环验证了带密码认证的 Redis 实例可写可读等价于一次完整的连通性 认证 读写测试。键名遵循dbx:前缀约定deploy/database/README.md明确说明 Redis 使用 DB 0 与dbx:键前缀避免与其他数据混淆。connection.database为0这是 Redis 特有的约束validateRecipe()对 Redis 强制要求connection.database等于 0对其他数据库则必须是默认库dbx。shellredis-cli -a ${DB_PASSWORD}供pnpm db:env -- shell打开交互式 Redis CLI 使用。值得一提的是 Redis 3.0.7 的 recipe.json 与 7.4 结构完全一致仅版本、镜像平台3.0.7 仅linux/amd64和宿主机端口10500不同说明这套 smoke 定义在不同大版本间保持稳定便于横向对比验证。compose.yaml容器侧的配套实现冒烟验证依赖容器内自带redis-cli这由 compose.yaml 使用的redis:7.4.9-alpine官方镜像天然保证。该文件还定义了几个对验证流程至关重要的配套项services: database: image: docker.cnb.cool/znb/images/redis:7.4.9-alpine container_name: dbx-redis-7.4 restart: always command: [redis-server, --appendonly, yes, --requirepass, ${DB_PASSWORD:-123456}] environment: # Keep the password in container env so CMD-SHELL can quote it safely. REDIS_PASSWORD: ${DB_PASSWORD:-123456} ports: - ${DB_BIND_ADDRESS:-127.0.0.1}:${DB_PORT:-10501}:6379 volumes: - data:/data healthcheck: test: [CMD-SHELL, redis-cli -a \$$REDIS_PASSWORD\ ping | grep PONG] interval: 5s timeout: 5s retries: 30 volumes: data:几个值得注意的设计点启用密码认证--requirepass ${DB_PASSWORD:-123456}默认密码为123456与 recipe.json 中的connection.password保持一致。这也是 smoke 命令必须带-a参数的原因。AOF 持久化--appendonly yes配合命名卷data:/data使验证写入的键在容器重启后仍然可读这实际上让冒烟键具备了 init 数据的持久化效果——从功能上弥补了无 init 目录约定的缺口。健康检查redis-cli -a $$REDIS_PASSWORD ping | grep PONG每 5 秒执行一次。注意这里使用$$转义让 Compose 把$REDIS_PASSWORD留给容器内的 CMD-SHELL 展开避免密码被宿主环境误展开这也是 environment 中单独保留REDIS_PASSWORD变量的原因注释里写明了 Keep the password in container env so CMD-SHELL can quote it safely。环回地址绑定端口映射默认绑定127.0.0.1:10501容器内 6379防止测试环境意外暴露到局域网。validateRecipe()对 compose.yaml 还有硬性要求镜像必须与recipe.image一致、禁止使用latest标签、必须定义 healthcheck、必须挂载命名卷、端口默认值必须与recipe.hostPorts一致、单平台镜像必须显式声明platform。Redis 7.4 与 3.0.7 的两个文件均满足这些约束。make db-verify的完整调用链回到 README 中的命令make db-verify DBredis7.4它的背后是一条完整的调用链Makefile 入口Makefile 中db-verify目标执行pnpm db:env -- verifyDB环境变量经export DB传递package.json 脚本映射pnpm db:env指向scripts/database-env.mjs入口判断位于文件末尾的process.argv[1]检查选择器解析parseDatabaseSelection(redis7.4)以最后一个分割出databaseredis、version7.4随后resolveRecipe()在deploy/database/下发现并匹配唯一 recipe多版本时会要求显式指定version启动并等待执行docker compose up -d --wait配合 compose.yaml 中的 healthcheck 等待 Redis 就绪执行 smoke 步骤见 scripts/database-env.mjs 的verify分支——对recipe.smoke.steps逐条执行其中${DB_PASSWORD}、${DB_PORT}由expandSmokeCommand()展开优先取环境变量其次取 recipe 的connection字段命令经docker compose exec -T database redis-cli ...在容器内运行输出须包含expect文本否则抛错并给出实际输出输出结果每步成功打印OK step name最终可看到OK seed smoke key与OK read smoke key。因此 README 中所说 creates and reads thedbx:smokekey 在实现层面是精确的seed 步骤写入、read 步骤读回两者共同构成验证闭环。verify还先调用ensureBootstrap()处理带bootstrap字段的 recipeRedis 不需要并在失败时以非零退出码结束方便 CI 直接接入。端口分配与安全前提Redis 在 DBX 测试环境中拥有专属宿主机端口段10500-10599该分配定义在 scripts/database-env.mjs 的DEFAULT_HOST_PORT_RANGES中Redis 7.4 默认 105013.0.7 默认 10500。每个数据库独占一个101xx-115xx段保证多个 recipe 可同时运行而不冲突也避开了常见的 6379 等公网默认端口。相关安全约束包括端口默认仅绑定127.0.0.1通过${DB_BIND_ADDRESS:-127.0.0.1}模板变量实现validateRenderedCompose()会在make db-check时逐一确认渲染后的端口映射host_ip为127.0.0.1若确实需要远程访问deploy/database/README.md明确要求显式设置DB_BIND_ADDRESS0.0.0.0、使用强密码DB_PASSWORD并配合主机防火墙保护默认密码统一为123456仅限本地开发与测试场景生产环境绝不可沿用。快速上手与自检在仓库根目录执行以下命令即可完整复现本文描述的全过程# 1. 查看全部可用数据库版本含 Redis 7.4 / 3.0.7 make db-list # 2. 启动 Redis 7.4 测试环境并打印连接信息 make db DBredis7.4 # 3. 执行冒烟验证写入并读回 dbx:smoke 键 make db-verify DBredis7.4 # 4. 停止环境保留数据卷 make db-down DBredis7.4 # 5. 彻底清理删除命名卷需显式确认 make db-reset DBredis7.4 CONFIRM1make db启动成功后还会打印DBX connection link: dbx://connection/new?typeredis...深链接在装有 DBX Desktop 的机器上可用open link直接弹出预填好的新建连接对话框链接内含密码注意不要留在共享终端历史中。如需修改或新增 recipe可参考 deploy/database/RECIPE_TEMPLATE.md 模板完成后务必运行make db-check它会先对每个 recipe 做静态校验结构、镜像、端口分配、healthcheck、命名卷、smoke 定义等再调用docker compose config验证渲染结果。Redis 两个版本的 smoke 定义之所以能持续通过检查正是因为dbx:smoke键的写入与读取步骤始终与--requirepass认证配置保持严格一致。小结Redis 之所以在init/目录下只放一份 README 而非可执行初始化脚本本质上是尊重其官方镜像无自动 init 目录约定的现实并用更贴合 Redis 生态的方式——make db-verify通过redis-cli写入并读回dbx:smoke键——完成等价的环境就绪验证。这一设计同时满足了 recipe 校验器对 init 目录的非空要求、验证了密码认证读写链路并将初始化数据的持久化交由--appendonly与命名卷完成。理解这套约定无论是排查 Redis 测试环境问题还是为其他数据库编写 recipe都能更快定位数据从哪来、如何验证这两个核心问题的答案。赞分享数据库客户端数据库桌面应用CLI后端MCP 服务AI 应用【免费下载链接】dbx25 MB lightweight cross-platform database client for 90 databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90 数据库提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。项目地址https://gitcode.com/gh_mirrors/dbx7/dbx点击查看免费下载相关推荐DBX Redis 测试环境指南init 目录约定与 dbx:smoke 冒烟键验证DBX Redis 测试环境指南init 目录约定与 dbx:smoke 冒烟键验证 DBX t8y2/dbx 在 deploy/database/ 下维数据库开发者工具桌面应用CLIMCP 服务AI 应用DBX Redis 7.4 测试环境配方解析无 init 目录约定与 dbx:smoke 冒烟键验证DBX Redis 7.4 测试环境配方解析无 init 目录约定与 dbx:smoke 冒烟键验证 导读 本文围绕 DBX 仓库中 Redis 7.4 数据数据库开发者工具桌面应用CLIMCP 服务AI 应用dbx 项目中 Redis 数据库 Recipe 的 init 目录约定与 smoke 校验机制解析dbx 项目中 Redis 数据库 Recipe 的 init 目录约定与 smoke 校验机制解析 导读 在 dbx 开源仓库的 deploy/databas数据库客户端数据库桌面应用CLI后端MCP 服务AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考