Der*_*rek 0 laravel digital-ocean laravel-forge laravel-5 laravel-5.3
我有一个基于app.mydomain.com(服务器1)构建的应用程序,以及位于support.mydomain.com(服务器2)上的支持票务系统。 如何在laravel应用程序中的两个数据库之间建立连接?两者都使用Laravel Forge和Digital Ocean。
我在SO上阅读了这篇帖子,看起来不错,但出现“连接超时错误”。我认为这与Forge在连接数据库时需要SSH密钥文件(id_rsa.pub)有关吗? 来源在这里
我尝试将其添加到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,
),
Run Code Online (Sandbox Code Playgroud)
然后将其添加到我的模型中:
protected $connection = 'mysql2';
Run Code Online (Sandbox Code Playgroud)
为服务器配置Forge时,出于安全原因,MySQL配置会限制外部连接。只有位于同一服务器上的应用程序才能访问您的数据库。
由于您正在使用伪造,因此它比我之前建议的要容易得多。如果您为两个服务器都配置了伪造,请转到forge -> networking -> server network并选择can connect to复选框,然后单击更新。
之后,您需要DB_HOST=使用从digitalocean获得的专用网络IP 更新mysql2连接。
现在,需要做几件事以允许以安全的方式进行外部连接:
/etc/mysql/my.cnf并更新bind-address服务器IP由于您使用的是数字海洋,因此,如果您的服务器位于同一数据中心,则应该能够使用Droplet的专用网络ip地址。这是更安全的解决方案,服务器之间的任何连接都不会离开数据中心基础架构。记住要重启mysql。
转到Forge -> Networking -> New Firewall Rule并为端口3306和站点1的IP地址添加一个新规则,如果可能的话,再次添加一个私有IP。
使用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;
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅本教程,它可以解决与您的https://www.digitalocean.com/community/tutorials/how-to-set-up-a-remote-database-to-optimize-site-performance-类似的问题与MySQL
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |