Amazon S3のMagentoメディアアセット


21

Amazon S3にすべてのmagentoメディア資産を保存する方法を尋ねられました。https://github.com/punkave/aS3StreamWrapperのようなPHPストリームラッパーの使用を検討し、メディアフォルダーをs3:\ mybucket \ mediaFolderに設定しました

誰もこれを経験していますか?

または、次のようなものを使用することをお勧めしますhttps : //github.com/sstoiana/magento-s3 しかし、この拡張機能は見栄えがよくありません。他の推奨事項はありますか?


1
余談です。あなたの動機は何ですか?グローバルなオーディエンスに対応している場合、またはサーバーのインターフェイスよりも多くのトラフィックをプッシュしている場合(> 100Mbit / 1Gbit)、または通過率の低いサーバープロバイダーがある場合(それ自体が問題)-CDNは通常、コンテンツを直接配信するよりも遅い同じマシンから。混雑したネットワーク、遠いブレークアウトポイント、劣悪なルートは、通常、自分でホストするよりもコンテンツ配信が遅くなります。
ベンレサニ-ソナシ

1
動機は次のとおりです。誰かが私の経験と意見を求めて、私はそれについて考え、ストリームラッパーソリューションを好みますが、このクールなサイトがあり、多分誰かが私のために彼の2セントを持っています:
Fabian Blechschmidt

@sonassiあなたのCDNでの経験はやや時代遅れのようです。すべての成熟したCDNソリューションは、Webサーバーに余裕があるよりもはるかに高い規模でコンテンツを地理的に配信し、最も近い地理的な場所から要求元のクライアントにコンテンツを提供します。js / cssの連結と縮小にアセットパイプラインを使用して、サイト上のHTTPリクエストの数を最適化することも重要ですが、Magentoサイトでは特に複雑です。
ラルフタイス

@RalphTice 3大陸で独自のBGPエニーキャストネットワークを実行していることを考えると、それほど時代遅れではありません。ほとんどの「手頃な」CDNには、国ごと(大陸ごと)に単一のPoPがあります。これは、Webサーバー自体より地理的に近いとは限りません。例えば。GBのAmazonに最も近いPoPはアイルランドです。これは、イギリスに拠点を置くマシンよりもはるかに大きなレイテンシを持っています。繰り返しますが、グローバルな視聴者をターゲットにしない限り、国内の顧客がCDNの恩恵を受けることはまずありません。場合によっては、より高価で複雑なことは言うまでもなく、遅くなります。
ベン・レッサーニ-ソナシ

皆さん、私はs3バケットにthaiphan / magento-s3拡張機能を使用しており、s3で製品イメージをアップロードして製品イメージに接続しますが、システムサーバーでも製品イメージを生成します。画像にs3バケットを使用する必要があるため、システムのpub / media / catalogも削除しようとしましたが、サイトサーバーの読み込み後、製品画像がシステムサーバーでも再作成されます。ローカルサーバーで作成されたこのイメージを停止する必要がありますか?
Camit1dk

回答:


6

これらの人は解決策を見つけているようです:(http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/

2つの可能なアプローチがあります。1つは、Magentoにすべてのメディアアセットを作成時にS3にプッシュさせる方法、もう1つはメディアディレクトリをS3バケットにマウントし、Magentoにローカルディスクへの書き込みだと思わせる方法です。後者を選択しました。

最終的に、s3fsというツールを使用しました。このツールは、fuseと呼ばれるより広範な技術を使用しています。かなり簡単な構成(後述)を使用すると、s3fsを起動して実行できます。AWSまたは他のPAASプロバイダーを使用している場合、S3バケット名またはAPIアクセス認証情報をハードコードしないように注意してください。

次の変数を特定の構成の値に置き換えてください。

  • {{S3_BUCKET}}(S3バケットの名前)
  • {{API_PUBLIC_ACCESS_KEY}}(AWSが提供)
  • {{API_SECRET_ACCESS_KEY}}(AWSが提供)
  • {{UID}}(nginx / apacheユーザーのユーザーID)
  • {{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/…による推奨方法でもあるようです(少なくともAWS EFSが利用可能になるまで)
pHiL

1
このソリューションは優れていますが、実行速度が非常に遅いことがわかりました。これにどう対処しましたか?MagentoがURLを生成するとき、ファイルシステムがファイルが存在することを確認しているようです。
greatwitenorth

2

OnePicaのCDN拡張機能は、この機能のためにすぐに使用でき、S3以外のものもサポートします。引用:「現在、この拡張機能は、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 / ...にアップロードされないということですか?
ファビアンBlechschmidt

1
参考までに、これはDreamObjectsドロップインS3置換ソリューションでも動作するはずです。これまでのところ、他のすべてのS3バケットでうまく機能しました。
イルミネート

1

OnePicaのCDN拡張機能は、デフォルトのMagentoよりもはるかに早くタイムアウトする独自のキャッシュライフタイムに正しいTTLを設定する必要があることは言うまでもなく、製品イメージに対してのみ機能するソリューションではありません。すべてのcms wysiwygイメージはメディアフォルダーにありますが、S3を使用していない場合、すべてのメディアイメージをS3にアップロードすることになります。

cloudfrontを使用するのは良いことですが、すべてのフロントエンドノードとバックエンドノードでメディアフォルダーを共有するにはNFSが必要です。または、S3にファイルを保存するための独自のインターフェイスを構築する必要があり、エラーを処理する必要もあります(S3 APIタイムアウト前にコードがそれを処理できるかどうか、誰かが極端に大きなファイルをアップロードすることを考えてください)

他の方法は、追加のRDS(データベース)にメディアストレージを保存するだけで、個々のサイズ変更キャッシュイメージはアプリサーバーのローカルメディアフォルダーに保存されますが、Cloudfrontは既にそれらをキャッシュするので問題ありません。


1

別の「admin」ノード(admin.example.com)を持ち、そこにメディアフォルダーを保持することを好みます。これにより、NFSのコストや同期などの問題を回避できます。その後、CDN(私はcloudfrontを使用)を管理ノードのメディアフォルダーに接続し、すべてのストアに対して構成できます。

管理ノードを使用する他の利点は、管理ノードですべてのcron(インデックスの再作成およびその他のcron)、スケジュールされたタスク(製品のインポート、在庫、注文の同期など)を移動し、フロントエンドノードのCPU処理を保存できることです。

編集:最後の回答として実際にOPの質問に対処しませんでした。Amazon S3のMagentoメディア資産?まぁ、Magentoにはすでに多くの処理オーバーヘッドがあるので、s3の同期/ストリーミングを避け、代わりにローカルメディアフォルダーを使用することをお勧めします。


ありがとう!実際、アップロードが不可能なクラウドホストをチェックアウトしました。後でそれを落とした:
ファビアンBlechschmidt 14年

1

さて、数年が経ちましたが、S3 / CDNからアセットを移動して提供するプラグインが複数あることに注意することが重要だと思います。

Google検索には多くのオプションがあります。

GitHubの1つを次に示します。

https://github.com/magefm/cdn

MagentoのConnectマーケットプレイスの1つを次に示します。

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

これらの特定の拡張機能はまだ試していませんが、今後のプロジェクトに使用する予定です。他にもあります。

@Sonassiに反対する必要があります。独立したストレージを使用して、パフォーマンスの良い最も安価なサーバー構成を可能にすることは、今日のベストプラクティスと考えられています。たとえば、S3を使用してすべての静的コンテンツをWebサーバーから移動するだけで、サーバーが使用する帯域幅がはるかに少なくなり、同時ユーザーが増え、サーバー全体の電力が少なくなります。また、最近のほとんどの人のように単一のデータセンターにいて、ダラスにいると言うなら、西ヨーロッパの人々がCloudfrontのようなグローバルCDNではるかに高速にサービスされることは間違いありません。そのため、Webサーバーとは別にストレージを使用して帯域幅の使用量を削減すると、このアプローチなしでより早く必要になったときに1台のサーバーのみを使用でき、CDNを使用するとグローバルロード時間が大幅に増加します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.