Recursos de mídia Magento no Amazon S3

21

Me perguntaram como salvar todos os ativos de mídia magento no Amazon S3. Pensei em usar um PHP Stream Wrapper como este: https://github.com/punkave/aS3StreamWrapper e apenas defina a pasta de mídia como s3: \ mybucket \ mediaFolder

Alguém tem experiência com isso?

Ou melhor, use algo assim: https://github.com/sstoiana/magento-s3 Mas essa extensão não parece boa. Alguma outra recomendação?

Fabian Blechschmidt
fonte
1
Apenas como um aparte. Qual é a sua motivação exatamente? A menos que você esteja atendendo a uma audiência global, ou forneça mais tráfego do que a interface do servidor (> 100Mbit / 1Gbit), ou tenha um provedor de servidores com trânsito inadequado (o que é um problema em si) - as CDNs geralmente são mais lentas do que veiculam o conteúdo diretamente da mesma máquina. Redes congestionadas, pontos de interrupção distantes e rotas ruins geralmente levam a uma entrega mais lenta do conteúdo do que simplesmente hospedando você mesmo.
Ben Lessani - Sonassi
1
A motivação é: alguém me pediu minha experiência e opinião, e eu pensei sobre isso e prefiro a solução de empacotador de fluxo, mas temos este site interessante e talvez alguém tenha seus dois centavos para mim :-)
Fabian Blechschmidt
@sonassi, sua experiência com CDNs parece um pouco antiga. Todas as soluções CDN maduras distribuem conteúdo geograficamente em uma escala muito mais alta do que você poderá pagar por seus servidores da Web e exibirá conteúdo da localização geográfica mais próxima ao cliente solicitante. Também é importante otimizar o número de solicitações HTTP em seu site usando um pipeline de ativos para concatenação e minificação js / css, mas isso é muito mais complicado, especialmente para sites Magento.
Ralph Tice
@RalphTice Não é tão desatualizado, considerando que administramos nossa própria rede anycast BGP em 3 continentes. A maioria das CDNs 'acessíveis' possui PoPs únicos por país (alguns apenas por continente), que não são necessariamente geograficamente mais próximos do que o próprio servidor da web. Por exemplo. O PoP mais próximo da GB para a Amazon é a Irlanda - com latência muito, muito maior do que uma máquina com sede na Inglaterra. Por isso, reitero que, a menos que você tenha como alvo um público global, é improvável que seus clientes domésticos tenham algum benefício com uma CDN. Em alguns casos, é mais lento, para não mencionar mais caro e complicado.
Ben Lessani - Sonassi
pessoal, eu usei a extensão thaiphan / magento-s3 para o balde s3, ele está trabalhando com upload de imagens de produtos no s3 e conexão com imagens de produtos, mas também gerará imagens de produtos no meu servidor de sistema. Eu só preciso usar o balde s3 para imagens, então eu também tentei excluir o pub / mídia / catálogo do meu sistema, mas depois de carregar as imagens de produto da página da página do site, também são recriadas no meu servidor do sistema. é necessário parar esta imagem criada no servidor local?
Camit1dk 19/04/19

Respostas:

6

parece que esses caras encontram uma solução: ( http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/ )

Existem duas abordagens possíveis, uma delas é o Magento enviar todos os ativos de mídia para o S3 à medida que são criados e o outro simplesmente montar o diretório de mídia em um bucket do S3 e permitir que o Magento pense que está gravando no disco local. Nós escolhemos o último.

Acabamos usando uma ferramenta chamada s3fs, que usa uma tecnologia mais ampla chamada fusível. Com alguma configuração bastante direta (descrita abaixo), você pode colocar o s3fs em funcionamento. Cuidado para não codificar nomes de bucket S3 ou credenciais de acesso à API se você estiver usando a AWS ou outro provedor de PAAS.

Certifique-se de substituir as seguintes variáveis ​​por valores para sua configuração específica:

  • {{S3_BUCKET}} (nome do seu bucket S3)
  • {{API_PUBLIC_ACCESS_KEY}} (fornecido pela AWS)
  • {{API_SECRET_ACCESS_KEY}} (fornecido pela AWS)
  • {{UID}} (ID do usuário nginx / apache)
  • {{GID}} (ID do grupo para usuário nginx / apache)
  • {{MOUNTED_DIRECTORY}} (caminho para o diretório de mídia magento)

Aqui está a configuração:

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
fonte
2
Isso também parece ser a maneira recomendada pela AWS s3.amazonaws.com/quickstart-reference/magento/latest/doc/... página 11 (pelo menos até AWS EFS fica disponível)
Phil
1
Embora essa solução seja boa, estou descobrindo que é muito lenta. Como você lidou com isso? Parece que quando o Magento gera URLs, ele está verificando o sistema de arquivos para garantir que o arquivo exista.
greatwitenorth
2

A extensão CDN do OnePica é muito prática para esta funcionalidade e suporta mais do que apenas o S3. Citação: "Atualmente, a extensão se integra ao Amazon S3, Coral CDN, Mosso / Rackspace Cloud Files e qualquer CDN, servidor ou serviço que suporte FTP, FTPS ou SFTP."

Ralph Tice
fonte
+1 - Posso confirmar que o OnePica funciona muito bem e suporta o S3 e o Rackspace Cloud.
31413 philwinkle
4
OnePica só é gerente de CDN, significa que os arquivos ainda são locais
Fabian Blechschmidt
@FabianBlechschmidt Você precisará ser mais específico com seu comentário. A extensão do OnePica certamente não deixa os arquivos localmente quando instalados / configurados corretamente e eu estou usando-os na produção com o Amazon S3.
Ralph Tice
Talvez eu tenha perdido alguma coisa. Você quer dizer que os arquivos são carregados no S3 e não mais em mídia / catálogo / ...?
Fabian Blechschmidt
1
Para sua informação, isso também deve funcionar com a solução de substituição drop-in S3 do DreamObjects. Até agora, ele funcionou muito bem com todos os outros baldes S3.
usar o seguinte comando
1

A extensão CDN do OnePica não é a solução, ela funciona apenas para imagens de produtos, sem mencionar que você precisa definir o TTL correto para seu próprio tempo de vida útil do cache, que atingirá o tempo limite muito antes do Magento padrão. Tudo o que a imagem cms wysiwyg estará na pasta de mídia, mas não usando o S3, você acabará enviando toda a sua imagem de mídia para o S3.

Usar o cloudfront será bom, mas você ainda precisará de um NFS para compartilhar sua pasta de mídia entre todos os nós de front-end e de back-end. Ou você precisa criar sua própria interface para salvar o arquivo no S3 e também lidar com erros (pense em alguém fazer upload de um arquivo extremamente grande se o seu código pode lidar com isso antes do tempo limite da API do S3)

Caso contrário, salve o armazenamento de mídia no seu RDS extra (banco de dados) e na imagem de cache de redimensionamento individual ainda será salva na pasta de mídia local do servidor de aplicativos, mas tudo bem, pois o cloudfront já os armazenará em cache.

Ben
fonte
1

Prefiro ter um nó "admin" separado (admin.example.com) e manter as pastas de mídia lá. Dessa forma, você se pouparia com o custo do NFS e também com a sincronização etc. qualquer CDN (eu uso o cloudfront) poderia ser conectado às pastas de mídia do nó do administrador e configurado para todas as lojas.

Outros benefícios do uso do nó de administração são: você pode mover todos os crons (reindexação e outros crons), tarefas agendadas (importação de produtos, inventário e sincronização de pedidos, etc.) no nó admin e salvar o processamento da CPU dos nós de front-end.

Edit: Como última resposta, na verdade, não abordou a pergunta do OP. Recursos de mídia Magento no Amazon S3? Bem, acredito que o Magento já tenha sobrecarregado tanto o processamento, que acho que seria uma boa ideia evitar a sincronização / streaming s3 e usar a pasta de mídia local.

anshuman
fonte
Obrigado! Na verdade, eu fiz check-out de um host na nuvem onde nenhum upload era possível. Largou-o mais tarde :-)
Fabian Blechschmidt 28/10
1

Bem, agora que se passaram alguns anos, acho importante observar que existem vários plugins disponíveis que moverão e servirão ativos do S3 / CDN.

As pesquisas do Google exibem muitas opções.

Aqui está um no GitHub:

https://github.com/magefm/cdn

Aqui está um no mercado do Magento Connect:

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

Ainda não tentei essas extensões específicas, mas será para um próximo projeto. Existem outros por aí também.

Eu teria que discordar do @Sonassi, usar armazenamento separado para permitir que a configuração mais barata do servidor, ainda com bom desempenho, seja realmente considerada a melhor prática hoje. Por exemplo, basta usar o S3 para remover todo o conteúdo estático do servidor da Web, ajudando o servidor a usar muito menos largura de banda e permitir mais usuários simultâneos e menos energia geral do servidor. E, se você está em um único datacenter como a maioria das pessoas hoje em dia e diz que está em Dallas, não há dúvida de que as pessoas na Europa Ocidental serão atendidas muito mais rapidamente com uma CDN global como o Cloudfront. Portanto, o uso de armazenamento separado do servidor da web para diminuir o uso da largura de banda permite usar apenas 1 servidor quando você precisaria mais rapidamente sem essa abordagem, e o uso da CDN aumentará bastante o tempo de carregamento global.

Sean P
fonte