Configuração de Desenvolvimento Magento

23

essa pergunta é direcionada para a criação do ambiente de desenvolvimento. Eu tenho alguns requisitos específicos:

  1. Quero poder usar minha solução no Linux, Windows e Mac OS, já que as pessoas da nossa equipe usam todos esses sistemas operacionais (por exemplo, desenvolvedores de front-end usam Windows / Mac, os desenvolvedores de back-end geralmente usam Linux)
  2. Eu preciso usar o modman
  3. Eu preciso usar compositor
  4. Preciso usar o Github, bem como meus repositórios privados do Git
  5. Preciso de um IDE adequado, como Netbeans ou PHP Storm
  6. Quero muito bom desempenho

Minha configuração atual é uma imagem virtualizada do Ubuntu no Virtualbox. Todos os três sistemas operacionais podem executar o Virtualbox; portanto, os pontos 1) - 5) estão todos satisfeitos.

No entanto, atualmente, não estou completamente satisfeito com 6). Isto é especialmente verdade ao executar a solução no Ubuntu 12.04. O Virtualbox parece muito mais estável e responsivo no Windows 7. No entanto, muitas pessoas em nossa equipe estão usando Linux, então eu gostaria de melhorar a solução.

Alguém tem uma configuração comparável no VMWare ou talvez até o docker.io e pode informar se é mais estável? Ou alguém tem outras soluções / idéias comparáveis?

mpaepper
fonte
boa pergunta! também trabalhamos em uma configuração semelhante, mas ainda não a colocamos em nosso fluxo de trabalho regular. ansioso pelas respostas.
Anna Völkl
apenas uma idéia rápida: não seria possível trabalhar sem a VM no Linux e apenas instalar diretamente tudo o que é executado na VM? ou você usa uma VM para um projeto?
Anna Völkl
Você está executando a VM sem cabeça ou com uma GUI? E como você está sincronizando o sistema de arquivos VM Image com o sistema host? Pastas partilhadas? Samba? (Estou supondo que o IDE esteja sendo executado no host, não na VM). Isso pode fazer uma grande diferença.
Vinai
@ AnnaVölkl sim, seria possível, mas destruiria algumas das vantagens. Por exemplo, sempre que você atualiza a imagem base, todos os usuários do Linux precisam atualizar manualmente as alterações. Além disso, se você quiser levar sua caixa de um computador para outro (por exemplo, trabalhar em casa ou em outro lugar), as coisas serão muito mais difíceis.
Mpaepper #
1
Como Anna disse: também estamos trabalhando em algo assim. Estamos usando o Vagrant para criar as imagens da VM e isso está funcionando muito bem. Como você diz, o desempenho (referente à velocidade da E / S do arquivo em pastas compartilhadas) é a principal coisa na qual precisamos trabalhar antes de mudar. Para sistemas host Linux, os compartilhamentos NFS podem ajudar. Nosso grande problema é que a maioria dos nossos desenvolvedores usa sistemas host Windows e, ao contrário do link, o desempenho do Windows não é bom. Já ouvi isso de pessoas diferentes agora, não somos apenas nós.
Matthias Zeis #

Respostas:

8

Eu uso vagrant, git e alguns scripts de construção em phing. A máquina vagrant executa o banco de dados e o servidor web, o git usado localmente para rastrear alterações em minhas extensões e construir o script usado para atualizar o /var/wwwdiretório na minha máquina vagrant (bem, na verdade, é usado em todos os lugares em que eu preciso criar um ambiente).

Phing

Provavelmente a parte mais interessante é o phing, que funciona como modman + compositor para mim. Possui poucos destinos definidos, incluindo construção, configuração e instalação.

O destino da compilação baixa certa versão do magento (especificada na configuração da compilação) do servidor da web interno e extrai-a no diretório da compilação. Em seguida, execute outros destinos que configuram permissões para arquivos e limpam o cache. Em seguida, ele cria links simbólicos para todos os arquivos no diretório de origem. Como resultado, eu preparo todos os arquivos para uso no meu diretório de compilação. Se os arquivos principais do magento já estiverem no diretório build, eles ignoram o download e apenas atualizam os links simbólicos, então eu uso esse destino para reconstruir o ambiente sempre que preciso atualizar links simbólicos. Para o diretório de origem da máquina vagrant, está em /vagrant/src(pasta compartilhada) e o diretório de compilação está /var/www.

O destino da instalação faz o download e importa o dump do banco de dados para determinada versão do magento. Em seguida, execute o destino da instalação.

O destino da instalação apenas cria um arquivo local.xml com todas as configurações.

Na minha empresa, usamos ferramentas de teste de unidade e CI; dessa maneira, para criar um ambiente magento, podemos testar nossas extensões em diferentes versões do magento e executá-lo com e sem a instalação.

Eu criei um "atalho" na máquina vagrant que simplifica o acesso para construir. Por exemplo, para reconstruir o projeto, basta digitar vagrant ssh -c magebuilde executar automaticamente o phing no /vagrantdiretório

Em seguida, atribuí esse comando a certa combinação de teclas no meu PHPStorm IDE e agora posso reconstruir o projeto pressionando Alt + B no meu IDE. Mas como eu uso links simbólicos, na maioria das vezes não é uma operação.

Vagabundo

Uma caixa para vagrant é minha própria caixa com o Ubuntu 12.04 a bordo; na verdade, é apenas uma versão 12.04 precisa e precisa com todo o software pré-instalado + atalho e algumas configurações. No arquivo vagrant eu coloquei apenas as configurações de encaminhamento de porta, rede privada para poder usar o xDebug e colocar o atalho de compilação às provisões.

GIT

No git, rastreio apenas meus arquivos de extensão, build.xmlpara phing e Vagrantfile. Portanto, todo mundo que deseja criar um ambiente pode apenas clonar o repositório e ficar vagaroso. Em seguida, ele colocará a VM em funcionamento e pronta para trabalhar. Todo esse processo leva 1-2 minutos. Se você deseja criar um projeto localmente (sem usar a VM), é possível executar phing build install.

Sergey Kolodyazhnyy
fonte
2

Atualmente, meu ambiente de desenvolvimento é o Ubuntu v12.04 com VMWare. Trabalho inteiramente dentro da VM, com GUI completa e só uso o compartilhamento de arquivos samba no Ubuntu se precisar acessar os arquivos do SO host que é o Windows 7. Normalmente, eu acesso e mapeio uma unidade de rede através do IP interno do VM via NAT para conexão em rede com a VM. O uso de outras soluções mostrou-se muito mais lento como as Pastas Compartilhadas do VMWare. Eu tenho isso desativado nas minhas configurações de imagem do VMWare. No entanto, instalo as ferramentas VMWare para facilitar a cópia / pasta na minha máquina host e vice-versa.

Como Matthias Zeis apontou, tenha cuidado na seleção de pastas de rede / compartilhadas com a sua VM, pois algumas se mostrarão problemáticas.

Eu era usuário anterior do VirtualBox, mas achei o VMWare mais estável e com um desempenho aceitável (pelo menos para mim). No entanto, eu faria seus próprios testes para melhor atender às suas necessidades e exigências, ou seja. O Vagrant usa o VirtualBox.

IDE: Eu estava usando o Netbeans bastante como meu IDE preferido, mas desde então mudei para uma solução mais leve como o Sublime Text 2 . Eu raramente abrirei o Netbeans principalmente para fins de X-Debug e para refatoração mais fácil. Netbeans, PHPStorm, Eclipse, etc. são todos IDEs baseados em Java e podem consumir muito recursos.

HARDWARE: Para adicionar mais, o hardware sempre será um papel fundamental no desempenho (obviamente). Se seus desenvolvedores ainda estiverem usando o disco rígido de prato, eu gostaria de investir em SSD para eles. Como o Magento possui uma quantidade muito grande de arquivos / pastas, ele acelerará bastante o desempenho dos desenvolvedores. Durante o desenvolvimento: Com todo o cache desativado, e Enquanto simplesmente percorre a árvore de pastas no SVN / GIT ou no seu IDE. Também é importante fornecer RAM suficiente à sua VM.

Minha máquina host: Samsung SSD de 512 GB de espaço em disco, Win7 (64 bits), 8 GB de RAM, i7 2,4 GHz (8 núcleos)

Minha máquina VM: SSD Samsung, 30 GB de espaço em disco, Ubuntu 12.04 (32 bits), 3 GB de RAM, i7 (4 núcleos alocados).

PERGUNTAS A SEREM FEITAS: A maior pergunta é: criar uma imagem da VM do desenvolvedor que seja leve e reutilizável em vários projetos ou criar uma imagem por projeto. Anteriormente, eu estava tentando fazer VMs menores em uma base por projeto, no entanto, a reconfiguração constante para acompanhar o meu fluxo de trabalho de desenvolvimento tornou-se uma tarefa árdua, e agora use uma VM maior e faça o possível para manter cada projeto o mais isolado possível.

Manter o SO, IDE, LAMP Stack, atualizações / configurações etc. pode se tornar uma tarefa árdua se várias VMs por projeto forem a rota escolhida. Por fim, levando a um tempo de desenvolvimento mais longo (e ainda pior, não faturável, para configurações do ambiente local).

Isso também se mostrou útil, pois pude acessar rapidamente outros arquivos de projeto sem a necessidade de abrir uma nova VM e dividir ainda mais o hardware do meu host. A desvantagem é que, idealmente, eu gostaria que cada projeto fosse retirado de outros projetos para evitar problemas imprevistos no ambiente (por exemplo, php.ini, my.cnf, httpd.conf, etc.). Até agora, a troca de ter todos os projetos facilmente acessíveis se mostrou mais engenhosa.

Novamente, isso depende de seus requisitos e necessidades; portanto, avalie-os com antecedência.

FEEDBACK: O que leva ao feedback. Obtenha o máximo de informações possível dos seus desenvolvedores. Por fim, seus requisitos precisam ser atendidos e seus problemas entendidos antes que uma solução adequada possa ser configurada e posta em prática. Todo mundo tem fluxos de trabalho diferentes e nem todos se sentem à vontade trabalhando no sistema operacional que você pode escolher para o desenvolvimento. Minha regra geral é permitir que o desenvolvedor escolha o SO e o IDE em que se sente mais confortável e com melhor desempenho. Portanto, mesmo uma VM linux sem cabeça leve pode ser útil para suas necessidades, mas obviamente pode ocorrer o compartilhamento de pastas na rede local entre o Host e a VM.

PORTABILIDADE: Também brinquei com a idéia de manter minha imagem da VM em algo como o Dropbox para que eu pudesse acessá-la facilmente a qualquer momento que eu precisar. Como serviços como o Dropbox se comparam pouco a pouco do que é armazenado, parecia lógico que apenas os bits alterados seriam sincronizados. No entanto, isso não foi o caso, pois acredito que tenha a ver com os aspectos internos de como o arquivo de imagem é salvo, e eu ficaria esperando o dia / noite apenas para que minha VM fosse sincronizada.

OBSERVAÇÕES: Quanto maior o espaço da unidade alocado para a VM, maior será a imagem, lembre-se disso ao distribuir a imagem aos desenvolvedores. O carregamento frontal dos arquivos do projeto por projeto pode ser um exagero e eu deixaria isso para cada desenvolvedor configurar depois que eles criarem a imagem.

Ashley Schroder tem um artigo relacionado um tanto antigo que é uma boa leitura, além de alguns comentários de Fooman e Colin

Esperemos que isso ajude a entender o item listado do problema, nº 6.

B00MER
fonte