2015-05-14 66 views
1

我有这个问题,我不能决定什么是什么,什么是最好的。希望有人能够给我提供一些解释来澄清我的困惑。Laravel 5子域名站点作为新项目托管吗?

所以在这里,我有一个非常大的网站。目前正在Yii Framework上运行,我正在将它迁移到L5 Framework。这个网站有几个子网站的结构,如下面的例子:

1) www.example.com 
2) www.example.com/{username} 
3) explore.example.com 
4) explore.example.com/{organization} 
5) connect.example.com 
6) coin.example.com 
7) m.example.com 
8) e3.example.com 

所以目前的托管方法是使用1个项目来承载一切。问题在于,如果其中一个子网站由于某种原因而被禁用,则整个网站需要停下来,代码禁用该网站并再次部署整个网站。

回到L5框架,我注意到,我可以做同样的laravel ASLO使用routes.php文件下面的路由方法在一个项目来承载一切:

Route::group(['domain' => '{account}.myapp.com'], function() 
{ 

    Route::get('user/{id}', function($account, $id) 
    { 
     // 
    }); 

}); 

同样同样的问题上升,如果有一个子网站被禁用,我需要编码禁用网站并重新部署整个网站。所以我在想,如果将新项目中的每个子站点作为一个模块托管是非常实际的,那么如果对该子站点进行任何更改,它将只影响该特定模块,而其他站点则继续运行。

另外我还想问,如果我将它作为一个单独的项目托管,我的网站需要用户登录才能导航到任何页面或应用程序。那么如何告诉其他模块用户已经登录的地方,一切都可以照常进行?

最后当然如果有人有任何其他的建议或方法随时也可以给我启发。我的主要动机是实现:

1) Maximum development flexibility 
2) Fail tolerance 
3) Sub sites can share the same login with the main website 
(You are only require to login at the main page and you will be authorized 
to use the rest of the web application) 

谢谢。

回答

2

我想,答案会为时已晚。不过,它可能会帮助别人。

今天,我自己面临一个类似的困境 - 我应该使用子网站还是单独申请公共网站和我的应用程序的管理网站。

起初,我似乎应该有单独的应用程序,以避免使bith网站失效,如果我只想升级其中一个网站。但我不想在存储库中重新复制所有Laravel样板代码。

然后,我发现实际上我可以将所有内容都实现为子网站,但我可以将Laravel应用程序部署到多个子网域。因此,存储库中会有单个应用程序,但我将为每个子域拥有不同的副本。

缺点 - 控制器,视图(和一些特定于站点的模型)的代码将针对每个部署的站点进行复制。这对于一个小网站来说不是问题 - 只是一堆未使用的文件。但是如果我想要一个干净的解决方案,我可以实现一些模块化结构并在部署期间引入特定于站点的MVC内容。我想这是另一个话题。有一些针对模块化Laravel应用程序的第三方解决方案。当然,模块化解决方案增加了复杂性和维护性,因此,我对服务器上的文件复制没有任何反应,如果这对您不是问题。

关于身份验证 - 我没有用Laravel尝试过,但我有在纯PHP应用程序中为顶级域名实现cookie的经验。实质上,您可以将会话Cookie配置为对所有子域有效,然后用户只需在您的任何站点中登录一次即可。这里似乎是Laravel的一个工作解决方案: Persisting sessions across subdomains in Laravel 5

只需将顶级域名设置为.example.com,理论上你应该很好。但为了开发目的,我会将这个值存储在.env中。