我想为我的django应用程序获得虚拟主机,但虚拟主机上的存储空间相当昂贵,所以我想使用共享主机提供商来存储网站的媒体/静态内容,因为它便宜很多。我怎么能这样做?
谢谢。
注意
对于我的应用程序,我需要运行无法在共享托管上安装的专用库(例如matplotlib),因此我无法使用FastCGI在共享托管上运行Django。
修改
为了澄清这个问题,我需要能够在django上传并将内容存储在共享主机上。以下是来自Running a Separate Media Server
(link)部分的django书籍的引用:
然而,这一步可能有些棘手。如果你的申请 涉及文件上传,Django需要能够编写上传的媒体 到媒体服务器。如果媒体存在于另一台服务器上,您需要 为这种写作安排在网络上发生的方式。
但是没有关于如何实现这一目标的细节。
答案 0 :(得分:6)
没有什么可以阻止您将网址指向(X)HTML输出中的其他主机。
如果您的共享主机帐户位于http://awesome-hosting-provider.com/~myname/
,您可以将MEDIA_URL
中的settings.py
设置为此值,请确保在呈现时使用RequestContext
并django.core.context_processors.media
中包含TEMPLATE_CONTEXT_PROCESSORS
(默认情况下会在其中),然后您可以使用{{ MEDIA_URL }}
在模板中为您的网址添加前缀。
即使管理员也会使用此功能,只要您将所有必需的静态文件复制到共享环境中即可使用。
由于您还需要处理文件上传,正如本书所说,您必须能够从Django部署中写入存储位置(在共享服务器上)。有几种方法可以实现这一目标。
最简单的方法可能是使用具有正确选项的SSHFS(如reconnect
,合理的超时等)在虚拟服务器上安装存储环境的顶级目录。当然,这需要SSH访问共享环境。为了简化操作,设置SSH身份验证密钥对可能会派上用场。
或者,如果您的共享托管服务提供商允许您这样做,您可以尝试使用NFS,尽管我发现它至少可以说是不可能的。
如果其他一切都失败了,您将不得不在共享环境中设置某种类型的Web服务,该服务将侦听您的Django部署中的上传并使Django应用程序转发它们。但是,在这种情况下,必须确保它足够安全,并且没有恶意用户可以直接与它通信来危害您的存储服务器。