在EC2中挂载S3桶并作为挂载点透明使用

4 投票
5 回答
8791 浏览
提问于 2025-04-15 12:04

我有一个网站应用(叫做 myapp.com),用户可以在上面上传文件。这个网站应用会部署在亚马逊的 EC2 服务器上。我想通过一个 S3 存储桶的域名(比如 uploads.myapp.com)把这些文件提供给用户下载。

当用户上传文件时,我可以很方便地把它们放到 EC2 服务器上一个叫 "site_uploads" 的文件夹里。但是,由于我的 EC2 服务器存储空间有限,如果上传的文件很多,存储空间很快就会用完。

如果能把 S3 存储桶挂载到 EC2 的 "site_upload" 目录就好了。这样,上传到 EC2 的 "site_upload" 目录的文件就能 自动 出现在 uploads.myapp.com 上(我的网站应用可以用模板标签确保这些上传内容的链接是基于这个 S3 域名的)。这样做还可以让我更好地处理文件,因为请求文件时会直接去 S3,而不是我的 EC2 服务器。此外,这样也方便我的网站应用对 "site_upload" 中的图片进行缩放和调整,虽然这些图片实际上是在 S3 上。

我在考虑使用 s3fs,但根据评论来看,这似乎不是一个完全成熟的解决方案。我希望找到一个免费的解决方案。

顺便提一下,这个网站应用是用 Django 写的,不过这对具体情况影响不大。

5 个回答

2

我在使用s3fs这个工具,但找不到现成的版本。为了方便大家,我把我的构建分享出来。

因为没有找到配置文档,所以我只能凭感觉来设置,最后在我的fstab文件里加了这个内容:

s3fs#{{ bucket name }} {{ /path/to/mount/point }} fuse allow_other,accessKeyId={{ key }},secretAccessKey={{ secret key }} 0 0

s3fs

2

对于文件上传,你的用户可以直接将文件上传到S3,具体的操作可以参考这里,详细说明在这里

这样的话,你就不需要把S3挂载到你的系统上了。

在提供文件的时候,你也可以直接从S3上提供,只需将文件设置为公开。我建议将网站命名为“files.mydomain.com”或“images.mydomain.com”,并指向S3。

5

我没有使用EC2,但我在我的Linux服务器上永久挂载了我的S3存储桶。我是通过Jungledisk来实现的。虽然这不是一个免费的解决方案,但价格非常便宜。

首先,我像往常一样设置Jungledisk。然后我确保安装了fuse。主要的步骤就是创建一个配置文件,里面放上你的密钥等信息。接着,在你的fstab文件中添加一行,类似这样。

jungledisk /path/to/mount/at fuse noauto,allow_other,config=/path/to/jungledisk/config/file.xml 0 0

然后只需挂载一下,就可以使用了。

撰写回答