desenv-web-rp.com

Você pode recomendar maneiras de gerenciar a implantação de código em um servidor Web baseado em Linux?

Eu sempre usei um script bash muito simples para implantar código. Estou deixando de usar o Subversion para o Mercurial, mas realmente não acho que o software de controle de revisão seja importante para a implantação.

Quais são algumas maneiras melhores de fazer isso?

#!/bin/sh
date=`date +%Y%m%d_%H%M%S`
tar -zcvf app-dir-$date.tar.gz app/dir 
tar -zcvf app-templates-$date.tar.gz app/templates
tar -zcvf app-media-$date.tar.gz app/media
svn export http://example.com/somepath/trunk hh/ --force
7
citadelgrad

Eu uso Mercurial para gerenciar tudo , incluindo minhas páginas HTML estáticas. Torna a vida muito, muito fácil para mim.

Os benefícios incluem

  • Todas as vantagens do controle de versão de vantagens (reversões, marcações de marcos etc.)
  • Ser capaz de clonar seu site às pressas
  • Você sempre tem um backup/cópia local em funcionamento
  • Fácil de manter em sincronia se você costuma fazer alterações no local (no local, no servidor)
  • A maioria dos hosts compartilhados (se você estiver lidando com um) não se importa de instalá-lo

Isenção, eu escrevi o tutorial. Sim, o tipo de VCS que você usa importa, até certo ponto. Por exemplo, eu não usaria algo nesse cenário em que não pudesse confirmar localmente e fazer uma grande atualização/envio. Isso me força a agrupar muitas mudanças potencialmente problemáticas em um único compromisso.

Eu poderia fazê-lo com o Subversion, e não estou batendo no SVN. Eu apenas acho que o Mercurial é uma ferramenta muito melhor para o problema que você está tentando resolver.

É minha opinião que você não deve "contornar" suas ferramentas, a menos que não tenha outra escolha. Fazer isso derrota o propósito de tê-los, e você tem uma escolha :)

5
Tim Post

Além das excelentes sugestões nas outras respostas, você pode considerar se é importante fazer uma atualização atômica.

No meu servidor FreeBSD, eu faço isso através de dois mecanismos:

  • Versão todos os meus recursos estáticos. (Por exemplo, http://static.example.com/images/logo.1.png ou http://static.example.com/style/main.3.css). Isso me permite svn update o site estático diretamente antes de atualizar o site dinâmico, sem me preocupar com os usuários vendo novos arquivos em páginas antigas.

  • Versão de todo o site dinâmico. No meu caso, tenho a raiz do meu documento apontando para um link simbólico. Minha estratégia é instalar a nova versão da produção e, em seguida, com um único comando Push it live. .g. algo assim:

    cp -Rp www.site1.com.1 www.site1.com.2 (ou svn checkout)

    svn update site1.com.2 (pode precisar de um svn switch primeiro)

    ln -sf site1.com.2 www.site1.com (mover atomicamente as alterações para produção)

Isso garante que nenhum dos meus usuários acabe vendo uma página incompleta. Eles verão a versão antiga, se ainda estiver em seu cache, ou a nova.

Essa estratégia só funciona bem se você não estiver misturando o conteúdo enviado pelo usuário ao seu site dinâmico.

1
JasonBirch

Usamos ant's tarefa scp , com o seletor modificado . Isso significa que você acabou de atualizar os arquivos que foram alterados desde o upload anterior. Infelizmente, o seletor modificado parece ter sido projetado apenas para uso pessoal, não compartilhando com os membros da equipe. O arquivo cache.properties possui nomes de caminho para o diretório de trabalho do usuário. Escrevemos vários alvos ant para massagear o arquivo cache.properties em um formato que pode ser compartilhado entre os desenvolvedores e depois massageado de volta no formato que o ant precisa. O formato também varia entre um ambiente Windows e um ambiente GNU/Linux.

0
Don Kirkby

Não é o ponto principal de usar o controle de versão que você não precisa se preocupar em fazer backup do site antes de enviar uma atualização?

Se for feito corretamente, um _svn update_ (ou equivalente) deve ser suficiente e, se for um erro, reverta-o para um commit anterior? É o que fazemos de qualquer maneira. Confirme todas as alterações, _svn update_ no servidor de temporariedade, se estiver tudo OK, _svn update_ no servidor ativo.

0
Mark Henderson