Magento Media Assets w Amazon S3

21

Zapytano mnie, jak zapisać wszystkie zasoby medialne magento w Amazon S3. Myślałem o użyciu PHP Wrapper takiego jak ten: https://github.com/punkave/aS3StreamWrapper i po prostu ustawiłem folder multimediów na s3: \ mybucket \ mediaFolder

Czy ktoś ma z tym doświadczenie?

Lub lepiej użyj czegoś takiego: https://github.com/sstoiana/magento-s3 Ale to rozszerzenie nie wygląda dobrze. Jakieś inne rekomendacje?

Fabian Blechschmidt
źródło
1
Na marginesie. Jaka jest Twoja motywacja? O ile nie kierujesz oferty do globalnej publiczności lub nie generujesz większego ruchu niż interfejs serwera (> 100 Mb / 1 Gbit), lub nie masz dostawcy serwera ze słabym transportem (co samo w sobie jest problemem) - sieci CDN są zwykle wolniejsze niż bezpośrednie dostarczanie treści z tej samej maszyny. Zatłoczone sieci, odległe punkty przerwania i słabe trasy zwykle prowadzą do wolniejszego dostarczania treści niż po prostu hostowanie jej.
Ben Lessani - Sonassi
1
Motywacja jest taka: Ktoś zapytał mnie o moje doświadczenie i opinię, myślałem o tym i wolę rozwiązanie do owijania strumieniowego, ale mamy tę fajną stronę i może ktoś ma dla mnie swoje dwa centy :-)
Fabian Blechschmidt
@sonassi twoje doświadczenia z CDN wydają się być trochę przestarzałe. Wszystkie dojrzałe rozwiązania CDN dystrybuują treści geograficznie na znacznie większą skalę, niż można sobie pozwolić na serwery sieciowe i będą obsługiwać treści z najbliższej lokalizacji geograficznej do żądającego klienta. Ważne jest również zoptymalizowanie liczby żądań HTTP w witrynie za pomocą potoku zasobów do konkatenacji i minimalizacji plików js / css, ale jest to o wiele bardziej skomplikowane, szczególnie w przypadku witryn Magento.
Ralph Tice
@RalphTice Nie jest to nieaktualne, biorąc pod uwagę, że prowadzimy własną sieć anycast BGP na 3 kontynentach. Większość „niedrogich” sieci CDN ma pojedyncze punkty PoP na kraj (niektóre tylko na kontynent), co niekoniecznie jest bliżej geograficznie niż sam serwer WWW. Na przykład. Najbliższym punktem dostępowym GB dla Amazon jest Irlandia - która ma znacznie większe opóźnienia niż maszyna z Anglii. Powtarzam więc, że jeśli nie kierujesz reklamy do globalnej publiczności, jest mało prawdopodobne, że Twoi klienci krajowi w ogóle skorzystaliby z CDN. W niektórych przypadkach jest wolniejszy, nie mówiąc już o droższych i bardziej skomplikowanych.
Ben Lessani - Sonassi
chłopaki, użyłem rozszerzenia thaiphan / magento-s3 dla s3 bucket, jego praca z przesyłaniem zdjęć produktów na s3 i łączenie się z obrazami produktów, ale generuje również zdjęcia produktów na moim serwerze systemowym. po prostu muszę użyć wiadra s3 do obrazów, więc również próbowałem usunąć system / pub / media / katalog mojego systemu, ale po załadowaniu strony produktu obrazy produktu są również odtwarzane na moim serwerze systemowym. czy trzeba zatrzymać ten obraz utworzony na serwerze lokalnym?
Camit1dk

Odpowiedzi:

6

wygląda na to, że ci faceci znajdują rozwiązanie: ( http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/ )

Istnieją dwa możliwe podejścia, jeden polega na tym, że Magento wypycha wszystkie zasoby multimedialne do S3 podczas ich tworzenia, a drugi polega na zamontowaniu katalogu multimediów do segmentu S3 i pozwoleniu Magento myśleć, że zapisuje na dysku lokalnym. Wybraliśmy ten drugi.

Skończyło się na użyciu narzędzia o nazwie s3fs, które wykorzystuje szerszą technologię zwaną bezpiecznikiem. Dzięki dość prostej konfiguracji (opisanej poniżej) możesz uruchomić s3fs. Uważaj, aby nie zakodować na stałe nazw segmentów S3 ani poświadczeń dostępu do interfejsu API, jeśli korzystasz z AWS lub innego dostawcy PAAS.

Upewnij się, że zastąpiłeś następujące zmienne wartościami dla twojej konkretnej konfiguracji:

  • {{S3_BUCKET}} (nazwa wiadra S3)
  • {{API_PUBLIC_ACCESS_KEY}} (dostarczone przez AWS)
  • {{API_SECRET_ACCESS_KEY}} (dostarczone przez AWS)
  • {{UID}} (identyfikator użytkownika dla użytkownika nginx / apache)
  • {{GID}} (identyfikator grupy dla użytkownika nginx / apache)
  • {{MOUNTED_DIRECTORY}} (ścieżka do katalogu multimediów magento)

Oto konfiguracja:

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}}
s_h
źródło
2
Wydaje się to również zalecanym sposobem przez AWS s3.amazonaws.com/quickstart-reference/magento/latest/doc/… str. 11 (przynajmniej do momentu udostępnienia AWS EFS)
pHiL
1
Chociaż to rozwiązanie jest dobre, okazuje się, że działa bardzo wolno. Jak sobie z tym poradziłeś? Wygląda na to, że gdy Magento generuje adresy URL, sprawdza system plików, aby upewnić się, że plik istnieje.
greatwitenorth
2

Rozszerzenie CDN w OnePica jest bardzo przydatne od tej funkcjonalności i obsługuje więcej niż tylko S3. Cytat: „Obecnie rozszerzenie integruje się z Amazon S3, Coral CDN, Mosso / Rackspace Cloud Files oraz dowolnym CDN, serwerem lub usługą obsługującą FTP, FTPS lub SFTP”.

Ralph Tice
źródło
+1 - mogę potwierdzić, że OnePica działa całkiem nieźle i obsługuje zarówno S3, jak i Rackspace Cloud.
philwinkle,
4
OnePica jest tylko menedżerem CDN, co oznacza, że ​​pliki są nadal lokalne
Fabian Blechschmidt
@FabianBlechschmidt Twój komentarz będzie bardziej szczegółowy. Rozszerzenie OnePica z pewnością nie pozostawia plików lokalnie, jeśli są poprawnie zainstalowane / skonfigurowane i sam używam go w produkcji w / Amazon S3.
Ralph Tice
Może coś mi umknęło. Masz na myśli, że pliki są przesyłane do S3 i nie ma ich więcej w media / catalog / ...?
Fabian Blechschmidt
1
Do Twojej wiadomości, powinno to również działać z DreamObjects drop-in S3. Do tej pory działał świetnie z każdym innym wiadrem S3.
iluminuj
1

Rozszerzenie CDN w OnePica nie jest rozwiązaniem, działa tylko na zdjęciach produktów, nie wspominając o tym, że musisz ustawić poprawne TTL dla własnego czasu życia pamięci podręcznej, który upłynie znacznie wcześniej niż domyślny Magento. Wszystkie twoje cms wysiwyg obraz będzie w folderze multimediów, ale nie przy użyciu S3, skończysz przesyłanie całego obrazu multimedialnego do S3.

Korzystanie z usługi Cloudfront będzie dobre, ale nadal będziesz potrzebować systemu plików NFS do udostępniania folderu multimediów we wszystkich węzłach frontonu i węzłach zaplecza. Lub musisz zbudować własny interfejs, aby zapisać plik na S3, a także musisz obsługiwać błędy (pomyśl o tym, że ktoś prześle wyjątkowo duży plik, czy Twój kod może to obsłużyć przed upływem limitu czasu interfejsu API S3)

Innym sposobem jest po prostu zapisanie miejsca na nośnik w dodatkowej RDS (bazie danych), a indywidualny obraz bufora zmiany rozmiaru nadal będzie zapisywany w lokalnym folderze multimediów na serwerze aplikacji, ale jest to w porządku, ponieważ Cloudfront już je buforuje.

Ben
źródło
1

Wolę mieć osobny węzeł „admin” (admin.example.com) i przechowywać tam foldery multimediów. W ten sposób zaoszczędzisz na kosztach NFS, a także na problemach z synchronizacją itp. Dowolny CDN (używam Cloudfront) może być następnie połączony z folderami mediów węzła administracyjnego i skonfigurowany dla wszystkich sklepów.

Innymi zaletami korzystania z węzła administracyjnego jest to, że możesz przenieść wszystkie crony (reindeksowanie i inne crony), zaplanowane zadania (import produktów, inwentaryzację i synchronizację zamówień itp.) W węźle administratora i zapisać przetwarzanie procesora w węzłach frontonu.

Edycja: Ponieważ ostatnia odpowiedź nie dotyczyła pytania OP. Magento Media Assets w Amazon S3? Cóż, uważam, że Magento ma już tak wiele narzutów na przetwarzanie, że myślę, że dobrym pomysłem byłoby powstrzymanie go przed synchronizacją / streamingiem s3 i zamiast tego użyć lokalnego folderu multimediów.

anshuman
źródło
Dzięki! W rzeczywistości sprawdziłem hosta w chmurze, w którym nie było możliwe przesyłanie. Upuściłem go później :-)
Fabian Blechschmidt
1

Cóż, teraz, gdy minęło kilka lat, myślę, że należy zauważyć, że dostępnych jest wiele wtyczek, które przenoszą i obsługują zasoby z S3 / CDN.

Wyszukiwania Google zawierają wiele opcji.

Oto jeden na GitHub:

https://github.com/magefm/cdn

Oto jeden z rynku Magento Connect:

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

Nie próbowałem jeszcze tych konkretnych rozszerzeń, ale będę na nadchodzący projekt. Są też inni.

Musiałbym się nie zgodzić z @Sonassi, używanie oddzielnej pamięci masowej w celu umożliwienia najtańszej konfiguracji serwera z dobrą wydajnością jest dziś uważane za najlepszą praktykę. Na przykład po prostu użyj S3, aby przenieść całą statyczną zawartość z serwera WWW, co pomaga serwerowi zużywać znacznie mniejszą przepustowość i pozwala na jednoczesną pracę użytkowników i mniejsze zapotrzebowanie na ogólną moc serwera. A jeśli obecnie znajdujesz się w jednym centrum danych, jak większość ludzi i powiesz, że znajduje się w Dallas, nie ma wątpliwości, że ludzie w Europie Zachodniej będą obsługiwani znacznie szybciej dzięki Global CDN, jak Cloudfront. Tak więc użycie pamięci niezależnej od serwera WWW w celu zmniejszenia wykorzystania przepustowości pozwala na użycie tylko 1 serwera, gdy będziesz potrzebować więcej bez tego podejścia, a użycie CDN znacznie wydłuży globalne czasy ładowania.

Sean P.
źródło