Estou iniciando um novo projeto em PHP e gostaria de receber feedback de outros desenvolvedores sobre sua estratégia preferida para implantação em PHP. Adoraria automatizar um pouco as coisas para que, assim que as alterações sejam confirmadas, elas possam ser rapidamente migradas para um servidor de desenvolvimento ou produção.
Tenho experiência com implantações usando Capistrano com Ruby, além de alguns scripts básicos de shell.
Antes de mergulhar de cabeça sozinho, seria ótimo ouvir como os outros abordaram isso em seus projetos.
Outras informações
Atualmente, os desenvolvedores trabalham em instalações locais do site e confirmam alterações em um repositório do subversion. As implementações iniciais são feitas exportando um release marcado do svn e carregando-o no servidor.
Alterações adicionais geralmente são feitas gradualmente, fazendo o upload manual de arquivos alterados.
fonte
Respostas:
Para PHP, os scripts de construção SVN com Phing são o caminho a percorrer. Phing é semelhante ao ANT, mas é escrito em PHP, o que facilita muito a modificação dos desenvolvedores de PHP de acordo com suas necessidades.
Nossa rotina de implantação é a seguinte:
Há também o phpUnderControl , que é um servidor de Integração Contínua. Não achei muito útil que projetos na Web fossem honestos.
fonte
Atualmente, estou implantando o PHP usando o Git . Uma produção simples do Git Push é tudo o que é necessário para atualizar meu servidor de produção com a cópia mais recente do Git. É fácil e rápido, porque o Git é inteligente o suficiente para enviar apenas as diferenças e não todo o projeto novamente. Também ajuda a manter uma cópia redundante do repositório no servidor da Web em caso de falha de hardware do meu lado (embora eu também use o GitHub para garantir a segurança).
fonte
Usamos o Webistrano , uma interface web do Capistrano, e estamos muito felizes com isso.
O Webistrano permite implementações em vários estágios e em vários ambientes do SVN, GIT e outros. Possui suporte de reversão interno, suporte para funções de servidor separadas, como web, banco de dados, aplicativo etc., e é implementado em paralelo. Ele permite que você substitua os parâmetros de configuração em vários níveis, como por estágio, e registre os resultados de cada implantação, opcionalmente enviando-os por correio.
Embora o Capistrano e o Webistrano sejam aplicativos Ruby, a sintaxe das 'receitas' da implantação é fácil e poderosa o suficiente para ser entendida por qualquer programador PHP. Originalmente, o Capistrano foi criado para projetos Ruby on Rails, mas acomoda facilmente projetos PHP.
Uma vez configurado, é fácil o suficiente para ser usado por não programadores, como testadores que implantam uma versão intermediária.
Para fornecer a implementação mais rápida possível, instalamos o método fast_remote_cache , que atualiza um cache de cópia de trabalho svn no servidor remoto e, em seguida, vincula o resultado.
fonte
Eu uso o Apache Ant para implantar em diferentes destinos (dev, QA e live). O Ant foi projetado para funcionar na implantação de Java, mas fornece uma solução geral útil para a implantação de arquivos arbitrários.
A sintaxe do arquivo build.xml é bastante fácil de aprender - você define diferentes destinos e suas dependências que são executados quando você chama o programa ant na linha de comandos.
Por exemplo, eu tenho destinos para dev, QA e live, cada um dos quais depende do destino cvsbuild que faz check-out da última revisão principal do nosso servidor CVS, copia os arquivos apropriados no diretório build (usando a tag do conjunto de arquivos) e, em seguida, rsyncs o diretório de compilação no servidor apropriado. Existem algumas peculiaridades a aprender, e a curva de aprendizado não é totalmente plana, mas eu faço dessa maneira há anos sem problemas, então eu a recomendaria para sua situação, embora eu esteja curioso para saber outras respostas. verá neste tópico.
fonte
Eu faço coisas manualmente usando o Git. Um repositório para desenvolvimento, que é
git push --mirror
enviado para um repositório público, e o servidor ativo é um terceiro repositório extraído desse repositório . Suponho que esta parte seja igual à sua própria configuração.A grande diferença é que eu uso ramificações para quase todas as alterações nas quais estou trabalhando (tenho cerca de cinco no momento) e tende a alternar entre elas. O ramo mestre não é alterado diretamente, exceto para mesclar outros ramos.
Eu executo o servidor ativo diretamente da ramificação mestre e, quando terminar com outra ramificação e pronto para mesclá-la, vire o servidor para essa ramificação por um tempo. Se quebrar, colocá-lo de volta ao mestre leva segundos. Se funcionar, ele será mesclado no mestre e o código ativo será atualizado. Suponho que uma analogia disso no SVN seria ter duas cópias de trabalho e apontar para a ao vivo por meio de um link simbólico.
fonte
Eu sei que Phing já foi mencionado algumas vezes agora, mas tive muita sorte com o phpUnderControl . Para nós nós
fonte
uma alternativa aos scripts de implantação caseiros é implantar em uma plataforma como serviço que abstraia muito desse trabalho para você. Um PaaS normalmente oferece sua própria ferramenta de implantação de código, além de escala, tolerância a falhas (por exemplo, não diminui quando o hardware falha) e, geralmente, um ótimo kit de ferramentas para monitoramento, verificação de log etc. Há também o benefício de implantar em um boa configuração conhecida que será mantida atualizada ao longo do tempo (menos uma dor de cabeça para você).
O PaaS que eu recomendaria é o dotCloud , além do PHP ( consulte o início rápido do PHP ), ele também pode implantar o MySQL, o MongoDB e um monte de serviços adicionais. Ele também possui ótimas vantagens, como implantação com tempo de inatividade zero, reversão instantânea, suporte completo para SSL e websocket, etc. E há um nível gratuito que é sempre bom :)
Claro que sou um pouco tendenciosa, pois trabalho lá! Outras opções que valem a pena conferir além do dotCloud são o Pagodabox e o Orchestra (agora parte do Engine Yard).
Espero que isto ajude!
Salomão
fonte
O fato de você fazer alterações automáticas e cegas de um repositório para servidores de produção parece perigoso. E se o seu código confirmado contiver um erro de regressão, para que seu aplicativo de produção fique com problemas?
Mas, se você deseja um sistema de Integração Contínua para PHP, acho que Phing é a melhor opção para PHP. Eu mesmo não testei, pois faço coisas da maneira manual, como por exemplo, scp.
fonte
Estou muito atrasado para a festa, mas pensei em compartilhar nossos métodos. Usamos o Phing com o Phingistrano , que fornece ao Phing funcionalidades semelhantes ao Capistrano por meio de arquivos de compilação pré-criados. É muito legal, mas só funciona se você usar o Git no momento.
fonte
Eu tenho uma cópia de trabalho de uma ramificação de versão SVN no servidor. A atualização do site (quando não há alterações no esquema) é tão fácil quanto emitir um comando de atualização do SVN. Nem preciso colocar o site offline.
fonte
Phing é provavelmente a sua melhor aposta, se você aguenta a dor dos arquivos de configuração xml. A estrutura do Symfony tem seu próprio porto de rake (pake), que funciona muito bem, mas está bastante acoplado ao restante do Symfony (embora você provavelmente possa separá-los).
Outra opção é usar o Capistrano. Obviamente, ele não se integra tão bem ao PHP, como ao Ruby, mas você ainda pode usá-lo para muitas coisas.
Por fim, você sempre pode escrever scripts de shell. Até agora, foi o que eu fiz.
fonte
http://controltier.org/wiki/Main_Page
vamos usá-lo para implantações e manutenção de vários servidores.
fonte
Um ano atrasado, mas ... No meu caso, a implantação não é automática. Acho perigoso implantar código e executar scripts de migração de banco de dados automaticamente.
Em vez disso, os ganchos do subversion são usados para implantar apenas no servidor de teste / armazenamento temporário. O código é implantado na produção no final de uma iteração, depois de executar os testes e garantir que tudo funcione. Para a implantação em si, eu uso um Makefile personalizado que usa o rsync para transferir arquivos. O Makefile também pode executar os scripts de migração no servidor remoto, pausar / retomar servidores da Web e de banco de dados.
fonte
No meu trabalho, eu e minha equipe desenvolvemos um substituto orientado ao Phing para a implantação do capistrano e também incorporamos algumas das vantagens disponíveis no phing, como testes do PHPUnit, phpcs e PHPDocumentor. Criamos um repositório git que pode ser adicionado a um projeto como um submódulo do git e funciona muito bem. Eu o anexei a vários projetos e é modular o suficiente para que seja fácil fazê-lo funcionar com qualquer projeto em qualquer um de nossos diversos ambientes (preparação, teste, produção, etc ...).
Com os scripts de construção de phing, você pode executá-los manualmente a partir da linha de comando, e também tive sucesso ao automatizar as rotinas de construção / implantação com Hudson e agora Jenkins ci.
Não posso postar nenhum link agora porque o repo ainda não é público, mas me disseram que vamos abrir o código algumas vezes em breve. Portanto, não hesite em entrar em contato comigo se tiver interesse ou se tiver qualquer dúvida sobre como automatizar sua implantação com phing e git.
fonte
Eu acho que a maneira de implantar SVN não é muito boa. Porque:
Você precisa abrir o acesso SVN para o mundo inteiro
tem muitos .svn nos servidores Web de produção
Eu acho que Phing para produzir uma filial + combinar todos os js / css + substituir a configuração do palco + o upload de ssh para todos os servidores www é a melhor maneira.
ssh para 10 www server e svn up também é problema.
fonte