Django & Couchdb:如何在没有 Apache 服务器的情况下进行部署

Posted

技术标签:

【中文标题】Django & Couchdb:如何在没有 Apache 服务器的情况下进行部署【英文标题】:Django & Couchdb: How to deploy without Apache server 【发布时间】:2011-03-30 16:49:22 【问题描述】:

我是 CouchDB 的新手,所以要温柔...

我真的很喜欢 CouchDB 的功能,从我看来它确实很好地补充了 Django,但我真的不明白这两者是否能够部署在商业环境中。这是我的问题:

如果您决定将 Django 与 CouchDB 一起使用,这是否意味着您必须使用 Apache 服务器进行部署?理想情况下,如果 CouchDB 能够承担提供页面的工作,那就太好了。据我了解,如果你想使用 Django 框架处理 Web 逻辑,你必须使用 CGI 兼容的 Web 服务器。

编辑:

更多说明:是否可以在没有其他服务器(最常见的是 Apache 服务器或 Django 开发服务器)的情况下使用 Django 框架和 CouchDB 来处理请求?原因是:CouchDB 已经被设计为处理许多并发连接并且被设计成可以很好地扩展。使用 CouchDB 而不是直接使用它来提供页面似乎是一种浪费。

【问题讨论】:

【参考方案1】:

我在生产中使用 Django 和 Couchdb。我们在 Apache 下有 Django,但使用 Couchdb 不会影响 Django 在什么下运行。

在 Django 中,您只需使用库与 Couchdb 对话。 Couch 使用 http 作为库用来与数据库通信的协议。默认情况下,Couch 仅在 localhost 上侦听。

Couchapp 可以提供页面,但我发现 Django 的方式更加优雅。它似乎只适用于大多数静态页面和网站。

【讨论】:

在您的设置中,Django 是否将所有持久数据保存到 CouchDb?我问的原因是,如果您所要做的就是跨服务器(或对等点)复制 CouchDB 数据,那么扩展将非常容易。 目前没有。我们的应用程序是生产的,但不是为大量用户服务的,只为一小部分重要用户服务。我用mysql做auth和其他内置的东西。比如我用couchdb做我们学校申请者的记录。这对那些人来说效果很好。我知道 Django 的 nosql 后端的工作正在进行中。【参考方案2】:

我相信您有多种选择,实际上取决于您希望实现的目标,因为每个解决方案都会带来额外的功能/控件。

一种方法是使用 nginx 和 Apache,为您的 django 应用程序提供 NGINX 服务器静态文件,如果可能的话,可以建立一个桥,让它从 couchdb-document 提供文件附件(不确定这是否真的可能) .您还可以让 NGINX 作为 apache/django 部分的代理来处理应用程序逻辑。

另一种选择是使用“couchapp”从您的 couchdb 中实际提供内容。如果您需要 seo 友好的 url,我认为您还可以将 NGINX 配置为位于 couchapp 前面的代理。

最后,也许可以考虑使用 express 设置一个 nodejs 应用程序。 nodejs 应用程序会提供友好的 url,因为它都是 javascript,它可能比 django/python 更适用于 couchdb。

到目前为止,我还不是该领域的专家,我的大部分经验是 nginx/apache 和 django,但我关注 couchdb 已经有一段时间了,有一段时间,出于安全目的,每个人都会把它停在 nginx 后面,但我相信这些问题已经解决了……也许吧?

【讨论】:

感谢 Mgan,但我认为我正在寻找的更多是将 Django 和 Python 实现到实际的视图服务器而不是默认的 javascript 中。 CouchDB 指南描述了如何使用 Javascript 来实现这一点,但没有描述如何使用其他语言来实现它以及带来的限制:guide.couchdb.org/draft/design.html#server 刚开始时,我建议反对视图服务器使用不同的语言。您的代码在任何语言中都将非常相似。这可能不值得。 设计文档呢?这似乎是使用 Django 模板生成 HTML 的好地方。 请参阅此处列出的图的底部,了解使用 Javascript 生成 HTML 模板的示例:guide.couchdb.org/draft/design.html#figure/1【参考方案3】:

我也在为这个问题而苦苦挣扎。如果 CouchDb 的内置 web 服务器似乎很浪费;提供蒲团的那个,不能用于复杂的应用程序。

我发现如下:

可以在 CouchDb 中放置重写规则,如下所述:http://blog.couchbase.com/rewrites-and-virtual-hosting-introduction 并且可以将简单的页面映射到优雅的 web url。但在我看来,这样的服务器只能在基于文档的 CouchDb 数据库框架内提供页面(即处理 CouchDb 中数据的 CRUD 应用程序)这样的网站将通过使用 CouchDb 的内置复制功能而具有固有的可扩展性

对于那些需要 CGI 应用程序的情况,我认为需要运行另一台服务器;比如说在子域上,使用更传统的服务器,如 Apache、Ngnix 等。但这可能会破坏可扩展性。如果有人能告诉我如何从 CouchDb 本身调用 CGI,那就太好了。那真是太棒了

【讨论】:

以上是关于Django & Couchdb:如何在没有 Apache 服务器的情况下进行部署的主要内容,如果未能解决你的问题,请参考以下文章

couchdb 更改通知

CouchDB _changes-API 过滤器

来自 Ektorp 的 CouchDB Map/Reduce 视图查询

如何使用 CouchDB 的 ui 在 hyperledger fabric 1.4 中停止 CouchDB 的更新?

获取 couchdb 中所有视图名称的列表

如何从命令行启动CouchDB