Processo de implantação do Magento 2

8

Atualmente, nos comprometemos composer.lockcom o repositório e, em seguida, executamos composer install --no-devno servidor de produção. Não acho que seja a melhor maneira de fazê-lo, porque leva alguns minutos para o compositor gerar todos os arquivos e é arriscado.

Gostaria de saber se é melhor confirmar com o repositório todos os arquivos necessários para execução no modo de produção.

Como outras pessoas gerenciam o processo de implantação com o magento 2?

Claudiu Creanga
fonte
Por que é arriscado? Ele só precisa ser feito uma vez por instalação / configuração e, uma vez que o compositor tenha baixado um pacote, ele é armazenado em cache.
User3668514
talvez esteja faltando alguma coisa, mas se você não tiver a pasta vendor no repositório, como instalaria novos módulos sem executar composer installna produção? letscodejavascript.com/v3/blog/2014/03/the_npm_debacle
Claudiu Creanga
O ponto é correr composer install. Você já olhou para um gancho git para automatizar o processo?
user3668514
@ user3668514 e se, ao executar a instalação do compositor em produção, alguns pacotes remotos estiverem inoperantes, como aconteceu com o npm?
Claudiu Creanga
Com que frequencia acontece? O Magento2 agora vem com um .gitignore que ignora explicitamente / vendor entre outros. Como esta é a nova 'maneira Magento', estou seguindo-a para garantir que outros desenvolvedores possam trabalhar no projeto sem problemas #
user3668514

Respostas:

5

Concorde 100% com a claudiu-creanga em não comprometer o fornecedor e também evitar executar a instalação do compositor na produção.

A maneira como lidamos com isso é ter uma pasta ativa e uma pasta candidata a lançamento. É na pasta release-candidate que executamos os comandos git pull e a instalação do compositor --no-dev. Nosso processo pode ser resumido assim:

  1. Na pasta release-candidate:

    • Verifique se há alterações inesperadas
    • Atualizar repositório
    • Instalação do compositor
  2. Sincronizar arquivos para a pasta do site ativo

  3. Na pasta do site ativo:
    • Implantar arquivos estáticos
    • Ativar modo de manutenção
    • Ativar módulos
    • Executar scripts de instalação
    • Compile DI
    • Limpar cache
    • Desativar modo de manutenção
    • Atualizar permissões

Eu escrevi um artigo de blog mais longo, fornecendo os comandos e o raciocínio por trás disso: https://www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-environment/

ATUALIZAÇÃO: Agora, copiamos o banco de dados ativo para um banco de dados intermediário e o usamos para executar scripts de instalação, implantar arquivos estáticos e compilar todos os DI offline. Isso pode ser implementado para viver, incluindo arquivos pub / estáticos e var. Ainda retiramos o site brevemente se os scripts de instalação estão sendo executados, mas, caso contrário, o site é deixado para cima. Mais detalhes em https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-downtime/

ATUALIZAÇÃO: Mudei de idéia sobre o envio da pasta do fornecedor. Ao confirmar a pasta, você obtém a capacidade de rastrear o histórico de como esses arquivos são alterados, ver se você mudou algo acidentalmente e, o mais importante, evitar rodar o compositor no momento da implantação. O último é vital agora que estamos contando com fornecedores externos de repositórios. E se um deles não estiver disponível? De repente, você não pode implantar. As desvantagens são um repositório maior, o risco de cometer hacks principais e o repulsão de desenvolvedores como eu :)

Robert Egginton
fonte
Também começamos a confirmar o aplicativo / etc / config.php. Por padrão, isso é ignorado pelo .gitignore do Magento 2, mas ao confirmar isso, a ativação e desativação são feitas durante o desenvolvimento e essa decisão é confirmada e pode ser propagada e testada via CI.
Robert Egginton
Você seriamente transforma seu site offline? Essa não é uma opção para nós. Nossa empresa está fazendo realmente o dinheiro
TheBlackBenzKid
No momento, sim, colocamos os sites offline brevemente, pois não temos 100% de certeza de que os usuários não verão um site parcialmente operacional. Com a nossa maior experiência com o M1, sabemos com um alto grau de certeza quais mudanças podem ser ativadas sem derrubar o site. Ainda não é o caso com o M2.
Robert Egginton
Up-vote. No entanto, como @TheBlackBenzKid, eu gostaria de ver algo que não coloca o site offline, especialmente porque a compilação de DI demora um pouco. Eu acho que entender o que a compilação de DI realmente faz é fundamental - seria ótimo se essa etapa pudesse ser feita na pasta release-candidate. Entretanto, algum progresso desde que você postou este @Robert?
Erfan
11
Interessante editar @RobertEgginton - Atualmente estou explorando isso e acompanhei suas postagens e discussões. Compartilho as reservas sobre o uso do compositor no momento da implantação e a potencial indisponibilidade de repositórios de terceiros, embora assuma que isso seja menos uma preocupação com os repositórios de pacotes. A confirmação de ./vendor também parece menos do que ideal, mas pelo menos fornece uma versão completa que pode ser implantada independentemente de acordos de recompra de terceiros. Você já tentou a extensão Capistrano Magento2? Isso usa a instalação do compositor, mas eu gosto do fluxo de trabalho do cap github.com/davidalger/capistrano-magento2
BlueC
3

Até agora, também confirmamos a pasta do fornecedor, que naturalmente adiciona muitos arquivos ao seu repositório. (Certifique-se de remover qualquer pasta .git nos arquivos do compositor do fornecedor, caso contrário, o conteúdo das pastas não será confirmado - firegento por exemplo). Mas a ligação simbólica da pasta vendor não funciona, a edição do caminho no arquivo vendor_path.php também não funciona e ainda não tivemos tempo de procurar uma solução melhor.

Não temos um servidor de construção e não executamos o compositor no servidor, executamos e testamos todas as atualizações localmente e as confirmamos. Por sua vez, isso dispara nosso script de implantação.

Nosso script de implantação substitui o arquivo env.php, faz algumas coisas personalizadas e também aciona setup:upgradee setup:static-content:deployantes de mudar o link ao vivo para a nova pasta.

A única pasta em que ligamos o link é pub / media.

tecjam
fonte
Obrigado pela contribuição. além de alterar o env.php, quais são as outras alterações que você gostaria de fazer?
Claudiu Creanga
Tudo depende do seu próprio servidor e configuração do projeto, eu acho. Para as ramificações dev & staging, também excluímos o arquivo .htaccess e copiamos nossos próprios arquivos .htaccess & htpassword no diretório rodamos como o proprietário do arquivo magento (o usuário de implantação é root) e vinculamos a pasta media na pasta pub. É claro que você também pode adicionar qualquer outra coisa que preferir ao implantar, em vez de antes.
tecjam 17/02/16
A confirmação de arquivos em / vendor geralmente é desaconselhada, pois derrota o objetivo de um gerenciador de componentes. Veja a documentação do compositor.
User3668514
Isso está claro. Então, como você gerencia sua implantação?
tecjam 19/02/16
11
Cuidado @ user3668514 - Acho que você quer dizer instalação de compositor. É fácil executar atualizações acidentalmente e modificar componentes em vez de instalá-los.
Robert Egginton
2

Por fim, optamos por um serviço como deploybot( http://deploybot.com/ ). Você pode usar o capistranoque é gratuito. O Deploybot cria um contêiner de docker enquanto a instalação do compositor está em execução e, se o comando for bem-sucedido, ele implementará o código; caso contrário, ele não implementará nada, para que seu ambiente de produção fique seguro.

Considero a melhor abordagem porque:

1) ter a pasta do fornecedor em seu repositório git não é recomendado pelos compositores por boas razões:

The general recommendation is no. The vendor directory (or wherever your dependencies are installed) should be added to .gitignore/svn:ignore/etc.

Mais informações: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

2) A execução composer install in productionsem redes de segurança é arriscada , os pacotes podem estar inoperantes (consulte a npm), você pode encontrar problemas de memória ou qualquer erro que possa estar acontecendo enquanto o compositor gera arquivos e você terá que lidar com um ambiente de produção danificado.

Claudiu Creanga
fonte
1

Também estou analisando isso, a abordagem adotada até agora é:

Inicializando o servidor:

  1. Configure o projeto composer --create-project ... --no-devem uma srcpasta (embora eu ainda veja muitos itens de desenvolvimento chegando)
  2. Aplicativo de instalação, compilar arquivos estáticos, atualizar db etc.
  3. Defina todas as permissões corretas

O que me dará um estoque, executando a loja do meu diretório src (mas meu webroot não está apontando para lá)

Então meu processo de implantação:

  1. Crie uma nova pasta de lançamento
  2. rsync os arquivos src no meu release (excluindo o cruft)
  3. implantar e descompactar minhas personalizações por cima (alguns arquivos e módulos de temas)
  4. instalar qualquer módulo magento de terceiros através do magento connect
  5. aponte meus webroot de hosts para minha nova versão (com um link simbólico)
  6. graciosamente recarregar meu servidor web

Isso me permite manter o código principal do Magento separado do meu, usar o compositor para mantê-lo atualizado .. e eu não preciso enviar 39.102 !!! arquivos com cada implantação ou execute comandos do compositor no momento da implantação.

... Gostaria de ouvir outras abordagens ou as melhores práticas sobre isso, e também gosto de saber quais arquivos são realmente necessários para a produção e quais são dev .. para que eu possa manter minha raiz da web limpa.

Quando terminar, terei um manual ansible e alguns comandos do Fabric para orquestrar a configuração e a implantação, que é um prazer compartilhar.

espero que ajude

farridav
fonte
Eu adoraria ver os playbooks e scripts.
JB Becker