在EC2中挂载S3桶并作为挂载点透明使用
我有一个网站应用(叫做 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 个回答
我在使用s3fs这个工具,但找不到现成的版本。为了方便大家,我把我的构建分享出来。
因为没有找到配置文档,所以我只能凭感觉来设置,最后在我的fstab文件里加了这个内容:
s3fs#{{ bucket name }} {{ /path/to/mount/point }} fuse allow_other,accessKeyId={{ key }},secretAccessKey={{ secret key }} 0 0
我没有使用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
然后只需挂载一下,就可以使用了。