使用单个 Laravel 代码库管理多个网站

Managing Multiple Websites with a Single Laravel Codebase

我的团队最近整合了一个适用于多个网站的 Laravel 代码库。目前我们 运行 将它们作为安装在 centOS7 配置文件上的应用程序。

每当需要一个新站点时,我们都会启动一个配置文件,然后将代码克隆进去。代码库在很大程度上依赖于包(自定义 laravel 包)。目前每个站点都引入了我们开发的所有包。目前的区别是 1) .env 文件。和 2) 主题配置文件(来自一个包,我稍后会谈到)。

我希望能够根据需要提取包,我不想提取我们开发的每个包。我的问题是,有没有办法绕过每个包裹?我正在考虑从 git 中删除 composer.json 文件并将其视为配置文件?我还考虑过生成 composer.json 文件。

最终我们想将 CI/CD 添加到流程中并真正实现自动化。我真的很努力将代码库保存在一个存储库中。我错了吗?我们是否应该将代码库拆分,每个项目一个存储库?但是你必须考虑更新成为一场噩梦。

目前,主题是作为包引入的。每个站点都有 composer 文件中的所有主题。该应用程序具有可以登录并将主题设置为活动的管理员用户。尽管如此,我还是希望它只引入必要的主题资源。

抱歉,我有点啰嗦,但我想知道如何正确扩展应用程序。

非常感谢!

tldr;我如何 运行 使用一个代码库的多个网站,同时能够指定不同的所需自定义包?

我还没有实际测试过这个,但你可以通过定义多个 composer.json 文件来完成你想要的。阅读有关定义

的更多信息

然后,在每个composer.json文件中定义一个different vendor directory示例:

{
    "config": {
        "vendor-dir": "plugins"
    }
}

接下来,在每次安装时指定要安装的 composer.json 文件,来自文档:

By setting the COMPOSER env variable it is possible to set the filename of composer.json to something else.

来自文档的示例:

COMPOSER=composer-other.json php composer.phar install

specifying the environment 上阅读更多内容。

最后但同样重要的是,您必须 bootstrap 您的网站或应用程序的特定供应商目录:

require __DIR__.'/../custom-vendor-directory/autoload.php';

这可以在您的应用程序的 index.php 文件中自定义。 original source.