live PHP webapp deployment

3

Eu estou pensando em configurar o Bamboo para fazer implementações PHP ao vivo (os mesmos princípios podem ser aplicados ao Jenkins)

Eu gostaria de poder fazer lançamentos ao vivo com o apertar de um botão no aplicativo Bamboo.

No entanto, gostaria de garantir que as sessões permaneçam ativas. Ou seja o usuário da web não experimenta nenhum tempo de inatividade. Se houve um problema, ele tenta o melhor possível para ser resiliente.

Alguma recomendação para um conceito de alto nível sobre como conseguir isso?

Meus pensamentos são de que poderia funcionar algo como o seguinte

dois servidores da Web em execução

webapp-live -- port 80 public 
webapp-deploy -- port 81 private

Estratégia

1) Push project files onto server
2) /var/www/releases/web-app-tag-number.zip
3) unzip file
4) deploy to webapp-deploy
5) sanity checks i.e. webapp-deploy loads homepage ok
6) swap deploy with live - use symlink to re-point files?  (will this keep sessions alive?)

Tenho certeza de que esse tipo de coisa já foi feito várias vezes.

Perguntou se havia uma estratégia melhor?

    
por Robbo_UK 08.03.2017 / 16:23

1 resposta

2

Que tal isso:

1 public facing load balancer (e.g. HAproxy)

Two backend webservers.

  1. Remova um servidor da web do pool (com o Haproxy isso é feito via soquete de administrador. Consulte esta questão )
  2. Aguarde até que as sessões terminem nesse servidor.
  3. Envie, descompacte e implante arquivos de projeto para o servidor desativado.
  4. Teste sem passar pelo balanceador de carga. (isto é, localhost)
  5. Ativar novamente o servidor.
  6. Repita a partir do passo 1 com o segundo servidor.

"Desativando" o servidor coloca o servidor no modo de manutenção, depois de esperar que todas as conexões atuais expirem. Claro que uma conexão não é necessariamente igual a uma "sessão". Portanto, dependendo de como você lida com as sessões, pode ser necessário que haja alguma replicação de sessão entre os dois servidores ou um DB de sessão separado (um novo SPOF ) em que ambos os servidores confiam.

Dessa forma, seus usuários não terão nenhum tempo de inatividade. Além disso, você obtém o benefício adicional de algum balanceamento de carga.

Infelizmente, configurar o HAproxy dessa maneira pode ser uma dor.

    
por 14.03.2017 / 23:05