用 1Panel 应用商店一键部署 DBX:15MB 轻量级数据库客户端自托管指南
【免费下载链接】dbx15MB,轻量级跨平台数据库客户端、数据库管理工具。支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、DuckDB、ClickHouse、SQL Server 等。15MB, lightweight, cross-platform database client. Supports MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, ClickHouse, SQL Server and more.项目地址: https://gitcode.com/t8y2/dbx
DBX 是一款 15MB 体积的轻量级跨平台数据库客户端与数据库管理工具,除桌面版外还提供了开箱即用的 Docker 自托管形态(dbx-web)。本文以仓库中面向 1Panel 应用商店的部署清单(deploy/1panel/README.md、deploy/1panel/data.yml、deploy/1panel/latest/docker-compose.yml)为核心,完整讲解如何在 1Panel 上通过应用商店一键部署 DBX、端口与访问密码两个配置项的语义、数据持久化机制,以及镜像内部各环境变量背后的实现逻辑,让你既能快速上手部署,也能看懂容器内部实际发生了什么。
一、DBX 是什么:一份快速背景
DBX 的定位是一款同时面向桌面与 Docker 自托管的数据库客户端。官方文档的自我描述是:
25+ databases in 15 MB. Desktop & Docker self-hosting, with built-in AI assistant.
它支持的主流数据库包括:MySQL、PostgreSQL、SQLite、Redis、MongoDB、DuckDB、ClickHouse、SQL Server、Oracle、Elasticsearch、MariaDB、TiDB、OceanBase、openGauss、GaussDB、KingbaseES 等 25 种以上。核心功能覆盖:
- SQL 编辑器:语法高亮、自动补全(autocomplete)与格式化;
- AI SQL 助手:可对接 Claude、OpenAI 或任何 OpenAI 兼容的 API 端点;
- 虚拟滚动数据网格(virtual-scrolled data grid),支持单元格内联编辑;
- ER 图、Schema 对比(schema diff)、执行计划(explain plan)、字段血缘(field lineage);
- 数据导入/导出:CSV、Excel、JSON、Parquet;
- Redis 键浏览器与 MongoDB 文档 CRUD;
- SSH 隧道、暗色模式、i18n(简体中文与英文)。
在仓库中,桌面版运行于apps/desktop(Vue + TypeScript),而 Docker 自托管形态由 Rust 编写的 Web 服务dbx-web(crates/dbx-web)承载,它把前端静态资源与后端能力打包进同一个容器进程,这正是 1Panel 应用商店部署方案的载体。
二、1Panel 应用商店元数据:DBX 是如何上架的
1Panel 是一款流行的 Linux 服务器运维管理面板,其应用商店通过data.yml描述每个应用。DBX 在仓库中提供了两份商店元数据:
- 根目录版本:deploy/1panel/data.yml;
latest版本(带表单字段的安装向导):deploy/1panel/latest/data.yml。
2.1 应用基本信息(根目录 data.yml)
name: DBX tags: - 工具 title: 轻量级数据库管理工具 description: 轻量级数据库管理工具,支持 25+ 种数据库 additionalProperties: key: dbx name: DBX tags: - Tool shortDescZh: 轻量级数据库管理工具,支持 25+ 种数据库 shortDescEn: Lightweight database manager supporting 25+ databases description: en: Lightweight database manager supporting 25+ databases zh: 轻量级数据库管理工具,支持 25+ 种数据库 type: tool crossVersionUpdate: true limit: 0 recommend: 0 website: https://github.com/t8y2/dbx github: https://github.com/t8y2/dbx document: https://github.com/t8y2/dbx#readme architectures: - amd64各字段含义如下:
| 字段 | 说明 |
|---|---|
name/title/description | 应用商店中显示的名称与简介(中文) |
additionalProperties.key | 应用唯一标识,为dbx,用于商店内索引与安装实例命名 |
shortDescZh/shortDescEn | 中英文短描述,出现在卡片列表 |
additionalProperties.type | 应用类型,值为tool(工具类) |
crossVersionUpdate | 是否支持跨大版本升级,这里为true |
limit/recommend | 均为 0,表示不限制、不特别推荐 |
architectures | 支持的 CPU 架构,当前为amd64 |
注意:
website、github、document字段指向的外部地址仅作为商店内展示链接;architectures目前仅声明了amd64,意味着该商店条目默认面向 x86_64 服务器安装。
2.2 安装表单字段(latest/data.yml)
latest目录下的版本在安装向导中暴露了两个可配置项,安装时 1Panel 会把它们转换为环境变量注入容器:
additionalProperties: formFields: - default: 4224 edit: true envKey: PANEL_APP_PORT_HTTP labelZh: 端口 labelEn: Port label: zh: 端口 en: Port required: true rule: paramPort type: number - default: dbx_password edit: true envKey: PANEL_DB_PASSWORD labelZh: 访问密码 labelEn: Access Password label: zh: 访问密码 en: Access Password required: true rule: paramComplexity type: password random: true两个字段的语义:
| 表单字段 | 环境变量 | 默认值 | 校验规则 | 说明 |
|---|---|---|---|---|
| 端口(Port) | PANEL_APP_PORT_HTTP | 4224 | paramPort | 宿主机映射端口,对应容器内 DBX Web 默认监听端口 4224 |
| 访问密码(Access Password) | PANEL_DB_PASSWORD | dbx_password | paramComplexity(复杂度校验),random: true表示安装时可随机生成 | 首次访问 DBX Web 的登录密码,通过DBX_PASSWORD注入容器 |
其中type: password会让 1Panel 在安装表单里以密码输入框呈现;random: true支持一键生成强密码,避免沿用默认弱口令。
三、docker-compose 部署清单逐行拆解
deploy/1panel/latest/docker-compose.yml 是 1Panel 实际执行的编排文件:
services: dbx: image: t8y2/dbx:latest container_name: ${CONTAINER_NAME} ports: - "${PANEL_APP_PORT_HTTP}:4224" environment: - DBX_PASSWORD=${PANEL_DB_PASSWORD} volumes: - ./data:/app/data restart: unless-stopped networks: - 1panel-network labels: createdBy: "Apps" networks: 1panel-network: external: true逐项说明:
image: t8y2/dbx:latest:使用官方镜像的最新标签。该镜像由仓库根目录的 deploy/Dockerfile 多阶段构建产出(详见下一节)。container_name: ${CONTAINER_NAME}:容器名由 1Panel 安装时填充。ports: "${PANEL_APP_PORT_HTTP}:4224":将宿主机上你在表单中填写的端口映射到容器内的 4224。4224 正是dbx-web的默认监听端口(源码中unwrap_or(4224),见 crates/dbx-web/src/main.rs)。environment: DBX_PASSWORD=${PANEL_DB_PASSWORD}:把表单里设置的访问密码以环境变量DBX_PASSWORD传入容器。dbx-web启动时会用 Argon2 对明文密码加盐哈希后作为会话校验凭据(见 crates/dbx-web/src/auth.rs)。volumes: ./data:/app/data:将宿主机相对路径./data(1Panel 应用安装目录下)挂载为容器内/app/data,用于持久化dbx-web的配置与数据(见第五节)。restart: unless-stopped:除手动停止外自动重启,保证服务器重启后 DBX 自动恢复。networks: 1panel-network (external: true):接入 1Panel 预置的外部网络,使 DBX 可与同网络内的其他应用(如 MySQL、Redis 容器)互相访问,便于在 UI 中直接连接同机数据库容器。
四、镜像内部:t8y2/dbx 是怎么构建出来的
仓库根目录的 deploy/Dockerfile 展示了t8y2/dbx镜像的完整构建链,采用三个阶段:
- 前端构建阶段(
node:22-slim+ pnpm):安装依赖后执行pnpm build,产物输出到/app/dist。构建过程还会运行scripts/sync-connection-types.mjs读取plugins/connection-types与plugins/dialects,在构建期重新生成数据库清单与 TypeScript 类型。 - Rust 后端交叉编译阶段(
rust:1-bookworm+ cargo-zigbuild):为amd64/arm64交叉编译dbx-web二进制,先预编译依赖、再拷贝真实源码增量编译,产物复制到/out/linux/$TARGETARCH/。dbx-sql与dbx-types的 build.rs 会内嵌plugins/dialects与plugins/connection-types,缺目录会导致编译脚本 panic——这也是构建期必须拷贝这两份插件的原因。 - 最终运行镜像(
debian:bookworm-slim):- 安装
ca-certificates、fontconfig、fonts-dejavu-core、libfreetype6、libssl3以及openjdk-17-jre-headless; - 拷贝
dbx-web到/usr/local/bin/,前端产物到/app/static; - 声明运行期环境变量与端口:
- 安装
ENV DBX_STATIC_DIR=/app/static ENV DBX_DATA_DIR=/app/data ENV DBX_JAVA_BIN=/usr/bin/java EXPOSE 4224 CMD ["dbx-web"]可以看到容器内默认配置了三个关键环境变量:静态资源目录DBX_STATIC_DIR、数据目录DBX_DATA_DIR、以及 JDBC 外部驱动所需的 Java 可执行文件路径DBX_JAVA_BIN。安装openjdk-17-jre-headless的目的正是为了让容器内的dbx-web能够通过DBX_JAVA_BIN找到 Java 运行时,从而驱动基于 JDBC 的数据库插件(在crates/dbx-core/src/connection/jdbc.rs中,JDBC 解析器会检查DBX_JAVA_BIN是否存在,缺失时返回错误)。
五、数据持久化与密码安全:两个配置项背后的实现
5.1 数据都存到哪里
dbx-web的数据目录解析逻辑位于 crates/dbx-web/src/main.rs:优先读取DBX_DATA_DIR环境变量,未设置时才回退到$HOME/.dbx-web。1Panel 部署清单里通过./data:/app/data挂载,恰好与镜像内ENV DBX_DATA_DIR=/app/data对应——因此你的连接配置、历史记录、密码哈希等全部持久化在宿主机应用目录的data/文件夹中,即使容器重建也不会丢失。
数据落盘形式:
- 主存储为 SQLite 数据库文件
data/dbx.db(启动时由Storage::open打开); - 启动时还会执行
migrate_from_json,将旧版 JSON 数据迁移进 SQLite; - 插件(如外部 dialect)目录为
data/plugins/dialects,dbx-web会扫描加载并启动热重载监听(见 crates/dbx-web/src/main.rs)。
5.2 密码是怎么被保护的
启动时的密码优先级逻辑(crates/dbx-web/src/main.rs):
- 若设置
DBX_DISABLE_PASSWORD(取值为1/true/yes/on之一)则完全关闭密码保护——注意 1Panel 部署清单并没有设置该变量,因此默认启用了密码; - 否则若设置了
DBX_PASSWORD,则用 Argon2(随机盐)对明文密码做哈希,得到密码哈希; - 都没有时,回退读取数据库中已保存的密码哈希。
登录流程上(crates/dbx-web/src/auth.rs):登录接口对输入密码做 Argon2 校验,并内置了暴力破解防护——连续失败 5 次(MAX_ATTEMPTS = 5)会锁定 60 秒(LOCKOUT_SECS = 60)。也就是说,1Panel 安装向导里填写的访问密码并不是明文存储在容器里的,而是被哈希后用于会话认证,且带失败锁定机制,这比裸奔的弱口令方案安全得多。
安全提示:安装时建议使用 1Panel 的“随机生成”功能生成强密码(
random: true),不要保留默认值dbx_password。
5.3 端口与反向代理的衔接
默认容器监听0.0.0.0:4224(crates/dbx-web/src/main.rs),也支持DBX_PORT环境变量覆盖。如果你在 1Panel 中为 DBX 配置反向代理(如绑定域名、加 HTTPS),只需将代理目标指向宿主机映射端口(即表单中的端口),同时注意DBX_PUBLIC_BASE_PATH可用于部署在子路径(context path)下,静态资源挂载逻辑会随之调整(见mount_public_base_path相关代码)。
六、快速开始:3 步完成部署
在 1Panel 上部署 DBX 的最小路径:
- 打开应用商店,搜索“DBX”,选择安装;确认架构为 amd64 的服务器环境。
- 填写安装表单:
- 端口:默认
4224(建议改为不冲突的高位端口); - 访问密码:建议点击随机生成,并妥善保存。
- 端口:默认
- 点击确认。1Panel 会自动拉取
t8y2/dbx:latest镜像、创建容器并接入1panel-network。安装完成后通过http://服务器IP:端口访问,输入设置的密码即可登录。
登录后即可在 Web UI 中新建连接:直接使用172.x.x.x之类的容器网关地址连接同网络内的 MySQL/PostgreSQL/Redis 等容器,或填写公网数据库地址;SQL 编辑器、AI 助手、数据导入导出等桌面版能力在 Web 版中同样可用。
七、常见问题与排查
- 忘记访问密码:由于密码哈希持久化在
data/dbx.db,可进入容器执行带DBX_PASSWORD的环境变量重启(覆盖数据库中的旧哈希),或直接删除data目录重新初始化(会同时丢失连接配置,谨慎操作)。 - 端口冲突:修改表单端口后重新部署即可;容器内端口固定为 4224,无需改动。
- 需要连接本机数据库容器:确保目标数据库容器也加入了
1panel-network(1Panel 安装的数据库应用默认如此),然后在 DBX 中用容器名或网关 IP 连接。 - 更换到其他架构:当前商店条目
architectures仅声明amd64;如需 arm64,可参考 Dockerfile 中已实现的 arm64 交叉编译支持自行构建镜像。
八、参考资料
- 1Panel 部署清单与元数据:deploy/1panel/README.md、deploy/1panel/data.yml、deploy/1panel/latest/data.yml、deploy/1panel/latest/docker-compose.yml
- 镜像构建定义:deploy/Dockerfile
- Web 服务入口与配置解析:crates/dbx-web/src/main.rs
- 登录认证与防爆破实现:crates/dbx-web/src/auth.rs
- JDBC 外部驱动与 Java 运行时解析:crates/dbx-core/src/connection/jdbc.rs
【免费下载链接】dbx15MB,轻量级跨平台数据库客户端、数据库管理工具。支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、DuckDB、ClickHouse、SQL Server 等。15MB, lightweight, cross-platform database client. Supports MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, ClickHouse, SQL Server and more.项目地址: https://gitcode.com/t8y2/dbx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考