多个网站在相同的代码库上运行?

时间:2009-11-15 08:48:33

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

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

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

我想知道我该怎么做。

如果是数据库..我会为每个网站创建单独的数据库,或者使用同一个数据库,网站ID作为每个表中的列。

请帮帮我。

[澄清] 它不是域别名。喜欢......这将是一项服务。不同客户将在自己的域名上以不同的主题提供相同的应用程序。像博客一样做什么..用自己的域名但同样的博客应用程序

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

5 个答案:

答案 0 :(得分:2)

重用代码绝对是可取的。从您的帖子很难想象这些网站之间的差异。我们是在谈论徽标,配色方案还是不同的功能?

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

我建议您仔细规划目录结构。类似的东西:

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

这是一种简单的方法,但事情就是这样。

答案 1 :(得分:1)

实际上非常简单。

您的代码库可以而且应该是单一的。您将其上传到hosting1和hosting2。维护时,只要更新代码,就将其上传到两个托管空间。

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

所以变量部分是:

  1. 配置

  2. 设置

  3. 数据

  4. 您需要复制的那些。

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

答案 2 :(得分:1)

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

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

修改

在阅读其他答案的评论后,我对您的用例了解得更好。

如果您要使用此设置的大量站点,如果您正确设计了体系结构,并实现某种负载平衡方案来处理大量用户负载,则可以使其工作。

回顾一下:

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

答案 3 :(得分:0)

我们现在使用大约15,000个独特域名。这并不困难,但确实需要一些设计考虑才能正确实施。

你可以通过一个代码库来实现这一目标。服务器,基本上只是构建您的代码,完全依赖于传入请求的 HTTP_HOST 值。然后,数据库中的所有内容都会关闭该值,作为正确隔离数据并使用适当的数据/ html回答请求的方法。

答案 4 :(得分:0)

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

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

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

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

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

在任何情况下,您都应该采用推出策略,以便在进行更改时不会破坏任何网站。