【问题标题】:Multiple websites running on same codebase?多个网站在同一个代码库上运行?
【发布时间】:2010-12-16 18:13:25
【问题描述】:

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

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

我想知道我该怎么做。

在数据库的情况下也是如此。我为每个网站创建单独的数据库或使用具有网站 ID 的相同数据库作为每个表中的列会更好吗?

请帮帮我。

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

[技术] 特别是在研究如何使用主机名来确定要使用的配置 我们正在使用 PHP 和 MySQL

【问题讨论】:

标签: build-process multiple-databases application-design multiple-domains


【解决方案1】:

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

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

我建议您仔细规划您的目录结构。比如:

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);

这是一种简单的方法,但有些东西。

【讨论】:

  • 这正是我想要的。只有主题和配置会改变。我将使用数据库中的配置数据。
  • 谢谢。很高兴它有帮助。如果您还有其他问题,请在此处发表另一条评论。
【解决方案2】:

其实很简单。

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

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

所以可变部分是:

  1. 配置

  2. 设置

  3. 数据

那些你需要复制的。

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

【讨论】:

  • 我需要使用单主机来完成。我将托管大约 1000 个网站。所以更新所有托管帐户对我来说是不切实际的
  • 请解释拥有多个站点的想法是什么?它只是域别名还是一个家族的几个站点?
  • 它不是域别名。就像...这将是一项服务。不同的客户将在他们自己的域名上以不同的主题提供相同的应用程序。类似于博主所做的事情......拥有自己的域名但相同的博客应用程序。
  • 我一直在想同样的事情。我想它必须雇用$_SERVER['HTTP_HOST']
  • 你能帮我理解它代表什么以及如何使用它吗?
【解决方案3】:

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

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

编辑:

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

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

回顾一下:

  • 获取多台服务器,并在它们之间平衡负载。
  • 设计应用程序以处理大量用户负载。
  • 使用主机名来确定要使用的配置。

【讨论】:

  • 那会增加我的服务器成本.. 他们通常是怎么做的?博主是我想到的一个例子?他们通常是怎么做的?
  • 查看我的编辑。您使用什么语言来开发这个应用程序?如果我们知道您使用什么来开发应用程序,我们或许可以帮助您实施。
  • 是的,我们计划这样做..负载平衡等...我无法获得有关如何执行第三部分的代码“使用主机名来确定要使用的配置”
  • 您使用什么语言编写应用程序?
  • 我们正在使用 PHP 和 MySQL。我基本上不是 PHP 专家,只是开始学习它
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

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

    A) 为每个主机设置单独的 open_basedir 限制,以便其他网站无法访问用户上传的文件,例如: /shared_library /host1/user_images /host2/user_images

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多