我正在尝试在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文件时,它也在主应用程序中进行了编辑。
有人可以帮忙吗?谢谢大家。
答案 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