Pergunta

Estou começando um novo projeto em PHP e eu adoraria para obter algum feedback de outros desenvolvedores em sua estratégia preferida para implantação PHP. Eu adoraria para automatizar as coisas um pouco para que, quando alterações são confirmadas eles podem ser rapidamente migrou para um servidor de desenvolvimento ou produção.

Eu tenho experiência com implementações usando Capistrano com Ruby, bem como alguns scripts básicos shell.

Antes de mergulhar de cabeça em meu próprio que seria ótimo para ouvir como os outros têm abordado este em seus projetos.

Mais informações

Atualmente desenvolvedores trabalham em instalações locais do site e confirmar as alterações para um repositório de subversão. As primeiras implementações são feitas através da exportação de um lançamento marcado a partir do SVN e upload que para o servidor.

Outras alterações são normalmente feitas aos poucos pelo upload de arquivos alterados manualmente.

Foi útil?

Solução

Para PHP, scripts do SVN com Phing build são o caminho a percorrer. Phing é semelhante ao ANT mas é escrito em PHP, o que torna muito mais fácil para os desenvolvedores de PHP para modificar a sua necessidades.

Nossa rotina de implantação é a seguinte:

  • Todos desenvolve no mesmo servidor local de trabalho, cada desenvolvedor tem um check-out em sua casa máquina de volta também.
  • Compromete desencadear um gancho post-commit que atualiza um servidor de teste.
  • Os testes são correu na encenação servidor, se eles passam - continuar
  • .
  • script de construção Phing é RAN:
  • leva para baixo servidor de produção, alternando o domínio a uma página "em construção"
  • Executa atualização SVN na produção de checkout
  • Executa deltas esquema de script
  • executa testes
  • Se os testes falham - script executado rollback
  • Se os testes passar, rotas Server Voltar para a produção de checkout

Há também phpUnderControl é, o que é um servidor de integração contínua. Eu não encontrá-lo muito útil para projetos web para ser honesto.

Outras dicas

Atualmente estou implantando PHP usando Git . A produção git push simples é tudo que é necessário para atualizar o meu servidor de produção com a cópia mais recente do Git. É fácil e rápido, porque o suficiente inteligente do Git para enviar apenas os diffs e não todo o projeto mais uma vez. Ele também ajuda a manter uma cópia redundante do repositório no servidor web em caso de falha de hardware no meu fim (embora eu também empurrar para GitHub para ser seguro).

Webistrano , uma interface web para Capistrano, e estamos muito felizes com ele.

Webistrano permite multi-estágio, implementações multi-ambiente de SVN, GIT e outros. Ele foi construído com o suporte à reversão, o suporte para papéis distintos servidor, como web, db, app, etc., e implanta em paralelo. Ele permite que você para substituir os parâmetros de configuração em vários níveis, como por etapa, e registra os resultados de cada deploy, opcionalmente enviá-la.

Apesar de Capistrano e Webistrano são aplicações Ruby, a sintaxe das 'receitas' de implantação é fácil e poderoso o suficiente para entender para qualquer programador PHP. Originalmente Capistrano foi construído para projetos Ruby on Rails, mas acomoda facilmente projetos PHP.

Uma vez configurado, é ainda bastante fácil de ser usado por não-programadores, tais como testadores implantação de uma versão de teste.

Para fornecer a implantação mais rápida possível que instalou o href="http://github.com/37signals/fast_remote_cache/tree/master" rel="noreferrer"> fast_remote_cache método , que atualiza um svn trabalhando contra cópia cache no servidor remoto e, em seguida, hardlinks o resultado.

Eu uso Apache Ant para implantar a diferentes alvos (dev, QA e ao vivo). Ant é projetado para trabalhar para a implantação Java, mas fornece uma solução caso geral bastante útil para a implantação de arquivos arbitrários.

A sintaxe do arquivo build.xml é muito fácil de aprender -. Você define diferentes alvos e suas dependências que são executados quando você chamar o programa de formiga na linha de comando

Por exemplo, eu tenho metas para dev, QA e ao vivo, cada um dos quais depende o destino cvsbuild que verifica fora a última revisão cabeça do nosso servidor CVS, copia os arquivos apropriados para o diretório de compilação (usando a tag conjunto de arquivos) e rsyncs então o diretório de compilação para o servidor apropriado. Existem algumas peculiaridades de aprender, e a curva de aprendizagem não é totalmente plana, mas eu venho fazendo isso desta forma durante anos sem problemas, então eu recomendo-o para a sua situação, embora eu estou curioso o que as outras respostas que eu vai ver em esta discussão.

I fazer coisas manualmente usando Git. Um repositório para o desenvolvimento, que fica git push --mirror'ed a um repo público, eo servidor ao vivo é uma terceira repo puxado a partir daí. Esta parte eu suponho que é o mesmo que sua própria configuração.

A grande diferença é que eu uso galhos por quase todas as mudanças que estou trabalhando (Eu tenho cerca de 5 agora), e tendem a virar para trás e para frente entre eles. O ramo principal não fica alterado diretamente, exceto para mesclar outros ramos.

Eu corro o servidor ao vivo direto do branch master, e quando eu terminar com um outro ramo e pronto para fundi-lo, virar o servidor para que se ramificam por um tempo. Se ele quebra, colocando-o de volta ao mestre leva alguns segundos. Se ele funciona, ele é incorporado mestre eo código ao vivo é atualizado. Acho que uma analogia deste no SVN seria ter duas cópias de trabalho e apontando para o um ao vivo através de um link simbólico.

Eu sei Phing foi mencionado algumas vezes agora, mas eu tive muita sorte com < a href = "http://www.phpundercontrol.org/about.html" rel = "nofollow noreferrer"> phpUnderControl . Para nós

  1. Confira cópias individuais dos ramos para máquinas locais
  2. Ramos são testados e, em seguida, fundidos em Trunk
  3. commit Trunk são construídos automaticamente por phpUnderControl, executa testes e constrói toda a documentação, aplica deltas de banco de dados
  4. Trunk é executado através de testes de qualidade e, em seguida, fundidos em nosso ramo estável
  5. Novamente, phpUnderControl automaticamente constrói Estável, executa testes e gera documenation e atualizações do banco de dados
  6. Quando estamos prontos para empurrar a produção que executar um script rsync que faz o backup de Produção, atualiza o banco de dados e, em seguida, empurra os arquivos para cima. O comando rsync é invocado com a mão para que se certificar de que alguém está assistindo a promoção.

uma alternativa para scripts de implantação caseiros é implantar a uma plataforma-como-um-serviço que abstrai um monte de que o trabalho para você. A PaaS irá normalmente oferecem a sua própria ferramenta de implementação de código, bem como dimensionamento, tolerância a falhas (por exemplo. Não indo para baixo quando o hardware falhar), e, geralmente, um grande conjunto de ferramentas para monitoramento, log verificação etc. Há também o benefício da implantação de um configuração conhecida bom que será mantido up-to-date com o tempo (um a menos dor de cabeça para você).

Os PaaS eu recomendo é dotCloud , além de PHP ( ver o seu PHP quickstart ) também pode implantar MySQL, MongoDB e todo um conjunto de serviços adicionais. Ele também tem boas guloseimas como implantação de 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 estou um pouco tendenciosa desde que eu trabalho lá! Outras opções vale a pena conferir, além de dotCloud são Pagodabox e Orquestra (agora parte da Engine Yard).

Espero que isso ajude!

Solomon

Que você automaticamente e cegamente tomar as alterações de um repositório para servidores de produção parece perigoso. E se o seu código comprometido contém um bug de regressão, para que o seu aplicativo de produção fica glitchy?

Mas, se você quer um sistema de integração contínua para PHP, eu acho Phing é a melhor escolha para PHP. Eu não testei por mim mesmo, embora, como eu faço coisas da maneira manual por exemplo scp.

Eu sou maneira atrasado para a festa, mas eu pensei que eu iria partilhar os nossos métodos. Usamos Phing com Phingistrano , que fornece Capistrano-como funcionalidade para Phing via arquivos de compilação pré-construídos. Ele é muito legal, mas só funciona se você usar o Git no momento.

Eu tenho uma cópia de trabalho de um ramo release SVN no servidor. Atualizando o site (quando não há alterações de esquema) é tão fácil como a emissão de um comando de atualização SVN. Eu nem sequer tem que ter o site offline.

Phing é provavelmente a sua melhor aposta, se você pode suportar a dor de arquivos de configuração XML. O framework Symfony tem a sua própria porta de rake (pake), que funciona muito bem, mas é bastante intimamente ligado ao resto do Symfony (embora você provavelmente poderia separá-los).

Outra opção é usar Capistrano. Obviamente que não se integra bem com PHP, como faz com Ruby, mas você ainda pode usá-lo para um monte de coisas.

Por fim, você sempre pode escrever scripts shell. Até agora, isso é o que tenho feito.

http://controltier.org/wiki/Main_Page

vamos usá-lo para implantações e manutenção de vários servidores.

Um ano atrasado, mas ... No meu caso, a implantação não é automática. Acho que é perigoso para implantar scripts de código e executá banco de dados de migração automaticamente.

Em vez disso, ganchos de subversão são usados ??para implantar somente para testes / encenação servidor. Código é implantado em produção no final de uma iteração, depois de ter executar testes e fez certeza que as coisas vão funcionar. Para a implantação propriamente dita, eu uso um Makefile-made personalizado que usa rsync para transferir arquivos. O Makefile também pode executar os scripts de migração nos servidores de servidor remoto, pausar / retomar web e banco de dados.

No meu trabalho eu e minha equipe desenvolveram uma substituição orientada Phing para implantação de Capistrano e temos também incorporou alguns dos presentes disponíveis em phing como testes PHPUnit, phpcs e PHPDocumentor. Nós fizemos um repositório git que podem ser adicionados a um projeto como um sub-módulo em git e ele funciona muito bem. Anexei-lo para um punhado de projetos e é bastante modular que é fácil fazê-lo funcionar com qualquer projeto em alguns de nossos vários ambientes (staging, testes, produção, etc ...).

Com os scripts de construção Phing você pode executá-los na linha de comando manualmente, e eu também tive sucesso automatizar as rotinas build / Implementar com Hudson e agora Jenkins ci.

Eu não posso postar todos os links agora porque o repo não é público, mas eu tenho dito que vamos código aberto, por vezes, em breve, por isso não hesite em contactar-me se você estiver interessado ou Se você tiver alguma dúvida sobre como automatizar sua implantação com phing e git.

Eu acho SVN forma de implantação não é muito bom. Porque:

Você precisa abrir o acesso SVN para todo o mundo

tem muitos .svn nos servidores de produção web

Eu acho Phing para produzir um ramo + combinar todos os js / css + substituir fase de configuração + carregamento ssh a todos os servidores WWW é a melhor maneira.

ssh a 10 servidor www e svn up também é problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top