具有共享代码库和DB的多个Django站点

时间:2012-07-07 15:53:45

标签: django heroku django-sites

我为20个不同的国家/地区创建了一个包含20个站点(每个站点一个不同的域)的Django项目。这些网站共享一切:代码库,数据库,网址,模板等。

他们唯一不共享的是我在每个网站设置文件中设置的小型自定义(徽标,CSS主题的背景颜色,语言代码等)(每个网站都有一个设置文件,所有这些文件导入一个全局设置文件与常见的东西)。现在,为了在开发模式下运行网站,我会这样做:

django-admin.py runserver 8000 --settings=config.site_settings.site1
django-admin.py runserver 8001 --settings=config.site_settings.site2
...
django-admin.py runserver 8020 --settings=config.site_settings.site20

我有几个问题:

  1. 我读过可以为每个站点(域)创建一个虚拟主机,并将其传递给站点的settings.py文件。但是,我担心这会为每个站点创建一个Django实例。我是对的吗?
  2. 是否有更有效的部署方式?我读过django-dynamicsites,但我不确定这是不是正确的方法。
  3. 如果我决定使用Heroku进行部署,似乎Heroku预计每个应用只需要一个设置文件,因此我需要有20个应用。有解决方案吗?
  4. 谢谢!

1 个答案:

答案 0 :(得分:7)

所以,我最近做了类似的事情,发现下面的策略是最好的选择。我将假设你现在熟悉git分支,以及Heroku遥控器。如果不是,请先阅读:https://devcenter.heroku.com/articles/git#multiple-remotes-and-environments

我正在采取的主要策略是使用单个代码库(单个Git仓库):

  • 包含所有共享代码的master分支:模板,视图,网址。
  • 基于site的许多master分支,其中包含所有特定于站点的自定义项:css,图像,设置文件(如果它们有很大差异)。

这种方式是这样的:

首先,请确保您在master分支上。

其次,为您的某个域创建一个新的git分支,例如:git checkout -b somedomain.com

第三,自定义您的somedomain.com分支,使其看起来像您想要的那样。

接下来,通过运行somedomain.com将<{1}}实时部署到Heroku。

现在,将您的heroku create somedomain.com --remote somedomain.com分支代码推送到新的Heroku应用程序:somedomain.com。这将在Heroku上部署您的代码。

现在您已经使用自己的Heroku应用程序部署了git push somedomain.com somedomain.com:master分支,您可以通过将somedomain.com添加到正常的Heroku命令来完成所有正常的Heroku事务,例如:

  • --remote somedomain.com
  • heroku pg:info --remote somedomain.com

所以,现在你基本上有两个分支:一个heroku addons:add memcache:5mb --remote somedomain.com分支和一个master分支。

返回您的somedomain.com分支,为您的下一个域创建另一个新分支:master。然后根据自己的喜好自定义它(css,特定于站点的东西),并按照我们上面的方式进行部署。

现在我确定你现在可以看到它的发展方向。我们为每个自定义git checkout master; git checkout -b anotherdomain.com设置了一个git分支,每个域都有自己的Heroku应用。 (显然)的好处是每个项目自定义都基于domains分支,这意味着您可以轻松地立即更新所有站点。

假设您更新了master分支中的一个视图 - 如何将其一次性部署到所有您的自定义网站?容易!

跑步:

  • master
  • git checkout somedomain.com
  • git merge master #deploy更改

并重复每个域名。在我的环境中,我编写了一个执行此操作的脚本,但如果您愿意,可以手动完成。

无论如何,希望这会有所帮助。