我们正在CodeIgniter中构建一个利基项目管理软件。我们希望在我们的网站上为每个用户提供他们自己的子域名。例如,user.oursite.com。 User1进入user1.oursite.com登录他们的软件。这与BaseCamp和Freshbooks用于其软件的每个实例的格式相同。
这是一个问题。建立这样的网站的最佳做法是什么?以下是一些问题:
1)CSS,PHP和其他文件。除数据库(下面讨论)外,软件的每个实例都是相同的。换句话说,每个实例(即user1.oursite.com,user2.oursite.com)将使用相同的php文件和CSS。任何为用户定制的内容都将从数据库中动态提取。我们如何格式化这些子域以最大限度地减少将更新推送到文件所需的工作量?我们的一个想法是创建每个子域从中抽取的主文件集(即镜像),当然还为每个子域创建一个新的数据库。如何实现这一目标?这是最佳做法吗?还有其他建议吗?
2)数据库 - 基础项目管理软件的主数据库相当复杂。如上所述,每个用户获得他们自己的软件实例(即,username1.oursite.com,username2.oursite.com,username3.oursite.com)。每个软件实例都应该有自己的数据库吗?当我们需要跨100个用户更新/修改数据库(例如,添加新表)时会发生什么?
3)Codeigniter - Codeigniter如何在这种结构下执行?我们应该有任何顾虑吗?
任何建议都将不胜感激。如果您能指出我关于这些类型的软件构建的文档或讨论,那将是非常棒的。如果有人能为我们这样做,我们有兴趣与您聊天。
答案 0 :(得分:0)
1)如果您的代码相同(只有数据更改),那么您只需将所有子域指向同一个codeigniter实例。在application/config/config.php
设置base_url中为空白:
$config['base_url'] = '';
所以codeigniter会自己找出你的域名。
然后,您可以使用以下命令检索代码中的当前子域:
$current_subdomain = $this->input->server('SERVER_NAME');
并使用它来加载您想要的任何用户特定数据。
像CSS和图像以及Javascript这样的东西,保留其他地方可能是个好主意..比如http://static.yoursite.com
所以他们的浏览器会将它缓存到你所有的子域中。
3)我刚刚尝试了我在1)中使用CodeIgniter 2.0所说的内容,它似乎工作正常。我真的不能想到它会遇到的任何问题。我的意思是,在CodeIgniter参与之前很久就解决了DNS。
如果您担心系统的水平可扩展性,这是一个不同的问题,但您应该考虑使用Amazon AC3等。