라이브 PHP 웹 애플리케이션 배포

라이브 PHP 웹 애플리케이션 배포

라이브 PHP 배포를 위해 Bamboo를 설정하려고 합니다(Jenkins에도 동일한 원칙이 적용됨).

Bamboo 앱에서 버튼을 눌러 실시간으로 게시할 수 있기를 원합니다.

그러나 세션이 계속 활성 상태인지 확인하고 싶습니다. 즉, 네트워크 사용자는 가동 중지 시간을 경험하지 않습니다. 뭔가 잘못되면 회복력을 유지하려고 노력할 것입니다.

이를 달성하는 방법에 대한 높은 수준의 개념에 대한 제안이 있습니까?

내 생각은 아래와 같이 작동 할 수 있다는 것입니다

실행 중인 웹 서버 2개

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

전략

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?)

나는 이런 일이 여러 번 일어났다고 확신합니다.

더 나은 전략이 있는지 궁금하십니까?

답변1

이건 어때:

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

Two backend webservers.

  1. 풀에서 웹 서버를 제거합니다(Haproxy를 사용하면 관리 소켓을 통해 수행됩니다. 참조).이 문제)
  2. 이 서버의 세션이 끝날 때까지 기다리십시오.
  3. 비활성화된 서버에 프로젝트 파일을 푸시하고 압축을 풀고 배포합니다.
  4. 로드 밸런서 없이 테스트되었습니다. (즉, 로컬호스트)
  5. 서버를 다시 활성화합니다.
  6. 두 번째 서버에 대해 1단계를 반복합니다.

서버를 비활성화하면 현재 모든 연결이 만료될 때까지 기다린 후 서버가 유지 관리 모드로 전환됩니다. 물론 연결이 반드시 "세션"과 동일하지는 않습니다. 따라서 세션을 처리하는 방법에 따라 두 서버 간 세션 복제가 필요할 수도 있고 별도의 세션 데이터베이스(새 세션 데이터베이스)가 필요할 수도 있습니다.단일 실패 지점) 두 서버 모두에 의존합니다.

이렇게 하면 사용자에게 가동 중지 시간이 발생하지 않습니다. 또한 로드 밸런싱의 몇 가지 추가 이점도 얻을 수 있습니다.

불행하게도 HAproxy를 이런 방식으로 설정하는 것은 어려울 수 있습니다.

관련 정보