Django - 如何在共享主机上设置单独的媒体/静态服务器?

时间:2011-08-17 15:33:02

标签: django static shared-hosting

我想为我的django应用程序获得虚拟主机,但虚拟主机上的存储空间相当昂贵,所以我想使用共享主机提供商来存储网站的媒体/静态内容,因为它便宜很多。我怎么能这样做?

谢谢。

注意

对于我的应用程序,我需要运行无法在共享托管上安装的专用库(例如matplotlib),因此我无法使用FastCGI在共享托管上运行Django。

修改

为了澄清这个问题,我需要能够在django上传并将内容存储在共享主机上。以下是来自Running a Separate Media Serverlink)部分的django书籍的引用:

  

然而,这一步可能有些棘手。如果你的申请   涉及文件上传,Django需要能够编写上传的媒体   到媒体服务器。如果媒体存在于另一台服务器上,您需要   为这种写作安排在网络上发生的方式。

但是没有关于如何实现这一目标的细节。

1 个答案:

答案 0 :(得分:6)

没有什么可以阻止您将网址指向(X)HTML输出中的其他主机。

如果您的共享主机帐户位于http://awesome-hosting-provider.com/~myname/,您可以将MEDIA_URL中的settings.py设置为此值,请确保在呈现时使用RequestContextdjango.core.context_processors.media中包含TEMPLATE_CONTEXT_PROCESSORS(默认情况下会在其中),然后您可以使用{{ MEDIA_URL }}在模板中为您的网址添加前缀。

即使管理员也会使用此功能,只要您将所有必需的静态文件复制到共享环境中即可使用。

由于您还需要处理文件上传,正如本书所说,您必须能够从Django部署中写入存储位置(在共享服务器上)。有几种方法可以实现这一目标。

最简单的方法可能是使用具有正确选项的SSHFS(如reconnect,合理的超时等)在虚拟服务器上安装存储环境的顶级目录。当然,这需要SSH访问共享环境。为了简化操作,设置SSH身份验证密钥对可能会派上用场。

或者,如果您的共享托管服务提供商允许您这样做,您可以尝试使用NFS,尽管我发现它至少可以说是不可能的。

如果其他一切都失败了,您将不得不在共享环境中设置某种类型的Web服务,该服务将侦听您的Django部署中的上传并使Django应用程序转发它们。但是,在这种情况下,必须确保它足够安全,并且没有恶意用户可以直接与它通信来危害您的存储服务器。