Laravel saas one app multiple databases - symlinks?

时间:2018-01-06 22:36:53

标签: php laravel symlink saas

我正在尝试在Laravel 5中创建saas应用程序。

我需要的是一个带有主应用程序的目录。 /var/www/main/ - 没关系。

当我创建一个新客户端时,会创建新数据库,创建新的子域,但我不知道如何创建符号链接到主应用程序 - 但是使用自定义.env文件。

所以我有:/var/www/clients/clientA/ - 在这个目录中我需要这个客户端的.env文件,但其他一切都是主应用程序的符号链接。

然后,如果我打开clientA.application.com - 应该加载此clientA .env并且laravel应该连接到选定的客户端A数据库。

我尝试了ln -s /var/www/main/ /var/www/clients/clienatA/ - 当然,当我编辑.env文件时,它也在主应用程序中进行了编辑。

有人可以帮忙吗?谢谢大家。

2 个答案:

答案 0 :(得分:0)

我认为您可以在bootstrap / app.php中做到这一点:

switch (getenv('HTTP_HOST')) {
    case 'subdomain1.mywebsite.com':
        $environmentFile = '.subdomain1.env';
        break;
    case 'subdomain2.mywebsite.com':
        $environmentFile = '.subdomain2.env';
        break;

}
$environmentPath = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR;
Dotenv::load($environmentPath , $environmentFile);

您可以拆分getenv('HTTP_HOST')并提取子域,然后相应地设置$ environmentFile ...

另一个使用.htaccess的解决方案:

.htaccess:

<If "%{HTTP_HOST} == 'sub.domain'">
    SetEnv APP_DOMAIN sub
</If>

然后 然后:

//own env directory for separate env files
$app->useEnvironmentPath( realpath(__DIR__ . '/../env/') );
//separate files for each domain (see htaccess)
$app->loadEnvironmentFrom( getenv('APP_DOMAIN') . '.env' );

答案 1 :(得分:0)

您正在寻找多租户设置。随时从https://github.com/hyn/multi-tenant中汲取灵感;它可能超出了您的需求,但是它解决了租户特定配置使配置过载的问题。

根据主机名识别租户后,它将从租户目录中读取自定义配置,并覆盖现有配置密钥。

https://github.com/hyn/multi-tenant/blob/5.x/src/Listeners/Filesystem/LoadsConfigs.php