>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
PHP

为什么有了 phpMyAdmin 和重型 GUI 客户端还要用 Adminer

任何在普通 VPS 上部署过 Web 应用的人都记得这个场景。你需要紧急检查数据库中的某个表或修复某一行数据。安装 DBeaver 这样的桌面客户端并配置 SSH 隧道太耗时了。上传 phpMyAdmin 也不理想:压缩包里有成千上万个小文件,还有一堆配置项,解压后占用大量空间。

在这种情况下,Adminer 就是救星——这是捷克开发者 Jakub Vrána 的项目,在 GitHub 上已存在超过 15 年。工具的设计理念很直接:一个功能完整的数据库 Web 管理面板,全部代码塞进一个 PHP 文件里。

Table structure

工作原理

你下载一个约 400 千字节的单个文件 adminer.php。将它上传到服务器的网站目录,然后在浏览器中打开。安装就这么简单。登录表单会出现,可以选择 DBMS、主机、用户名和密码。

Adminer 的编译版本几乎可以在任何环境中运行。它只需要 PHP 5.3,这在 2000 年代末的服务器上还相当常见。如果你使用仓库源代码自己构建项目,则需要 PHP 7.4 或更高版本。

与历史上一向绑定 MySQL 的 phpMyAdmin 不同,Adminer 开箱即支持多种 DBMS:

  • MySQL 和 MariaDB
  • PostgreSQL
  • SQLite(2 和 3 版本)
  • MS SQL
  • Oracle
  • CockroachDB

连接官方插件可以扩展这个列表。支持 ClickHouse、Redis、Elasticsearch 和 MongoDB。

为什么单文件格式至今仍然方便

将整个应用打包成单个脚本在实践中带来了切实的好处。

首先,部署速度快。通过 wgetcurl 在服务器终端直接下载,一秒搞定。无需解压压缩包,无需创建辅助配置表,也无需修改配置文件。

其次,资源效率高。脚本没有使用任何框架。即使在只有 512 MB 内存的最弱虚拟服务器上,页面也能瞬间加载。

第三,工具在导入导出数据库转储时谨慎处理内存。phpMyAdmin 会因内存限制或超时错误而崩溃的地方,Adminer 通常能顺利处理。

仓库里有什么

查看仓库源代码 vrana/adminer 会发现,这个项目的组织比你看到的要有趣得多。它不仅仅是 400 千字节混在一起的 HTML 和 PHP 代码。

源代码被分成多个模块:

  • adminer/ — 主界面代码
  • editor/ — 轻量级 Adminer Editor 版本
  • compile.php — 构建脚本,将所有组件、样式和语言文件组装成最终的单一文件
  • lang.php — 用于更新本地化的工具
  • tests/ — 用于浏览器验证的端到端 Playwright 测试

构建脚本会去除空白、移除注释并压缩 CSS。最终生成一个紧凑的、可直接部署的文件,无需任何外部依赖。

面向最终用户的独立版本

仓库中包含第二个产品——Adminer Editor。

考虑一个典型场景:你需要给经理或内容编辑授予访问权限,让他们能编辑数据库记录。但你不能让他们看到表结构、索引,也不能允许他们执行任意 SQL 查询。

Adminer Editor 正是为解决这个问题而生的。它在你的数据库之上提供了一个简化的界面。没有 DDL 修改按钮和管理设置。用户只看到熟悉的表单,用于添加、编辑和搜索记录。如有需要,可以通过一个小型 PHP 类轻松自定义 Editor 以适应项目规则。

安全性和注意事项

使用这个工具很方便,但在生产服务器上公开访问 adminer.php 存在风险。机器人会不断扫描网站上的标准文件名,如 adminer.phpdb.php,试图暴力破解数据库密码。

为了保护服务器安全,请遵循以下简单准则:

  1. 调试完成后立即删除该文件。
  2. 将脚本重命名为随机字符串(例如 db_access_9281.php)。
  3. 在 Web 服务器层面使用 HTTP Basic Auth 或 IP 限制来限制对该文件的访问。

另一个需要考虑的是工具的默认外观。开箱即用的设计看起来像是 2008 年的复古风格。不过,通过连接项目官方主题目录中的第三方 CSS 主题,可以轻松解决这个问题。

谁会觉得这个工具实用

Adminer 在开发者的工具箱中占据了一个绝佳的位置。它在开发服务器上快速调试、处理 SQLite 文件、以及服务器访问仅限于 Web 界面的场景中都是不可或缺的。

该项目在 GitHub 上已获得超过 7500 颗星,作者仍在持续维护。这是一个很好的例子,说明简单而极简的架构可以保持多年不过时。

相关项目