【问题标题】:Django - How to setup separate media/static server on shared hosting?Django - 如何在共享主机上设置单独的媒体/静态服务器?
【发布时间】:2011-10-29 01:22:41
【问题描述】:

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

谢谢。

注意

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

编辑

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

不过,这一步可能有点棘手。如果您的应用程序 涉及文件上传,Django需要能够编写上传的媒体 到媒体服务器。如果媒体存在于另一台服务器上,您需要 为整个网络的写入安排一种方式。

但没有关于如何实现这一点的详细信息。

【问题讨论】:

    标签: django static shared-hosting


    【解决方案1】:

    没有什么能阻止您在 (X)HTML 输出中将 URL 指向不同的主机。

    如果您的共享主机帐户位于,例如http://awesome-hosting-provider.com/~myname/,您可以将settings.py 中的MEDIA_URL 设置为此值,确保在渲染时使用RequestContext 并在其中包含django.core.context_processors.media TEMPLATE_CONTEXT_PROCESSORS(注意它默认在那里),然后您可以使用{{ MEDIA_URL }} 在模板中为您的网址添加前缀。

    只要您将所有必需的静态文件复制到共享环境以使其可访问,即使管理员也可以使用。

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

    最简单的方法可能是使用 SSHFS 和正确的选项(如 reconnect、合理的超时等)将存储环境的顶级目录挂载到虚拟服务器上。当然,这需要通过 SSH 访问共享环境。为方便起见,设置 SSH 身份验证密钥对可能会派上用场。

    或者,如果您的共享主机提供商允许您这样做,您可以尝试 NFS,尽管我觉得至少可以这么说。

    如果其他一切都失败了,您将不得不在您的共享环境中设置某种网络服务,该服务将监听来自您的 Django 部署的上传并让 Django 应用程序转发它们。但是,在这种情况下,您必须确保它足够安全,并且没有恶意用户能够通过直接与您的存储服务器对话来破坏您的存储服务器。

    【讨论】:

    • 感谢您的建议,但是用户将上传内容,服务器也会生成内容,那么如何将这些内容传输到共享主机?
    • 我更改了问题以澄清我的意思。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2022-01-25
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    相关资源
    最近更新 更多