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