基于dbgate搭建web版mysql管理后台
本文由 小茗同学 发表于 2025-10-05 浏览(19)
最后修改 2025-10-05 标签:dbgate mysql

不太想安装本地工具,希望随时随地打开浏览器就可以管理mysql。

找了一圈,要么是PHP的,要么安装太麻烦,要么各种各样的问题,最后决定用dbgate。官网:https://dbgate.io/

这东西也不是什么善茬,免费版一堆的功能限制,最要命的是不支持密码保护,主要一部署任何人都可以访问,这个很危险!所以主要是研究如何最简单的增加密码保护。

安装 dbgate

npm i dbgate-serve
# 启动,http://localhost:3000 端口不支持自定义
dbgate-serve

这就安装好了,直接访问类似这样的界面:

在这上面新建数据库连接,输入数据库账号和密码。

注意:

  • 分免费版和社区版,免费版不支持端口、账号密码等一切配置,非常恶心;
  • 切记不要直接把端口暴露公网,否则你的数据库直接跪了;

增加密码保护

nginx转发+auth_basic

# 安装密码工具
sudo yum install httpd-tools
# 生成密钥文件,账号 admin
htpasswd -c /etc/nginx/dbgate_password admin

nginx配置

server {
	listen 80;
	server_name yourdomain.com;  # 你的域名或IP
	# 对整个网站启用密码保护,名字随便取,唯一即可
	auth_basic "DbgateAuth";
	# 密码文件路径
	auth_basic_user_file /etc/nginx/dbgate_password;
	# 网站原有配置(如反向代理或静态文件路径)
	location / {
		proxy_pass http://localhost:3000;  # 若为代理,指向实际服务
	}
}

配置后本来万事大吉,但是无法记住密码,每个HTTP请求之间是无状态的,会一直弹出反复输入密码,后来发现仅windows存在问题,mac是好的,不过也没时间研究,这个方案作罢。

caddy方案

这个方案应该也是可行的,但是login模块无法通过yum安装,嫌麻烦,所以也放弃。

最简单最暴力方案,直接判断cookie来决定是否转发。

location / {
		if ($cookie_your_token !~ "^你的很复杂的密码$") {
			add_header Content-Type "text/html; charset=utf-8";
			return 200 "<div>未登录</div>";
		}
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_connect_timeout 10;
		proxy_pass http://127.0.0.1:3000;
}

后台启动服务

nohup dbgate-serve &