Actifs multimédias de Magento dans Amazon S3


21

On m'a demandé comment enregistrer tous les actifs multimédias de Magento dans Amazon S3. J'ai pensé à utiliser un PHP Stream Wrapper comme celui-ci: https://github.com/punkave/aS3StreamWrapper et je viens de définir le dossier multimédia sur s3: \ mybucket \ mediaFolder

Quelqu'un a-t-il de l'expérience avec cela?

Ou mieux utiliser quelque chose comme ça: https://github.com/sstoiana/magento-s3 Mais cette extension ne semble pas bonne. D'autres recommandations?


1
Juste en aparté. Quelle est votre motivation exactement? À moins que vous ne traitiez un public mondial, ou que vous ne poussiez plus de trafic que l'interface de votre serveur (> 100Mbit / 1Gbit), ou que vous ayez un fournisseur de serveur avec un mauvais transit (ce qui est un problème en soi) - les CDN sont généralement plus lents que de servir le contenu directement de la même machine. Les réseaux encombrés, les points de rupture distants et les itinéraires médiocres entraînent généralement une livraison de contenu plus lente que le simple hébergement.
Ben Lessani - Sonassi

1
La motivation est: Quelqu'un m'a demandé mon expérience et mon opinion et j'y ai réfléchi et je préfère la solution de wrapper de flux, mais nous avons ce site sympa et peut-être que quelqu'un a ses deux cents pour moi :-)
Fabian Blechschmidt

@sonassi, votre expérience avec les CDN semble quelque peu dépassée. Toutes les solutions CDN matures distribuent le contenu géographiquement à une échelle beaucoup plus élevée que celle que vous pourrez vous permettre pour vos serveurs Web et serviront le contenu de l'emplacement géographique le plus proche au client demandeur. Il est également important d'optimiser le nombre de requêtes HTTP sur votre site en utilisant un pipeline d'actifs pour la concaténation et la minification js / css, mais c'est beaucoup plus compliqué, en particulier pour les sites Magento.
Ralph Tice

@RalphTice Pas si dépassé étant donné que nous gérons notre propre réseau BGP anycast sur 3 continents. La plupart des CDN «abordables» ont des PoP uniques par pays (certains seulement par continent), ce qui n'est pas nécessairement plus proche géographiquement que votre serveur Web lui-même. Par exemple. Le PoP le plus proche de GB pour Amazon est l'Irlande - qui a une latence bien plus grande qu'une machine basée en Angleterre. Je réitère donc qu'à moins que vous ne cibliez un public mondial, il est peu probable que vos clients nationaux voient un quelconque avantage d'un CDN. Dans certains cas, il est plus lent, sans parler de plus cher et compliqué.
Ben Lessani - Sonassi

les gars, j'ai utilisé l'extension thaiphan / magento-s3 pour le seau s3, son travail avec le téléchargement d'images de produits sur s3 et la connexion avec les images de produits, mais il générera également des images de produits sur mon serveur système. J'ai juste besoin d'utiliser le seau s3 pour les images, j'ai donc également essayé de supprimer le pub / média / catalogue de mon système, mais après le chargement, les images des produits de la page du site sont également recréées sur mon serveur système. est-il nécessaire d'arrêter cette image créée sur le serveur local?
Camit1dk

Réponses:


6

il semble que ces gars-là trouvent une solution: ( http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/ )

Il existe 2 approches possibles, l'une étant de demander à Magento de pousser tous les actifs multimédias vers S3 au fur et à mesure qu'ils sont créés et l'autre de simplement monter le répertoire multimédia dans un compartiment S3 et de laisser Magento penser qu'il écrit sur le disque local. Nous avons choisi ce dernier.

Nous avons fini par utiliser un outil appelé s3fs, qui utilise une technologie plus large appelée fusible. Avec une configuration assez simple (décrite ci-dessous), vous pouvez faire fonctionner s3fs. Faites attention à ne pas coder en dur les noms de compartiment S3 ou les informations d'identification d'API si vous utilisez AWS ou un autre fournisseur PAAS.

Assurez-vous de remplacer les variables suivantes par des valeurs pour votre configuration spécifique:

  • {{S3_BUCKET}} (nom de votre compartiment S3)
  • {{API_PUBLIC_ACCESS_KEY}} (fourni par AWS)
  • {{API_SECRET_ACCESS_KEY}} (fourni par AWS)
  • {{UID}} (ID utilisateur pour l'utilisateur nginx / apache)
  • {{GID}} (identifiant de groupe pour l'utilisateur nginx / apache)
  • {{MOUNTED_DIRECTORY}} (chemin vers votre répertoire multimédia magento)

Voici la configuration:

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
Cela semble également être la méthode recommandée par AWS s3.amazonaws.com/quickstart-reference/magento/latest/doc/… page 11 (au moins jusqu'à ce qu'AWS EFS soit disponible)
pHiL

1
Bien que cette solution soit bonne, je trouve qu'elle fonctionne très lentement. Comment avez-vous géré cela? Il semble que lorsque Magento génère des URL, il vérifie le système de fichiers pour s'assurer que le fichier existe.
greatwitenorth

2

L'extension CDN de OnePica est très pratique pour cette fonctionnalité et prend en charge plus que S3. Citation: "Actuellement, l'extension s'intègre avec Amazon S3, Coral CDN, Mosso / Rackspace Cloud Files et tout CDN, serveur ou service prenant en charge FTP, FTPS ou SFTP."


+1 - Je peux confirmer que OnePica fonctionne très bien et prend en charge S3 et Rackspace Cloud.
philwinkle

4
OnePica n'est que le gestionnaire CDN, ce qui signifie que les fichiers sont toujours locaux
Fabian Blechschmidt

@FabianBlechschmidt Vous devrez être plus précis avec votre commentaire. L'extension OnePica ne laisse certainement pas les fichiers localement lorsqu'elle est correctement installée / configurée et je l'utilise moi-même en production avec Amazon S3.
Ralph Tice

Peut-être que j'ai raté quelque chose. Vous voulez dire que les fichiers sont téléchargés sur S3 et pas plus dans les médias / catalogue / ...?
Fabian Blechschmidt

1
Pour info, cela devrait également fonctionner avec la solution de remplacement S3 de DreamObjects. Jusqu'à présent, il a très bien fonctionné avec tous les autres godets S3.
ylluminate le

1

L'extension CDN de OnePica n'est pas la solution, elle ne fonctionne que pour les images de produits, sans oublier que vous devez définir le TTL correct pour sa propre durée de vie en cache qui expirera beaucoup plus tôt que Magento par défaut. Toute votre image cms wysiwyg sera dans le dossier multimédia mais n'utilisera pas S3, vous finirez par télécharger toute votre image multimédia sur S3.

Utiliser cloudfront sera bon, mais vous aurez toujours besoin d'un NFS pour partager votre dossier multimédia entre tous vos nœuds frontaux et nœuds principaux. Ou vous devez créer votre propre interface pour enregistrer le fichier sur S3, et vous devez également gérer les erreurs (pensez à quelqu'un de télécharger un fichier extrêmement volumineux si votre code peut gérer cela avant l'expiration de l'API S3)

Sinon, enregistrez simplement le stockage multimédia dans votre RDS supplémentaire (base de données) et l'image de cache de redimensionnement individuelle sera toujours enregistrée dans le dossier multimédia local de votre serveur d'applications, mais c'est correct car cloudfront les mettra déjà en cache.


1

Je préfère avoir un nœud "admin" distinct (admin.example.com) et y conserver les dossiers multimédias. De cette façon, vous vous épargneriez avec des coûts NFS ainsi qu'avec des problèmes de synchronisation, etc. tout CDN (j'utilise cloudfront) pourrait alors être connecté aux dossiers multimédias du nœud d'administration et être configuré pour tous les magasins.

Les autres avantages de l'utilisation du nœud d'administration sont que vous pouvez déplacer tous les crons (réindexation et autres crons), les tâches planifiées (importations de produits, inventaire et synchronisation des commandes, etc.) sur le nœud d'administration et enregistrer le traitement de l'unité centrale des nœuds frontaux.

Edit: Comme la dernière réponse n'a pas réellement répondu à la question d'OP. Magento Media Assets dans Amazon S3? Eh bien, je crois que Magento a déjà tellement de frais de traitement, que je pense que ce serait une bonne idée de l'empêcher de synchroniser / diffuser en s3, et d'utiliser à la place un dossier multimédia local.


Merci! En fait, j'ai vérifié un hôte cloud où aucun téléchargement n'était possible. Supprimé plus tard :-)
Fabian Blechschmidt

1

Eh bien, maintenant que quelques années se sont écoulées, je pense qu'il est important de noter qu'il existe plusieurs plugins disponibles qui déplaceront et serviront les actifs de S3 / CDN.

Les recherches Google présentent de nombreuses options.

En voici un sur GitHub:

https://github.com/magefm/cdn

En voici un sur le marché Connect de Magento:

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

Je n'ai pas encore essayé ces extensions particulières mais le sera pour un prochain projet. Il y en a d'autres aussi.

Je serais en désaccord avec @Sonassi, l'utilisation d'un stockage séparé pour permettre la configuration de serveur la moins chère toujours avec de bonnes performances est vraiment considérée comme la meilleure pratique aujourd'hui. Par exemple, utiliser simplement S3 pour déplacer tout le contenu statique de votre serveur Web permet au serveur d'utiliser beaucoup moins de bande passante et d'autoriser plus d'utilisateurs simultanés et moins de puissance globale du serveur. Et, si vous êtes dans un seul centre de données comme la plupart des gens ces jours-ci, et dites que c'est à Dallas, alors il ne fait aucun doute que les gens en Europe occidentale seront servis beaucoup plus rapidement avec un CDN mondial comme Cloudfront. Ainsi, l'utilisation d'un stockage séparé de votre serveur Web pour réduire l'utilisation de la bande passante vous permet d'utiliser un seul serveur lorsque vous en auriez besoin plus tôt sans cette approche, et l'utilisation de CDN augmentera considérablement les temps de chargement globaux.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.