2

我正在以 Django 作为后端构建一个宁静的 Web 服务,目前我正在关注扩展。我想要一个这样的架构:http: //www.djangobook.com/en/2.0/_images/scaling-4.png 我可以在高负载下启动更多的 django 实例。我的问题是我不知道如何将用户上传的内容外部化(在 django 中称为媒体)。

我的基本想法是:Amazon S3、FTP 上传、SMT 或 NFS 挂载,或某种文件数据库,如 GridFS。

因为欧盟取消了拯救港协议,而且欧盟公司将用户数据放在非欧盟服务器上存在很多法律不确定性,所以我不能使用亚马逊 S3 或任何非欧盟存储解决方案。我看过 Minio,一个兼容 S3 API 的存储服务器。我只能将帖子发布到使用最新(非稳定)版本的 minio,但不能获取。其他 S3 兼容服务器(如 CEPH)对于我的用例来说“太大了”。

我想将文件上传到 ftp 服务器并使用 nginx 从那里提供它们。问题是,django-storages ftp 功能似乎不稳定,django-resto 已被弃用且不再维护。

SMB/NFS 挂载不稳定,当由于网络故障导致挂载不可用时,django 会丢失要写入的数据。

GridFS 我无法开始工作,因为它使用的是非关系的 mongodb,而 django 是关系的。非关系 django fork 没有得到很好的维护。在从 GridFS 提供文件方面,有 nginx-gridfs 和 mod_gridfs,两者都不再维护。

您对如何将 django 的媒体外部化有任何想法吗?

4

1 回答 1

1

好吧,我通过使用 Minio 库解决了我的问题。创建了特殊的存储类,它继承了 django 的 FileStorageClass。重写 url() 和 save() 方法。将其移至外部模块

于 2016-06-29T12:45:27.250 回答