我被问到如何将所有magento媒体资产保存在Amazon S3中。我考虑过使用像这样的PHP Stream Wrapper:https : //github.com/punkave/aS3StreamWrapper,只是将媒体文件夹设置为s3:\ mybucket \ mediaFolder
有人对此有经验吗?
或者更好地使用类似这样的东西:https : //github.com/sstoiana/magento-s3 但是这个扩展看起来并不好。还有其他建议吗?
我被问到如何将所有magento媒体资产保存在Amazon S3中。我考虑过使用像这样的PHP Stream Wrapper:https : //github.com/punkave/aS3StreamWrapper,只是将媒体文件夹设置为s3:\ mybucket \ mediaFolder
有人对此有经验吗?
或者更好地使用类似这样的东西:https : //github.com/sstoiana/magento-s3 但是这个扩展看起来并不好。还有其他建议吗?
Answers:
看来这些家伙找到了解决方案:(http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/)
有两种可能的方法,一种是让Magento在创建它们时将所有媒体资产推送到S3,另一种是简单地将媒体目录挂载到S3存储桶,并让Magento认为它正在写入本地磁盘。我们选择了后者。
我们最终使用了一个名为s3fs的工具,该工具使用了一种更广泛的技术,称为保险丝。通过一些相当简单的配置(如下所述),您可以启动并运行s3fs。如果您使用的是AWS或其他PAAS提供程序,请注意不要对S3存储桶名称或API访问凭证进行硬编码。
确保使用特定配置的值替换以下变量:
这是设置:
yum install -y gcc libstdc++-devel gcc-c++ curl curl* curl-devel libxml2 libxml2* libxml2-devel openssl-devel mailcap
cd /usr/local/src
wget http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz
tar -xzf fuse-2.9.3.tar.gz
rm -f fuse-2.9.3.tar.gz
mv fuse-2.9.3 fuse
cd fuse/
./configure –prefix=/usr
make
make install
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/
ldconfig
modprobe fuse
pkg-config –modversion fuse
wget http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz
tar -xzvf s3fs-1.74.tar.gz
rm -f s3fs-1.74.tar.gz
mv s3fs-1.74 s3fs
cd s3fs
./configure –prefix=/usr
make
make install
echo “{{S3_BUCKET}}:{{API_PUBLIC_ACCESS_KEY}}:{{API_SECRET_ACCESS_KEY}}” > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
echo “user_allow_other” > /etc/fuse.conf
echo “s3fs#{{S3_BUCKET}} {{MOUNTED_DIRECTORY}} fuse use_cache=/tmp,allow_other,uid={{UID}},gid={{GID}} 0 0″ >> /etc/fstab
s3fs -o allow_other -o uid={{UID}} -o gid={{GID}} -ouse_cache=/tmp {{S3_BUCKET}} {{MOUNTED_DIRECTORY}}
OnePica的CDN扩展非常方便地使用此功能,并且不仅仅支持S3。Quote:“当前,该扩展与Amazon S3,Coral CDN,Mosso / Rackspace Cloud Files以及支持FTP,FTPS或SFTP的任何CDN,服务器或服务集成在一起。”
OnePica的CDN扩展不是解决方案,它仅适用于产品图像,更不用说您需要为其自身的缓存生存时间设置正确的TTL,这比默认的Magento超时要早得多。所有您所见即所得的图像都将位于媒体文件夹中,但不使用S3,您最终会将所有媒体图像上传到S3。
使用cloudfront会很好,但是您仍然需要一个NFS在所有前端节点和后端节点之间共享媒体文件夹。或者,您需要构建自己的界面以将文件保存在S3上,并且还需要处理错误(考虑有人上传了超大文件,您的代码是否可以在S3 API超时之前处理该文件)
另一种方法是将媒体存储保存在额外的RDS(数据库)中,并且单个调整大小的缓存映像仍将保存在应用服务器的本地媒体文件夹中,但是可以,因为Cloudfront已经将它们缓存了。
我更喜欢有一个单独的“ admin”节点(admin.example.com)并将媒体文件夹保留在那里。这样,您将节省NFS成本以及同步等问题。然后,任何CDN(我使用cloudfront)都可以与管理节点媒体文件夹连接,并为所有商店配置。
使用管理节点的其他好处是,您可以在管理节点上移动所有分支(重新索引和其他分支),计划任务(产品导入,库存和订单同步等),并保存前端节点的CPU处理。
编辑:作为最后一个答案并没有真正解决OP的问题。Amazon S3中的Magento媒体资产?好吧,我相信Magento已经有太多的处理开销,所以我认为最好不要使用s3同步/流传输,而应使用本地媒体文件夹。
好了,现在已经过去了两年,我认为必须指出,有许多可用的插件可以移动并服务于S3 / CDN中的资产。
Google搜索提供了很多选择。
这是GitHub上的一个:
这是Magento Connect市场上的一个:
http://www.magentocommerce.com/magento-connect/aws-s3-cdn-for-product-images.html
我还没有尝试过这些特定的扩展,但是将用于即将进行的项目。还有其他人。
我不得不不同意@Sonassi,使用单独的存储来允许仍然具有良好性能的最便宜的服务器配置确实是当今的最佳实践。例如,只需使用S3将所有静态内容移出Web服务器,就可以帮助服务器使用更少的带宽,并允许更多的并发用户和更少的整体服务器电源。而且,如果如今您和大多数人一样都在一个数据中心中,并说它在达拉斯,那么毫无疑问,像Cloudfront这样的全球CDN可以为西欧的人们提供更快的服务。因此,使用与Web服务器分开的存储来降低带宽使用量时,如果不使用此方法,则您将需要更早地使用一台服务器,并且使用CDN将大大增加全局加载时间。