我创建了一个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
我有一些问题:
- 我读过它可以创建为每个站点(域)的虚拟主机,并通过其网站的settings.py文件。 不过,我担心这会为每个网站创建一个Django的实例。 我对吗?
- 是否有这样做的部署更有效的方法是什么? 我读过有关Django的dynamicsites ,但我不知道这是否是正确的道路要走。
- 如果我决定使用Heroku的部署,似乎Heroku的期望只有一个设置每个app文件,所以我需要有20个应用程序。 是否有一个解决方案?
谢谢!
所以,我最近做类似的东西,发现下面的策略是最好的选择。 我会假设你熟悉的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
#部署更改
再次为每个域。 在我的环境,我写了一个脚本,这样做,但它是很容易做手工,如果你愿意的话。
总之,希望这有助于。