Como atualizar um servidor web ao vivo?

5

Estou no processo de configuração de um servidor da web e fiquei imaginando qual seria o método de melhor prática para atualizar o site que ele contém. Estou ciente de que eu deveria ter algum tipo de servidor de 'teste' rodando em paralelo, para que as mudanças possam ser experimentadas antes de serem ativadas. Então, com que precisão o servidor de teste deve imitar a caixa de produção? Existe algum método conhecido de implantar facilmente as mesmas alterações na caixa de produção depois de testadas?

Eu realmente gostaria de ter um método infalível de testar e aplicar mudanças no site de produção e qualquer conselho a respeito disso é muito apreciado.

Plataforma:
Trabalhando em um servidor linux ubuntu. Executando mediawiki, wordpress e um servidor de email. Eu tenho acesso root para a caixa via ssh. Mediawiki e Wordpress ambos têm backends PHP e MySQL. O servidor de email também usa um banco de dados MySQL.

    
por radman 13.07.2010 / 00:28

3 respostas

5

Usamos uma série de máquinas virtuais, pelo menos uma para cada servidor cliente ao vivo, que é mantida em sincronia com as máquinas ao vivo (além de alguns dos dados serem copiados, por isso não estamos trabalhando com informações pessoais ou confidenciais ).

Qualquer série de alterações que devem ir a uma máquina de produção é reunida em um patch que consiste em quaisquer arquivos / scripts necessários e um script (um script de shell geralmente para um ambiente Unix-a-like, um arquivo em lote ou script vbs ou script powershell no Windows) que aplica esses arquivos / scripts adequadamente. Em seguida, pegamos a VM relevante, atualizamos seu (s) banco (s) de dados a partir de uma cópia da produção se a cópia da VM estiver muito desatualizada (lembrando-se de executar novamente os scripts SQL relevantes para limpar ou randomizar dados confidenciais) e instantâneo do mesmo nesse estado (os snapshots são suportados pelo VirtualBox e pela maioria dos produtos VMware, incluindo o "servidor vmware" gratuito e, provavelmente, a maioria das outras soluções de virtualização também). Em seguida, aplicamos o patch como faríamos ao servidor de produção executando o script de controle principal. Se houver erros ao aplicar as alterações, a VM será retrocedida para o instantâneo (o que leva, no máximo, algumas dezenas de segundos) para que o patch possa ser atualizado e testado novamente. Isso se repete conforme necessário até que o patch seja aplicado corretamente. Uma vez feito isso, alguns testadores são solicitados a tentar garantir que o novo material esteja funcionando e que outras coisas antigas não tenham sido quebradas (quanto tempo você gasta depende do escopo e da gravidade das mudanças e do seu nível de paranóia). Se forem encontrados problemas, o ciclo de retrocesso, edição e reaplicação será repetido até que tudo pareça bem. Uma vez que tudo parece bem, supondo que o tempo permita, um último ciclo de reversão-correção-teste é executado just-in-case. Uma vez feito isso, esperamos que você tenha um patch que possa ser aplicado ao ambiente de produção executando um único script com parâmetros apropriados (por exemplo, senhas relevantes, como credenciais de autenticação nas VMs de teste devem diferir daquelas nas máquinas de produção) e você pode ter certeza de que ela será aplicada de forma limpa e terá o efeito desejado sem (ou o menos possível) os indesejáveis.

Sempre faça backups novos antes de aplicar qualquer coisa significativa a um sistema de produção, independentemente de quanto tempo você tenha gasto testando a atualização, e sempre planeje pelo menos um pouco de tempo de inatividade durante o qual você pode manter a outra Os usuários saem e dão ao (s) sistema (s) atualizado (s) resultante (s) mais um teste de paranoia (e os revertem para o backup mais recente se algo der errado - se o ambiente de produção for virtualizado, o recurso de captura instantânea também pode ser útil aqui).

Como um processo geral, isso pode funcionar em qualquer ambiente.

    
por 13.07.2010 / 01:47
1

Use o capistrano ( o capistrano e o php guia )
   O ambiente de teste deve imitar a produção da melhor forma possível e ser independente (sem dados compartilhados, etc.).

    
por 13.07.2010 / 01:34
1

Isso realmente depende da sua definição de "ao vivo". por exemplo. Você quer dizer um servidor com 100% de tempo de atividade que não pode diminuir, ou apenas uma pergunta geral sobre a atualização de um site.

A coisa mais fácil que você pode fazer é simplesmente habilitar o acesso FTP à sua caixa / conta / armazenamento e se você tiver apenas pequenas alterações que não quebram nada, simplesmente sobrescreva o arquivo enquanto o site está ativo e então da próxima vez atualiza uma página, ele deve carregar o novo arquivo.

Se, no entanto, você estiver fazendo grandes alterações que quebrarão outros itens, você tem (IMHO) algumas opções:

  • Faça o acima, faça upload de página por página e espere que ninguém perceba / você faz isso rápido o suficiente.
  • Puxe o site para o modo off-line, faça as alterações e torne-o ativo novamente.
  • Faço o que eu faço - (embora não tenha sido responsável por atualizar sites HUGE),
    1. Altere a página de bloqueio de IP para uma atualização http por 5 segundos, referindo-se a si mesmo.
    2. Coloque um curinga nas restrições de IP.
    3. Envie as alterações.
    4. Remova o bloco de IPs.

Eu acho que funciona de forma eficiente e bem - Muitos usuários não estão cientes de qualquer tempo de inatividade durante a atualização. Se você estiver executando uma loja ou algo semelhante, provavelmente será uma boa ideia ser honesto. Na página de erro, escreva "Estamos fazendo atualizações no site, on-line em até dois minutos", etc.

Além disso, o acima está assumindo que você testou as mudanças e está funcionando bem - tudo o que você fará será algumas operações de arquivo que não levarão muito tempo.

    
por 13.07.2010 / 02:08