多个Django站点,共享代码库和数据库(Multiple Django sites with sh

2019-06-26 03:16发布

我创建了一个Django的proyect与20个站点(每个站点一个不同的域)的20个不同国家。 该网站分享一切:代码库,数据库,网址,模板等

他们不同意的唯一的事是小的自定义设置(标志,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的期望只有一个设置每个app文件,所以我需要有20个应用程序。 是否有一个解决方案?

谢谢!

Answer 1:

所以,我最近做类似的东西,发现下面的策略是最好的选择。 我会假设你熟悉的Git分支在这一点上,以及Heroku的遥控器。 如果你不是,你应该先阅读: https://devcenter.heroku.com/articles/git#multiple-remotes-and-environments

我走的主要策略是有一个单一的代码库(单一的Git回购)有:

  • 一个master分支,它包含所有共享代码:模板,视图的URL。
  • 许多site分支机构,根据master ,其中包含所有站点特定的自定义设置:CSS,图片,设置文件(如果它们有很大的不同)。

这种工作方式是像这样:

首先,确保你的master分支。

二,创建一个新的Git分支为您的站点之一,例如: git checkout -b somedomain.com

三,自定义您的somedomain.com分支,以便它看起来你想要的方式。

接下来,部署somedomain.com活到Heroku上,通过运行heroku create somedomain.com --remote somedomain.com

现在,把你somedomain.com分支代码到新的Heroku应用: git push somedomain.com somedomain.com:master 。 这将部署在Heroku上的代码。

现在,你有你的somedomain.com分支都有自己的Heroku应用程序部署,您可以通过添加做所有正常的Heroku东西--remote somedomain.com到正常的Heroku的命令,例如:

  • heroku pg:info --remote somedomain.com
  • heroku addons:add memcache:5mb --remote somedomain.com
  • 等等

所以,现在你已经基本上有两个分支:一个master分支,和somedomain.com分支。

回到你的master分支,再拍新的分支为您的下一个域: git checkout master; git checkout -b anotherdomain.com git checkout master; git checkout -b anotherdomain.com 。 然后定制,以自己的喜好(CSS,位点特异性的东西),并部署我们在上面做的方式相同。

现在,我敢肯定,你可以看到这是由现在要去。 我们有我们的每一个自定义的一个分支的git domains ,每个域都有它自己的Heroku应用程序。 好处(显然)为各项目,这些自定义的基于断master分支,这意味着你可以轻松地更新所有的网站一次。

比方说,你更新你的意见一个master分支-你怎么能在这一次部署到所有自定义的网站? 容易!

赶紧跑:

  • git checkout somedomain.com
  • git merge master
  • git push somedomain.com somedomain.com:master #部署更改

再次为每个域。 在我的环境,我写了一个脚本,这样做,但它是很容易做手工,如果你愿意的话。

总之,希望这有助于。



文章来源: Multiple Django sites with shared codebase and DB