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

Laravel Forge how to establish connection between 2 databases on 2 separate servers

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

我读了 which looked great but I am getting a "connection timed out error". I believe it has to do with Forge needing the SSH key file (id_rsa.pub) when connecting to a database? 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';

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

新答案

由于您使用的是 Forge,因此比我之前建议的更容易。如果您为两台服务器都配置了 forge,请转到 forge -> networking -> server network 和 select can connect to 复选框并点击更新。

之后你需要更新 DB_HOST= of mysql2 与从 digitalocean 获得的私有网络 IP 连接。

旧答案 - 手动设置

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

  1. 在站点 2 - 编辑 /etc/mysql/my.cnf 并使用您的服务器 IP bind-address 更新

由于您使用的是数字海洋,如果您的服务器位于同一个数据中心,您应该可以使用您的 Droplet 的私有网络 IP 地址。这是更安全的解决方案,服务器之间的任何连接都不会离开数据中心基础设施。记得重启mysql.

  1. 在站点 2 - 添加新的防火墙规则

转到 Forge -> Networking -> New Firewall Rule 并为您的站点 1 的端口 3306 和 IP 地址添加新规则,如果可能,再次添加一个私有 IP。

  1. 在站点 1 - 为远程连接创建 mysql 用户

通过 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

希望对您有所帮助!