Magento Media Assets in Amazon S3


21

Ich wurde gefragt, wie ich alle Magento-Medienressourcen in Amazon S3 speichern soll. Ich dachte darüber nach, einen PHP Stream Wrapper wie diesen zu verwenden: https://github.com/punkave/aS3StreamWrapper und stellte den Medienordner einfach auf s3: \ mybucket \ mediaFolder ein

Hat jemand Erfahrung damit?

Oder verwenden Sie besser so etwas: https://github.com/sstoiana/magento-s3 Aber diese Erweiterung sieht nicht gut aus. Irgendwelche anderen Empfehlungen?


1
Nur zur Seite. Was genau ist deine Motivation? Es sei denn, Sie richten sich an ein globales Publikum, übertragen mehr Datenverkehr als über die Serverschnittstelle (> 100 MBit / 1 GBit) oder haben einen Serveranbieter mit schlechten Übertragungsraten (was an sich ein Problem darstellt) - CDNs sind in der Regel langsamer als die direkte Bereitstellung des Inhalts von der gleichen Maschine. Überlastete Netzwerke, entfernte Breakout-Points und schlechte Routen führen in der Regel zu einer langsameren Bereitstellung von Inhalten als das einfache Hosten selbst.
Ben Lessani - Sonassi

1
Die Motivation ist: Jemand hat mich nach meiner Erfahrung und Meinung gefragt und ich habe darüber nachgedacht und bevorzuge die Stream Wrapper-Lösung, aber wir haben diese coole Seite und vielleicht hat jemand seine zwei Cent für mich :-)
Fabian Blechschmidt

@sonassi deine Erfahrung mit CDNs scheint etwas veraltet zu sein. Alle ausgereiften CDN-Lösungen verteilen Inhalte geografisch in einem viel größeren Umfang, als Sie sich für Ihre Webserver leisten können, und liefern Inhalte vom nächstgelegenen geografischen Standort zum anfordernden Client. Es ist auch wichtig, die Anzahl der HTTP-Anforderungen auf Ihrer Site mithilfe einer Asset-Pipeline für die Verkettung und Minimierung von JS / CSS zu optimieren. Dies ist jedoch insbesondere für Magento-Sites sehr viel komplizierter.
Ralph Tice

@RalphTice Nicht veraltet, wenn man bedenkt, dass wir ein eigenes BGP-Anycast-Netzwerk auf 3 Kontinenten betreiben. Die meisten "erschwinglichen" CDNs haben einzelne PoPs pro Land (einige nur pro Kontinent), die nicht unbedingt geografisch näher sind als Ihr Webserver. Z.B. Der nächstgelegene PoP von GB für Amazon ist Irland - mit einer weitaus höheren Latenz als ein in England ansässiger Computer. Ich möchte nochmals betonen, dass Ihre inländischen Kunden von einem CDN wahrscheinlich überhaupt keinen Nutzen haben werden, es sei denn, Sie richten sich an ein globales Publikum. In einigen Fällen ist es langsamer, nicht zu vergessen teurer und komplizierter.
Ben Lessani - Sonassi

jungs, ich habe thaiphan / magento-s3 erweiterung für s3 bucket verwendet, es funktioniert mit dem hochladen von produktbildern auf s3 und dem verbinden mit produktbildern, aber es erzeugt auch produktbilder auf meinem systemserver. Ich brauche nur S3 Bucket für Bilder, also habe ich auch versucht, das Pub / Media / Catalog meines Systems zu löschen, aber nach dem Laden der Site-Seite werden die Produktbilder auch auf meinem System-Server neu erstellt. Muss dieses auf dem lokalen Server erstellte Image angehalten werden?
Camit1dk

Antworten:


6

Diese Leute scheinen eine Lösung zu finden: ( http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/ )

Es gibt zwei mögliche Ansätze: Zum einen muss Magento alle Medienassets beim Erstellen auf S3 pushen und zum anderen das Medienverzeichnis einfach in einen S3-Bucket mounten und Magento glauben lassen, dass auf die lokale Festplatte geschrieben wird. Wir haben uns für Letzteres entschieden.

Am Ende haben wir ein Tool namens s3fs verwendet, das eine breitere Technologie namens fuse verwendet. Mit einer recht einfachen Konfiguration (siehe unten) können Sie s3fs zum Laufen bringen. Achten Sie darauf, S3-Bucket-Namen oder API-Zugangsdaten nicht fest zu codieren, wenn Sie AWS oder einen anderen PAAS-Anbieter verwenden.

Stellen Sie sicher, dass Sie die folgenden Variablen durch Werte für Ihre spezifische Konfiguration ersetzen:

  • {{S3_BUCKET}} (Name Ihres S3-Buckets)
  • {{API_PUBLIC_ACCESS_KEY}} (bereitgestellt von AWS)
  • {{API_SECRET_ACCESS_KEY}} (bereitgestellt von AWS)
  • {{UID}} (Benutzer-ID für Nginx / Apache-Benutzer)
  • {{GID}} (Gruppen-ID für Nginx / Apache-Benutzer)
  • {{MOUNTED_DIRECTORY}} (Pfad zu Ihrem Magento-Medienverzeichnis)

Hier ist das Setup:

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
Dies scheint auch die von AWS empfohlene Methode zu sein. S3.amazonaws.com/quickstart-reference/magento/latest/doc/… Seite 11 (zumindest bis AWS EFS verfügbar ist)
pHiL

1
Obwohl diese Lösung gut ist, stelle ich fest, dass sie sehr langsam ist. Wie sind Sie damit umgegangen? Es sieht so aus, als würde Magento beim Generieren von URLs das Dateisystem überprüfen, um sicherzustellen, dass die Datei existiert.
Greatwitenorth

2

Die CDN-Erweiterung von OnePica ist für diese Funktionalität sofort einsatzbereit und unterstützt mehr als nur S3. Quote: "Derzeit lässt sich die Erweiterung in Amazon S3, Coral CDN, Mosso / Rackspace Cloud-Dateien sowie in alle CDNs, Server oder Dienste integrieren, die FTP, FTPS oder SFTP unterstützen."


+1 - Ich kann bestätigen, dass OnePica recht gut funktioniert und sowohl S3 als auch Rackspace Cloud unterstützt.
Philwinkle

4
OnePica ist nur CDN-Manager, dh die Dateien sind noch lokal
Fabian Blechschmidt

@FabianBlechschmidt Sie müssen mit Ihrem Kommentar genauer sein. Die Dateierweiterung von OnePica hinterlässt die Dateien mit Sicherheit nicht lokal, wenn sie ordnungsgemäß installiert / konfiguriert wurden, und ich verwende sie selbst in der Produktion mit Amazon S3.
Ralph Tice

Vielleicht habe ich etwas verpasst. Du meinst die Dateien werden in S3 hochgeladen und nicht mehr in media / catalog / ...?
Fabian Blechschmidt

1
Zu Ihrer Information, dies sollte auch mit der DreamObjects Drop-In S3-Ersatzlösung funktionieren. Bisher hat es mit jedem anderen S3-Eimer hervorragend funktioniert.
ylluminate

1

Die CDN-Erweiterung von OnePica ist nicht die Lösung, die nur für Produkt-Images funktioniert. Außerdem müssen Sie die richtige TTL für die eigene Cache-Lebensdauer festlegen, da die Zeit viel früher abläuft als bei Standard-Magento. Das gesamte Cms-Wysiwyg-Bild befindet sich im Medienordner. Wenn Sie jedoch S3 nicht verwenden, werden am Ende alle Ihre Medienbilder in S3 hochgeladen.

Die Verwendung von Cloudfront ist gut, Sie benötigen jedoch weiterhin ein NFS, um Ihren Medienordner für alle Frontend- und Backend-Knoten freizugeben. Oder Sie müssen Ihre eigene Schnittstelle erstellen, um Dateien in S3 zu speichern, und Sie müssen auch Fehler behandeln (denken Sie an jemanden, der extrem große Dateien hochlädt, ob Ihr Code das vor dem S3-API-Timeout verarbeiten kann).

Andernfalls speichern Sie den Medienspeicher einfach in Ihrer zusätzlichen RDS (Datenbank), und das Cache-Image für die individuelle Größenänderung wird weiterhin im lokalen Medienordner des App-Servers gespeichert, aber es ist in Ordnung, da Cloudfront sie bereits zwischenspeichert.


1

Ich bevorzuge einen separaten "admin" -Knoten (admin.example.com) und behalte dort Medienordner. Auf diese Weise sparen Sie sich NFS-Kosten und Probleme bei der Synchronisierung usw. Jedes CDN (ich verwende Cloudfront) kann dann mit den Medienordnern des Administratorknotens verbunden und für alle Stores konfiguriert werden.

Ein weiterer Vorteil der Verwendung des Admin-Knotens besteht darin, dass Sie alle Cron (Neuindizierung und andere Cron) sowie geplante Aufgaben (Produktimporte, Inventarisierung und Auftragssynchronisierung usw.) auf dem Admin-Knoten verschieben und die CPU-Verarbeitung des Frontend-Knotens speichern können.

Bearbeiten: Als letzte Antwort wurde die Frage von OP nicht wirklich beantwortet. Magento Media Assets in Amazon S3? Nun, ich glaube, Magento hat bereits so viel Verarbeitungsaufwand, dass ich es für eine gute Idee halte, es von s3-Synchronisierung / Streaming fernzuhalten und stattdessen den lokalen Medienordner zu verwenden.


Vielen Dank! Eigentlich habe ich einen Cloud-Host ausgecheckt, bei dem kein Upload möglich war. Fiel es später :-)
Fabian Blechschmidt

1

Nun, da ein paar Jahre vergangen sind, denke ich, ist es wichtig zu beachten, dass mehrere Plugins verfügbar sind, die Assets von S3 / CDN verschieben und bedienen.

Die Google-Suche bietet zahlreiche Optionen.

Hier ist einer auf GitHub:

https://github.com/magefm/cdn

Hier ist eine auf Magentos Connect-Marktplatz:

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

Ich habe diese speziellen Erweiterungen noch nicht ausprobiert, werde sie aber für ein bevorstehendes Projekt verwenden. Es gibt auch andere da draußen.

Ich muss @Sonassi widersprechen. Die Verwendung von separatem Speicher, um die günstigste Serverkonfiguration mit noch guter Leistung zu ermöglichen, wird heute als die beste Vorgehensweise angesehen. Verwenden Sie beispielsweise einfach S3, um alle statischen Inhalte von Ihrem Webserver zu entfernen. Auf diese Weise wird die Bandbreite des Servers erheblich verringert und gleichzeitig mehr Benutzer und insgesamt weniger Serverleistung benötigt. Und wenn Sie sich heutzutage wie die meisten Menschen in einem einzelnen Rechenzentrum befinden und sagen, dass es sich um ein Dallas-Rechenzentrum handelt, werden die Menschen in Westeuropa mit einem globalen CDN wie Cloudfront zweifellos viel schneller bedient. Wenn Sie also Speicher verwenden, der von Ihrem Webserver getrennt ist, um die Bandbreitennutzung zu verringern, können Sie nur einen Server verwenden, wenn Sie ohne diesen Ansatz früher benötigen würden, und durch die Verwendung von CDN werden die globalen Ladezeiten erheblich verlängert.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.