强大的网页数据库管理工具Adminer

老苏折腾过的项目,数据库主要是 MySQL,其次是 MongoDBPostgreSQLSQLite,最近还用到了 Elasticsearch ,但是数据库管理软件 phpMyAdmin 只能管理 MySQL ,老苏一直在找一个全能的数据库管理器,似乎 Adminer 可以满足要求。

什么是 Adminer ?

Adminer(原 phpMinAdmin)是一个用 PHP 编写的全功能数据库管理工具。与 phpMyAdmin 相反,它由一个准备部署到目标服务器的文件组成。Adminer 可用于 MySQLPostgreSQLSQLiteMS SQLOracleFirebirdSimpleDBElasticsearchMongoDB

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 adminer ,选择第一个 adminer,版本选择 latest

端口

本地端口不冲突就行,不确定的话可以查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
8989 8080

运行

在浏览器中输入 http://群晖IP:8989 就能看到主界面

MySQL

先试的是群晖自带的 MariaDB 5,数据库用的是 librenms

因为我们都是按账号创建的,所以用户名和数据库名是相同的

登录成功之后进入管理界面

接着试了下 MariaDB 10,数据库用的是 nocodb

登录很顺利

PostgreSQL

老苏安装 adminer 的主要原因就是为了管理 PostgreSQL,之前有两个项目安装了 docker 版的 PostgreSQL

日程安排工具Calendso
多合一的家庭助理Homechart

进入管理界面

默认是 显示结构,改为 选择数据

MongoDB

接下来尝试了 MongoDB,之前好几个项目都用到了,最近的是下面👇这个:

交互式在线辅导工具Nettu Meet

但是这次没有成功,显示 没有扩展

老苏研究了半天,才发现这样一段描述

原来开箱即用的只有下面👇这些,其他的都得自己安装 PHP 扩展

  • MySQL
  • PostgreSQL
  • SQLite
  • SimpleDB
  • Elasticsearch

安装扩展

通过 SSH 客户端以 root 身份进入容器

1
2
# 以 root 身份进入容器
docker exec -it --user root adminer1 /bin/sh

依次执行下面的命令

安装比较花时间,需要耐心

1
2
3
4
5
6
7
8
# 安装编译环境
apk add autoconf gcc g++ make libffi-dev openssl-dev

# 安装 mongo 驱动
pecl install mongodb

# 添加 mongo 配置
echo "extension=mongodb.so" > /usr/local/etc/php/conf.d/docker-php-ext-mongodb.ini

如果中间出现错误

就再执行一次

编译成功之后还需要修改配置,再重启一次容器就可以了

这次很顺利的进入到了管理界面

Elasticsearch

Nettu Meet 还用到了 Elasticsearch ,正好又是开箱即用的,所以也一并看看,但是 Adminer默认不支持访问没有密码的数据库

环境

停止容器,添加环境变量

可变
ADMINER_PLUGINS 插件名称

在这里 我们输入 login-password-less

如果直接启动,日志中会有报错

这是因为 login-password-less 插件需要参数才能正常工作,所以不适用上面的方法,将 ADMINER_PLUGINS 值设为空,然后启动

通过 SSH 客户端以 root 身份进入容器

1
2
# 以 root 身份进入容器
docker exec -it --user root adminer1 /bin/sh

依次执行下面的命令

1
2
3
4
5
# 进入目录
cd plugins-enabled/

# 创建文件
vi login-password-less.php

login-password-less.php 文件内容如下

1
2
3
4
5
6
7
8
9
<?php
require_once('plugins/login-password-less.php');

/** Set allowed password
* @param string result of password_hash
*/
return new AdminerLoginPasswordLess(
$password_hash = password_hash('nopassword', PASSWORD_DEFAULT)
);

在密码中输入 nopassword

登录 成功之后的管理界面

主题

前面的截图看起来比较丑陋,但实际上 Adminer 是支持主题的

通过 SSH 客户端以 root 身份进入容器

1
2
# 以 root 身份进入容器
docker exec -it --user root adminer1 /bin/sh

依次执行下面的命令

1
2
3
4
5
# 下载 css 文件
curl -O https://raw.githubusercontent.com/Niyko/Hydra-Dark-Theme-for-Adminer/master/adminer.css

# 镜像站点
curl -O https://raw.fastgit.org/Niyko/Hydra-Dark-Theme-for-Adminer/master/adminer.css

刷新一下页面,有没有觉得档次立马提升了几个层次?

进管理界面

小结

AdminerphpMyAdmin 的最佳替代品之一。它不仅体积更小,而且使用起来也更加快捷。

功能虽然老苏没涉及,但是跨过了登录的难关,又是中文界面,用起来还是很容易的,有问题可以提出来一起研究。

参考文档

vrana/adminer: Database management in a single PHP file
地址:https://github.com/vrana/adminer

Adminer - Database management in a single PHP file
地址:https://www.adminer.org/

finwo/docker-adminer: Dockerized adminer db manager - docker-adminer - Codeberg.org
地址:https://codeberg.org/finwo/docker-adminer

How to Use Adminer to Manage Databases Easily with a Single PHP File
地址:https://kinsta.com/blog/adminer/