【问题标题】:Laravel MySql DB Connection with SSH使用 SSH 的 Laravel MySql 数据库连接
【发布时间】:2014-10-19 03:52:44
【问题描述】:

我有几个想要访问的远程数据库,但它们位于只能通过带有密钥的 SSH 访问的服务器上。

在 Sequel Pro 中,我连接到这个远程数据库,如下所示:

如何配置我的 Laravel 应用程序以连接到这样的数据库?

'mysql_EC2' => array(
        'driver'    => 'mysql',
        'host'      => '54.111.222.333',
        'database' => 'remote_db',
        'username' => 'ubuntu',
        'password' => 'xxxxxxxxxxxxxxxxxxxx',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

【问题讨论】:

    标签: mysql ssh laravel-4


    【解决方案1】:

    如果 ssh 服务器只是隧道并且数据库不位于那里。你可以用这个。

    ssh -i ~/path/your-key.pem -N -L 13306:your-db-hostname.com:3306 your-ssh-tunnel-username@your-tunnel-hostname.com

    并将 laravel .env 或数据库配置文件中的 db 主机名设置为 127.0.0.1 端口 13306

    【讨论】:

      【解决方案2】:

      我写了一个 Laravel 包来为我们处理。 stechstudio/laravel-ssh-tunnel

      composer require stechstudio/laravel-ssh-tunnel

      注册TunnelerServiceProvider::class 并在您的.env 中设置配置。

      【讨论】:

      • 非常易于使用并且按预期工作,感谢您的软件包。 ?
      【解决方案3】:

      这是一个可行的解决方案,通过带有密钥的 SSH 使用托管在 EC2 实例上的数据库。

      首先,在您的数据库配置中设置相应的连接:

      'mysql_EC2' => array(
              'driver'    => 'mysql',
              'host'      => '127.0.0.1:13306',
              'database' => 'EC2_website',
              'username' => 'root',
              'password' => 'xxxxxxxxxxxxxxxx',
              'charset'   => 'utf8',
              'collation' => 'utf8_unicode_ci',
              'prefix'    => '',
          ),
      

      其次,建立隧道:

      ssh -i ~/dev/awskey.pem -N -L 13306:127.0.0.1:3306 ubuntu@54.111.222.333
      

      (我们将 SSH 密钥传递给 i 参数并建立 SSH 连接,绑定到端口 13306)

      第三,像在 Laravel 应用程序中一样使用 DB:

      $users = DB::connection('mysql_EC2')
              ->table('users')
              ->get();
      
      var_dump($users);
      

      【讨论】:

      • 隧道命令由于某种原因不适用于我的 -N 选项。还有一种用于本地主机的类型。这个命令(-L 是否加入远程端口,没关系)对我有用:ssh -i PATH_TO_YOUR_KEY -L13306:127.0.0.1:3306 remoteuser@111.222.111.222
      • 有没有办法自动执行脚本?或者创建一个工匠命令,比如“工匠隧道”?
      • 这对我有用,但我必须使用'port' => '13306' 单独设置端口。使用 Laravel 5.1,谢谢!
      • 谢谢!这个答案让我走上了正轨。我终于在这里弄清楚了:stackoverflow.com/questions/464317/…
      • 为我节省了很多挫败感。只是给以后阅读这篇文章的任何人做个说明,您也可以使用相同的方法将其用于 postgres(当然,使用适当的端口)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2016-08-21
      相关资源
      最近更新 更多