You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可视化连接反向代理后的MySQL数据库(Rails Kamal-Docker环境)

解决Kamal部署后反向代理下的数据库连接问题

方案1:用Kamal自带的端口转发复用本地工具(推荐)

Kamal本身提供了数据库端口转发功能,能让你继续用MySQL Workbench这类本地工具连接生产库,本质是通过SSH隧道转发流量,无需暴露数据库端口到公网,安全又方便:

  • 执行命令建立转发:
    kamal db:forward 3306
    
  • 保持命令窗口打开,打开本地MySQL Workbench,连接地址填127.0.0.1:3306,使用生产数据库的用户名和密码即可。
  • 如果本地已有3306服务占用端口,可指定本地其他端口:
    kamal db:forward 3307:3306
    
    之后连接127.0.0.1:3307即可。

方案2:集成Web端数据库管理工具(适合可视化操作)

可以在Rails应用中集成Web端DB管理gem,比如rails_db,但生产环境必须做好严格的安全限制:

  1. 在Gemfile中添加(建议仅在特定环境加载或做好权限控制):
    gem 'rails_db'
    
  2. 执行bundle install后生成配置文件:
    rails generate rails_db:install
    
  3. 关键步骤:在config/routes.rb中添加访问限制,比如仅允许特定IP访问,或添加HTTP基本认证:
    Rails.application.routes.draw do
      # 限制仅特定IP可访问
      constraints(ip: /192\.168\.1\.\d+|你的公网IP/) do
        mount RailsDb::Engine => '/rails_db', as: 'rails_db'
      end
    end
    
    或配置HTTP基本认证:
    Rails.application.routes.draw do
      authenticate do
        mount RailsDb::Engine => '/rails_db', as: 'rails_db'
      end
    end
    
    之后在config/initializers/rails_db.rb中配置认证信息。
  4. 部署完成后,访问https://你的域名/rails_db即可可视化管理数据库。

方案3:直接在服务器/容器内操作数据库

如果只是临时执行简单操作,无需使用本地工具,直接在服务器端操作更高效:

  • 进入数据库容器的SQL命令行:
    kamal db:shell
    
    进入后可直接执行SQL命令,比如SELECT * FROM users LIMIT 10;。
  • 或通过Rails Console操作(更贴合Rails开发习惯,无需编写SQL):
    kamal app:console
    
    进入后用ActiveRecord方法操作,比如User.last、Post.where(published: true).count。

方案4:手动建立SSH隧道(灵活定制)

如果Kamal的转发功能无法满足需求,比如需要转发多个端口或自定义SSH参数,可手动建立SSH隧道:

ssh -L 本地端口:localhost:服务器上数据库容器的映射端口 服务器用户名@服务器IP -p SSH端口

比如服务器上数据库容器映射到3306端口,本地用3306端口:

ssh -L 3306:localhost:3306 deploy@your-server-ip -p 22

之后本地工具连接127.0.0.1:3306即可,原理和Kamal转发一致,只是手动控制更灵活。

内容的提问来源于stack exchange,提问作者user502052

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:01:13