Risorse multimediali Magento in Amazon S3


21

Mi è stato chiesto come salvare tutte le risorse multimediali di Magento in Amazon S3. Ho pensato di utilizzare un PHP Stream Wrapper come questo: https://github.com/punkave/aS3StreamWrapper e ho appena impostato la cartella multimediale su s3: \ mybucket \ mediaFolder

Qualcuno ha esperienza con questo?

O meglio usare qualcosa del genere: https://github.com/sstoiana/magento-s3 Ma questa estensione non sembra buona. Qualche altro consiglio?


1
Proprio a parte. Qual è esattamente la tua motivazione? A meno che tu non stia servendo un pubblico globale, o spingendo più traffico dell'interfaccia del tuo server (> 100 Mbit / 1 Gbit), o abbia un provider di server con scarso transito (che è un problema in sé) - i CDN di solito sono più lenti rispetto alla pubblicazione diretta del contenuto dalla stessa macchina. Reti congestionate, punti di incontro distanti e percorsi scadenti di solito portano a una consegna dei contenuti più lenta rispetto al semplice hosting da soli.
Ben Lessani - Sonassi,

1
La motivazione è: qualcuno mi ha chiesto la mia esperienza e opinione e ci ho pensato e preferisco la soluzione di stream wrapper, ma abbiamo questo sito interessante e forse qualcuno ha i suoi due centesimi per me :-)
Fabian Blechschmidt

@sonassi la tua esperienza con i CDN sembra essere un po 'datata. Tutte le soluzioni CDN mature distribuiscono geograficamente i contenuti su una scala molto più elevata di quella che sarà possibile permettersi per i server Web e serviranno i contenuti dalla posizione geografica più vicina al client richiedente. È anche importante ottimizzare il numero di richieste HTTP sul tuo sito utilizzando una pipeline di risorse per la concatenazione e la minimizzazione di js / css, ma è molto più complicato soprattutto per i siti Magento.
Ralph Tice,

@RalphTice Non troppo datato considerando che gestiamo la nostra rete BGP anycast in 3 continenti. La maggior parte dei CDN "convenienti" hanno PoP singoli per paese (alcuni solo per continente), che non è necessariamente geograficamente più vicino del tuo stesso server web. Per esempio. Il PoP più vicino di GB per Amazon è l'Irlanda, che ha una latenza molto, molto maggiore rispetto a una macchina con sede in Inghilterra. Quindi ribadisco che, a meno che tu non stia prendendo di mira un pubblico globale, è improbabile che i tuoi clienti domestici vedano alcun beneficio da una CDN. In alcuni casi è più lento, per non parlare del più costoso e complicato.
Ben Lessani - Sonassi,

ragazzi, ho usato l'estensione thaiphan / magento-s3 per secchio s3, il suo funzionamento con l'upload delle immagini dei prodotti su s3 e la connessione con le immagini dei prodotti, ma genererà anche le immagini dei prodotti nel mio server di sistema. ho solo bisogno di usare il secchio s3 per le immagini, quindi ho anche cercato di eliminare il pub / media / catalogo del mio sistema, ma dopo aver caricato le immagini del prodotto della pagina del sito viene ricreato anche nel mio server di sistema. è necessario interrompere questa immagine creata nel server locale?
Camit1dk,

Risposte:


6

sembra che questi ragazzi trovino una soluzione: ( http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/ )

Esistono 2 possibili approcci, uno è Magento che spinge tutti gli asset multimediali su S3 mentre vengono creati e l'altro è semplicemente quello di montare la directory multimediale su un bucket S3 e lasciare che Magento pensi che stia scrivendo sul disco locale. Abbiamo scelto quest'ultimo.

Abbiamo finito per usare uno strumento chiamato s3fs, che utilizza una tecnologia più ampia chiamata fuse. Con una configurazione abbastanza semplice (descritta di seguito), puoi avere s3fs attivo e funzionante. Fare attenzione a non codificare i nomi bucket S3 o le credenziali di accesso API se si utilizza AWS o altri provider PAAS.

Assicurati di sostituire le seguenti variabili con i valori per la tua configurazione specifica:

  • {{S3_BUCKET}} (nome del tuo bucket S3)
  • {{API_PUBLIC_ACCESS_KEY}} (fornito da AWS)
  • {{API_SECRET_ACCESS_KEY}} (fornito da AWS)
  • {{UID}} (ID utente per l'utente nginx / apache)
  • {{GID}} (ID gruppo per l'utente nginx / apache)
  • {{MOUNTED_DIRECTORY}} (percorso della tua directory media magento)

Ecco la configurazione:

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
Questo sembra essere anche il modo consigliato da AWS s3.amazonaws.com/quickstart-reference/magento/latest/doc/… pagina 11 (almeno fino a quando non sarà disponibile AWS EFS)
pHiL

1
Mentre questa soluzione è buona, sto scoprendo che funziona molto lentamente. Come hai gestito questo? Sembra che quando Magento genera gli URL stia controllando il filesystem per assicurarsi che il file esista.
greatwitenorth il

2

L'estensione CDN di OnePica è molto utile per questa funzionalità e supporta più di un semplice S3. Citazione: "Attualmente, l'estensione si integra con Amazon S3, Coral CDN, Mosso / Rackspace Cloud Files e qualsiasi CDN, server o servizio che supporti FTP, FTPS o SFTP."


+1 - Posso confermare che OnePica funziona abbastanza bene e supporta sia S3 che Rackspace Cloud.
Filwinkle,

4
OnePica è solo il gestore CDN, significa che i file sono ancora locali
Fabian Blechschmidt,

@FabianBlechschmidt Dovrai essere più specifico con il tuo commento. L'estensione di OnePica certamente non lascia i file localmente se installato / configurato correttamente e lo sto usando in produzione con Amazon S3.
Ralph Tice,

Forse mi sono perso qualcosa. Vuoi dire che i file vengono caricati su S3 e non più in media / catalogue / ...?
Fabian Blechschmidt,

1
Cordiali saluti, questo dovrebbe funzionare anche con la soluzione di sostituzione S3 drop-in DreamObjects. Finora ha funzionato benissimo con tutti gli altri bucket S3.
illuminerà il

1

L'estensione CDN di OnePica non è la soluzione che funziona solo per le immagini dei prodotti, per non parlare della necessità di impostare il TTL corretto per la propria durata della cache che scadrà molto prima del Magento predefinito. Tutta la tua immagine cms wysiwyg sarà nella cartella media ma non usando S3, finirai per caricare tutta l'immagine multimediale su S3.

L'uso del cloudfront andrà bene, ma avrai comunque bisogno di un NFS per condividere la tua cartella multimediale su tutti i tuoi nodi frontend e backend. Oppure devi creare la tua interfaccia per salvare il file su S3 e anche gestire gli errori (pensa a qualcuno che carica file di dimensioni estreme se il tuo codice può gestirlo prima del timeout dell'API S3)

In caso contrario, salva l'archiviazione multimediale nel tuo RDS aggiuntivo (database) e l'immagine della cache di ridimensionamento individuale verrà comunque salvata nella cartella multimediale locale dell'app server, ma è ok poiché cloudfront li memorizzerà già nella cache.


1

Preferisco avere un nodo "admin" separato (admin.example.com) e mantenere lì le cartelle multimediali. In questo modo risparmieresti te stesso con i costi di NFS, nonché problemi con la sincronizzazione, ecc. Qualsiasi CDN (io uso cloudfront) potrebbe quindi essere collegato con le cartelle multimediali del nodo di amministrazione ed essere configurato per tutti i negozi.

Altri vantaggi dell'utilizzo del nodo admin sono, è possibile spostare tutti i cron (reindicizzazione e altri cron), le attività pianificate (importazioni di prodotti, inventario e sincronizzazione degli ordini, ecc.) Nel nodo admin e salvare l'elaborazione della CPU dei nodi frontend.

Modifica: l'ultima risposta non ha effettivamente affrontato la domanda di OP. Risorse multimediali Magento in Amazon S3? Bene, credo che Magento abbia già così tanto sovraccarico di elaborazione, che penso che sarebbe una buona idea tenerlo dalla sincronizzazione / streaming di s3 e utilizzare invece la cartella multimediale locale.


Grazie! In realtà ho verificato un host cloud in cui non era possibile effettuare il caricamento. L'ho
lasciato cadere

1

Bene, ora che sono passati un paio d'anni penso sia importante notare che ci sono più plugin disponibili che sposteranno e serviranno risorse da S3 / CDN.

Le ricerche di Google offrono molte opzioni.

Eccone uno su GitHub:

https://github.com/magefm/cdn

Eccone uno sul marketplace di Magento Connect:

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

Non ho ancora provato queste estensioni particolari, ma sarà per un prossimo progetto. Ce ne sono anche altri là fuori.

Dovrei essere in disaccordo con @Sonassi, l'utilizzo di storage separato per consentire la configurazione del server più economica ancora con buone prestazioni è oggi considerata la migliore pratica. Ad esempio, utilizzare semplicemente S3 per spostare tutto il contenuto statico dal server Web consente al server di utilizzare una larghezza di banda molto inferiore e consentire un numero maggiore di utenti simultanei e una minore potenza complessiva del server. E, se ti trovi in ​​un singolo data center come la maggior parte delle persone in questi giorni, e dici che è a Dallas, allora non c'è dubbio che le persone in Europa occidentale saranno servite molto più velocemente con una CDN globale come Cloudfront. Pertanto, l'utilizzo di uno spazio di archiviazione separato dal tuo server Web per ridurre l'utilizzo della larghezza di banda ti consente di utilizzare solo 1 server quando ne avresti bisogno più presto senza questo approccio e l'utilizzo di CDN aumenterà notevolmente i tempi di caricamento globali.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.