5

我们正在开发一个将作为托管解决方案提供的应用程序。我很惊讶如何在不复制基本代码的情况下使用具有相同代码的多个站点。

例如:网站 1:www.example.com 和网站 2:www.sample.com 将在相同的代码上运行,但会有不同的配置设置和不同的主题......就像我们在 wordpress 中运行我们自己的域名一样。

我想知道我该怎么做。

同样在数据库的情况下..我会更好地为每个网站创建单独的数据库,或者使用具有网站 ID 的相同数据库作为每个表中的列。

请帮助我。

[澄清]它不是域别名。就像...这将是一项服务。不同的客户将在他们自己的域名上以不同的主题提供相同的应用程序。类似于博主所做的事情......拥有自己的域名但相同的博客应用程序

[技术] 具体我在看如何使用主机名来确定使用哪个配置我们使用的是PHP和MySQL

4

5 回答 5

3

重用代码绝对是可取的。从您的帖子中很难想象这些站点之间会有多么不同。我们是在谈论徽标、配色方案还是不同的功能?

我将从不同的外观和感觉开始。我还将假设这是服务器上唯一的应用程序。

我建议您仔细规划您的目录结构。就像是:

www-root/  
   / lib  
   / themes
        / domain1  
        / domain2  


index.php:

<?php
$host = $_SERVER['HTTP_HOST'];
$include_theme = "themes/" . $host . "/configuration.php";
//make sure the file exists
require_once($include_theme);

这是一种简单的方法,但有一些事情要做。

于 2009-11-21T17:49:11.443 回答
1

其实很简单。

您的代码库可以而且应该是单一的。您将其上传到主机 1 和主机 2。维护时,更新代码后,将其上传到两个托管空间。

我想这也是这个网站的运作方式。查看页面的页脚。你有stackoverflow、meta、超级用户和serverfault。如果您现在查看右下角的评论,那将是“svn revision: 5404”。一样的东西。一个代码库发布到四个站点。当然,数据库是不同的,包含完全不同的内容。

所以可变部分是:

  1. 配置

  2. 设置

  3. 数据

那些你需要复制的。

您需要以这种方式对其进行编码,即配置和设置不是硬编码的,而是存储在某些数据库表中或至少存储在某些外部配置文件中。这些不构成代码的一部分(如果您愿意,也不是实现),因此它们不需要在代码中。如果你有它们,把它们拿出来。

于 2009-11-15T08:51:27.137 回答
1

我想你可以有两个不同的域指向同一个服务器,并根据主机名设置不同的配置。我不会推荐这个。您可能会遇到稳定性和性能方面的问题,尤其是在您拥有庞大的用户群或大量指向代码库的域时。

通常,如果您运行多个站点,则每个站点都应该有不同的服务器。

编辑:

在阅读了对另一个答案的评论后,我对您的用例有了更好的理解。

如果您有大量要使用此设置的站点,如果您正确设计了架构,并实施了某种负载平衡方案来处理大量用户负载,那么您可以完成这项工作。

回顾一下:

  • 获取多个服务器,并在它们之间平衡负载。
  • 设计应用程序以处理大量用户负载。
  • 使用主机名来确定要使用的配置。
于 2009-11-15T09:08:21.567 回答
0

我们现在使用大约 15,000 个唯一域来执行此操作。这并不难,但要正确实施确实需要一些设计考虑。

您可以在单个代码库和服务器上完成它,并且基本上只是构建您的代码以完全依赖传入请求的HTTP_HOST值。然后,您的数据库中的所有内容都将该值作为正确分离数据并使用适当的数据/html 响应请求的一种手段。

于 2009-11-21T18:05:53.310 回答
0

出于安全原因,您可以考虑:

a) 为每个主机设置单独的 open_basedir 限制,使用户上传的文件不能被其他网站访问,例如:/shared_library /host1/user_images /host2/user_images

您可以在允许的路径中包含共享目录和特定于域的目录。

B) 为每个主机连接到不同的数据库,以防止数据库查询中的任何错误意外抓取另一个网站的数据,并允许更轻松地扩展数据库服务器(例如,将繁忙的域移动到不同的数据库服务器)

如果您有一个非常简单的应用程序,您可能会使用一个数据库。

在任何情况下,您都应该制定一个推出策略,以便在您进行更改时不会出现任何站点中断。

于 2015-04-18T03:13:07.353 回答