Laravel Forge如何在2个独立的服务器上建立2个数据库之间的连接

时间:2017-03-25 14:26:32

标签: laravel laravel-5 laravel-5.3 digital-ocean laravel-forge

我在app.mydomain.com(服务器1)上建立了一个应用程序,在support.mydomain.com(服务器2)上有一个支持票务系统。 如何在我的laravel应用程序中建立两个数据库之间的连接?两者都在使用Laravel Forge和Digital Ocean。

我看了this post on SO看起来不错,但我收到了“连接超时错误”。我相信它与Forge在连接数据库时需要SSH密钥文件(id_rsa.pub)有关吗? Source here

我尝试将其添加到database.php:

//Server/Site 1
'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'support',
    'username'  => 'user',
    'password'  => 'mysecretpassword',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

//Server/Site 2
'mysql2' => array(
    'driver' => 'mysql',
    'host' => '123.456.789.101',
    'port' => '3306',
    'database' => 'app',
    'username' => 'forge',
    'password' => 'mysecretpassword',
    'charset' => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
),

然后将其添加到我的模型中:

protected $connection = 'mysql2';

1 个答案:

答案 0 :(得分:6)

当您使用Forge配置服务器时,出于安全原因,MySQL配置会限制外部连接。只有同一服务器上的应用程序才能访问您的数据库

新答案

因为你使用伪造它比我之前建议的更容易。如果您使用伪造品配置了两台服务器,请转到forge -> networking -> server network,然后选中can connect to复选框并点击更新。

forge server network configuration

之后,您需要使用从digitalocean获取的专用网络IP更新DB_HOST= mysql2连接。

旧答案 - 手动设置

现在,为了以安全的方式允许外部连接,有几件事要做:

  1. 在site2 - 使用您的服务器IP修改/etc/mysql/my.cnf和udpate bind-address
  2. 由于您使用的是数字海洋,如果您的服务器位于同一数据中心,您应该能够使用您的Droplet的专用网络IP地址。这是更安全的解决方案,服务器之间的任何连接都不会离开数据中心基础设施。记得重新启动mysql。

    1. 在site2 - 添加新的防火墙规则
    2. 转到Forge -> Networking -> New Firewall Rule并为端口3306添加新规则和您的site1的IP地址,如果可能,再次为私有IP。

      1. 在site1 - 为远程连接创建mysql用户
      2. 使用ssh连接到site1打开mysql控制台并添加新用户

        CREATE USER 'some-username'@'site1_ip' IDENTIFIED BY 'some_password';
        GRANT ALL PRIVILEGES on your_database.* TO 'some-username'@'site1_ip';
        FLUSH PRIVILEGES;
        

        有关详细信息,请参阅本教程,它解决了与您https://www.digitalocean.com/community/tutorials/how-to-set-up-a-remote-database-to-optimize-site-performance-with-mysql

        类似的问题

        希望这有帮助!