Magento Media Assets en Amazon S3

21

Me preguntaron cómo guardar todos los recursos multimedia de magento en Amazon S3. Pensé en usar un PHP Stream Wrapper como este: https://github.com/punkave/aS3StreamWrapper y simplemente configuré la carpeta de medios en s3: \ mybucket \ mediaFolder

¿Alguien tiene experiencia con esto?

O mejor use algo como esto: https://github.com/sstoiana/magento-s3 Pero esta extensión no se ve bien. ¿Alguna otra recomendación?

Fabian Blechschmidt
fuente
1
Solo como un aparte. ¿Cuál es tu motivación exactamente? A menos que esté atendiendo a una audiencia global, o empujando más tráfico que la interfaz de su servidor (> 100Mbit / 1Gbit), o tenga un proveedor de servidor con poco tránsito (lo cual es un problema en sí mismo), los CDN generalmente son más lentos que servir el contenido directamente De la misma máquina. Las redes congestionadas, los puntos de ruptura distantes y las rutas pobres generalmente conducen a una entrega de contenido más lenta que simplemente alojarlo usted mismo.
Ben Lessani - Sonassi 01 de
1
La motivación es: Alguien me preguntó por mi experiencia y opinión y pensé en ello y prefiero la solución de envoltura de flujo, pero tenemos este sitio genial y tal vez alguien tiene sus dos centavos para mí :-)
Fabian Blechschmidt
@sonassi su experiencia con CDN parece estar algo anticuada. Todas las soluciones CDN maduras distribuyen contenido geográficamente a una escala mucho más alta de lo que podrá pagar por sus servidores web y servirá contenido desde la ubicación geográfica más cercana al cliente solicitante. También es importante optimizar el número de solicitudes HTTP en su sitio mediante el uso de una canalización de activos para la concatenación y minificación js / css, pero eso es mucho más complicado, especialmente para los sitios de Magento.
Ralph Tice
@RalphTice No es tan anticuado teniendo en cuenta que ejecutamos nuestra propia red BGP anycast en 3 continentes. La mayoría de las CDN 'asequibles' tienen PoP individuales por país (algunos solo por continente), que no están necesariamente más cerca geográficamente que su propio servidor web. P.ej. El PoP más cercano de GB para Amazon es Irlanda, que tiene una latencia mucho, mucho mayor que una máquina con base en Inglaterra. Por lo tanto, reitero que, a menos que se dirija a una audiencia global, es poco probable que sus clientes nacionales vean algún beneficio en absoluto de un CDN. En algunos casos es más lento, sin mencionar que es más costoso y complicado.
Ben Lessani - Sonassi
Chicos, he usado la extensión thaiphan / magento-s3 para s3 bucket, está trabajando con cargar imágenes de productos en s3 y conectarse con imágenes de productos, pero también generará imágenes de productos en el servidor de mi sistema. solo necesito usar s3 bucket para imágenes, así que también traté de eliminar el pub / media / catálogo de mi sistema, pero después de cargar la página del sitio, las imágenes del producto también se recrean en el servidor de mi sistema. ¿Es necesario detener esta imagen creada en el servidor local?
Camit1dk

Respuestas:

6

parece que estos tipos encuentran una solución: ( http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/ )

Hay 2 enfoques posibles, uno para que Magento transfiera todos los activos de medios a S3 a medida que se crean y el otro para simplemente montar el directorio de medios en un depósito de S3 y dejar que Magento piense que está escribiendo en el disco local. Elegimos este último.

Terminamos usando una herramienta llamada s3fs, que usa una tecnología más amplia llamada fusible. Con una configuración bastante sencilla (descrita a continuación), puede obtener s3fs en funcionamiento. Tenga cuidado de no codificar los nombres del depósito S3 o las credenciales de acceso a la API si está utilizando AWS u otro proveedor de PAAS.

Asegúrese de reemplazar las siguientes variables con valores para su configuración específica:

  • {{S3_BUCKET}} (nombre de tu bucket de S3)
  • {{API_PUBLIC_ACCESS_KEY}} (proporcionado por AWS)
  • {{API_SECRET_ACCESS_KEY}} (proporcionado por AWS)
  • {{UID}} (ID de usuario para el usuario nginx / apache)
  • {{GID}} (ID de grupo para el usuario nginx / apache)
  • {{MOUNTED_DIRECTORY}} (ruta a su directorio de medios de magento)

Aquí está la configuración:

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
fuente
2
Esta también parece ser la forma recomendada por AWS s3.amazonaws.com/quickstart-reference/magento/latest/doc/… página 11 (al menos hasta que AWS EFS esté disponible)
pHiL
1
Si bien esta solución es buena, descubro que funciona muy lentamente. Como manejaste esto? Parece que cuando Magento genera URL está revisando el sistema de archivos para asegurarse de que el archivo existe.
greatwitenorth
2

La extensión CDN de OnePica es muy práctica para esta funcionalidad y admite más que solo S3. Cita: "Actualmente, la extensión se integra con Amazon S3, Coral CDN, Mosso / Rackspace Cloud Files y cualquier CDN, servidor o servicio que admita FTP, FTPS o SFTP".

Ralph Tice
fuente
+1: puedo confirmar que OnePica funciona bastante bien y es compatible con S3 y Rackspace Cloud.
philwinkle 01 de
44
OnePica es solo administrador de CDN, significa que los archivos siguen siendo locales
Fabian Blechschmidt
@FabianBlechschmidt Tendrás que ser más específico con tu comentario. La extensión de OnePica ciertamente no deja los archivos localmente cuando está correctamente instalado / configurado y lo estoy usando en producción yo mismo con Amazon S3.
Ralph Tice
Tal vez me perdí algo. ¿Quiere decir que los archivos se cargan en S3 y no más en medios / catálogo / ...?
Fabian Blechschmidt
1
Para su información, esto también debería funcionar con la solución de reemplazo S3 de DreamObjects. Hasta ahora ha funcionado muy bien con cualquier otro cubo S3.
iluminar
1

La extensión CDN de OnePica no es la solución, solo funciona para imágenes de productos, sin mencionar que necesita configurar el TTL correcto para su propio tiempo de vida de caché, que expirará mucho antes que Magento predeterminado. Toda su imagen de cms wysiwyg estará en la carpeta de medios pero sin usar S3, terminará cargando toda su imagen de medios en S3.

Usar Cloudfront será bueno, pero aún necesitará un NFS para compartir su carpeta de medios en todos sus nodos frontend y backend. O necesita crear su propia interfaz para guardar el archivo en S3, y también debe manejar los errores (piense en alguien que cargue un archivo extremadamente grande si su código puede manejar eso antes del tiempo de espera de la API de S3)

De otra manera, solo guarde el almacenamiento de medios en su RDS (base de datos) adicional y la imagen de caché de cambio de tamaño individual aún se guardará en la carpeta de medios local del servidor de aplicaciones, pero está bien ya que cloudfront ya los almacenará en caché.

Ben
fuente
1

Prefiero tener un nodo "admin" separado (admin.example.com) y mantener carpetas de medios allí. De esta forma, se ahorraría con el costo de NFS, así como problemas con la sincronización, etc. cualquier CDN (uso Cloudfront) podría conectarse con las carpetas de medios del nodo de administración y configurarse para todas las tiendas.

Otros beneficios de usar el nodo de administración es que puede mover todos los crons (reindexación y otros crons), tareas programadas (importación de productos, inventario y sincronización de pedidos, etc.) en el nodo de administración y guardar el procesamiento de la CPU de los nodos frontend.

Editar: como la última respuesta en realidad no abordó la pregunta de OP. Magento Media Assets en Amazon S3? Bueno, creo que Magento ya tiene tanta sobrecarga de procesamiento, que creo que sería una buena idea evitar que se sincronice / transmita s3, y en su lugar use la carpeta de medios local.

anshuman
fuente
¡Gracias! En realidad, revisé un host en la nube donde no era posible cargar. Lo dejó caer más tarde :-)
Fabian Blechschmidt
1

Bueno, ahora que han pasado un par de años, creo que es importante tener en cuenta que hay varios complementos disponibles que moverán y servirán los activos de S3 / CDN.

Las búsquedas de Google muestran muchas opciones.

Aquí hay uno en GitHub:

https://github.com/magefm/cdn

Aquí hay uno en el mercado Connect de Magento:

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

Todavía no he probado estas extensiones en particular, pero será para un próximo proyecto. También hay otros por ahí.

Tendría que estar en desacuerdo con @Sonassi, el uso de almacenamiento separado para permitir que la configuración de servidor más barata aún con un buen rendimiento se considere realmente la mejor práctica hoy en día. Por ejemplo, simplemente use S3 para mover todo el contenido estático de su servidor web, lo que ayuda a que el servidor use mucho menos ancho de banda y permita que se necesiten más usuarios concurrentes y menos energía general del servidor. Y, si está en un solo centro de datos como la mayoría de las personas en estos días, y dice que está en Dallas, entonces no hay duda de que las personas en Europa occidental recibirán un servicio mucho más rápido con un CDN global como Cloudfront. Por lo tanto, el uso de almacenamiento separado de su servidor web para reducir el uso de ancho de banda le permite usar solo 1 servidor cuando lo necesite más pronto sin este enfoque, y el uso de CDN aumentará en gran medida los tiempos de carga global.

Sean P
fuente