Amazon S3中的Magento媒体资产


21

我被问到如何将所有magento媒体资产保存在Amazon S3中。我考虑过使用像这样的PHP Stream Wrapper:https : //github.com/punkave/aS3StreamWrapper,只是将媒体文件夹设置为s3:\ mybucket \ mediaFolder

有人对此有经验吗?

或者更好地使用类似这样的东西:https : //github.com/sstoiana/magento-s3 但是这个扩展看起来并不好。还有其他建议吗?


1
顺便说一句。您的动机到底是什么?除非您要迎合全球受众,或者要推动比服务器接口更多的流量(> 100Mbit / 1Gbit),或者服务器供应商的传输不畅(这本身就是一个问题),否则CDN通常比直接提供内容慢在同一台机器上。拥挤的网络,遥远的爆发点和不良的路线通常会导致内容交付速度比自己托管自己慢。
Ben Lessani-Sonassi

1
动机是:有人问我我的经验和意见,我对此进行了思考,并且更喜欢使用流包装器解决方案,但是我们有这个
不错的

@sonassi您使用CDN的经验似乎有些过时。所有成熟的CDN解决方案都以比您为Web服务器负担得起的更大的规模在地理上分发内容,并将内容从最接近的地理位置提供给请求的客户端。通过使用资产管道进行js / css串联和最小化来优化站点上的HTTP请求数量也很重要,但这要复杂得多,尤其是对于Magento站点。
拉尔夫·泰斯

@RalphTice考虑到我们在3大洲运行我们自己的BGP任播网络,这还不是过时的。大多数“负担得起的” CDN在每个国家(某些国家/地区)都有单个PoP,在地理上不一定比您的Web服务器本身更近。例如。GB离亚马逊最近的PoP是爱尔兰-与英国的机器相比,其延迟要大得多。因此,我重申,除非您针对全球受众,否则您的国内客户不太可能从CDN那里获得任何收益。在某些情况下,速度较慢,更不用说更昂贵和更复杂了。
Ben Lessani-Sonassi

伙计们,我为s3存储桶使用了Thaiphan / magento-s3扩展名,它可以在s3上上传产品图像并与产品图像连接,但是它也会在我的系统服务器中生成产品图像。我只需要使用s3存储桶来存储映像,因此我也尝试删除系统的pub / media / catalog,但是在加载站点页面产品映像后,还要在我的系统服务器中重新创建。是否需要停止在本地服务器中创建的该映像?
Camit1dk '18

Answers:


6

看来这些家伙找到了解决方案:(http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/

有两种可能的方法,一种是让Magento在创建它们时将所有媒体资产推送到S3,另一种是简单地将媒体目录挂载到S3存储桶,并让Magento认为它正在写入本地磁盘。我们选择了后者。

我们最终使用了一个名为s3fs的工具,该工具使用了一种更广泛的技术,称为保险丝。通过一些相当简单的配置(如下所述),您可以启动并运行s3fs。如果您使用的是AWS或其他PAAS提供程序,请注意不要对S3存储桶名称或API访问凭证进行硬编码。

确保使用特定配置的值替换以下变量:

  • {{S3_BUCKET}}(您的S3存储桶的名称)
  • {{API_PUBLIC_ACCESS_KEY}}(由AWS提供)
  • {{API_SECRET_ACCESS_KEY}}(由AWS提供)
  • {{UID}}(nginx的用户ID / apache用户)
  • {{GID}}(nginx / apache用户的组ID)
  • {{MOUNTED_DIRECTORY}}(Magento媒体目录的路径)

这是设置:

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}}

2
这似乎也是AWSs3.amazonaws.com/quickstart-reference/magento/latest/doc/…第11页(至少在AWS EFS可用之前)的推荐方法
pHiL 2016年

1
虽然此解决方案很好,但我发现它运行非常缓慢。您是如何处理的?似乎当Magento生成URL时,它正在检查文件系统以确保文件存在。
greatwitenorth

2

OnePica的CDN扩展非常方便地使用此功能,并且不仅仅支持S3。Quote:“当前,该扩展与Amazon S3,Coral CDN,Mosso / Rackspace Cloud Files以及支持FTP,FTPS或SFTP的任何CDN,服务器或服务集成在一起。”


+1-我可以确认OnePica可以很好地工作并支持S3和Rackspace Cloud。
philwinkle

4
OnePica只是CDN管理器,意味着文件仍然是本地文件
Fabian Blechschmidt

@FabianBlechschmidt您的评论必须更加具体。正确安装/配置OnePica的扩展程序肯定不会将文件保留在本地,我在带有Amazon S3的生产环境中使用了它。
拉尔夫·泰斯

也许我错过了一些东西。您是说文件已上传到S3,而在media / catalog / ...中没有更多?
Fabian Blechschmidt

1
仅供参考,这也应与DreamObjects嵌入式S3替换解决方案一起使用。到目前为止,它与其他所有S3存储桶都非常有效。
ylluminate

1

OnePica的CDN扩展不是解决方案,它仅适用于产品图像,更不用说您需要为其自身的缓存生存时间设置正确的TTL,这比默认的Magento超时要早得多。所有您所见即所得的图像都将位于媒体文件夹中,但不使用S3,您最终会将所有媒体图像上传到S3。

使用cloudfront会很好,但是您仍然需要一个NFS在所有前端节点和后端节点之间共享媒体文件夹。或者,您需要构建自己的界面以将文件保存在S3上,并且还需要处理错误(考虑有人上传了超大文件,您的代码是否可以在S3 API超时之前处理该文件)

另一种方法是将媒体存储保存在额外的RDS(数据库)中,并且单个调整大小的缓存映像仍将保存在应用服务器的本地媒体文件夹中,但是可以,因为Cloudfront已经将它们缓存了。


1

我更喜欢有一个单独的“ admin”节点(admin.example.com)并将媒体文件夹保留在那里。这样,您将节省NFS成本以及同步等问题。然后,任何CDN(我使用cloudfront)都可以与管理节点媒体文件夹连接,并为所有商店配置。

使用管理节点的其他好处是,您可以在管理节点上移动所有分支(重新索引和其他分支),计划任务(产品导入,库存和订单同步等),并保存前端节点的CPU处理。

编辑:作为最后一个答案并没有真正解决OP的问题。Amazon S3中的Magento媒体资产?好吧,我相信Magento已经有太多的处理开销,所以我认为最好不要使用s3同步/流传输,而应使用本地媒体文件夹。


谢谢!实际上,我签出了无法上传的云主机。稍后放下它:-)
Fabian Blechschmidt 2014年

1

好了,现在已经过去了两年,我认为必须指出,有许多可用的插件可以移动并服务于S3 / CDN中的资产。

Google搜索提供了很多选择。

这是GitHub上的一个:

https://github.com/magefm/cdn

这是Magento Connect市场上的一个:

http://www.magentocommerce.com/magento-connect/aws-s3-cdn-for-product-images.html

我还没有尝试过这些特定的扩展,但是将用于即将进行的项目。还有其他人。

我不得不不同意@Sonassi,使用单独的存储来允许仍然具有良好性能的最便宜的服务器配置确实是当今的最佳实践。例如,只需使用S3将所有静态内容移出Web服务器,就可以帮助服务器使用更少的带宽,并允许更多的并发用户和更少的整体服务器电源。而且,如果如今您和大多数人一样都在一个数据中心中,并说它在达拉斯,那么毫无疑问,像Cloudfront这样的全球CDN可以为西欧的人们提供更快的服务。因此,使用与Web服务器分开的存储来降低带宽使用量时,如果不使用此方法,则您将需要更早地使用一台服务器,并且使用CDN将大大增加全局加载时间。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.