[php] 선호하는 PHP 배포 전략은 무엇입니까? [닫은]

PHP로 새 프로젝트를 시작하고 있으며 PHP 배포 전략에 대해 다른 개발자들로부터 피드백을 받고 싶습니다. 변경 사항이 커밋되면 개발 또는 프로덕션 서버로 신속하게 마이그레이션 할 수 있도록 작업을 약간 자동화하고 싶습니다.

Ruby와 함께 Capistrano를 사용한 배포 및 일부 기본 셸 스크립팅 경험이 있습니다.

내가 먼저 머리를 치기 전에 다른 사람들이 프로젝트에서 어떻게 접근했는지 들어 보는 것이 좋을 것입니다.

추가 정보

현재 개발자는 사이트의 로컬 설치 작업을 수행하고 하위 버전 저장소에 변경 사항을 커밋합니다. svn에서 태그가 지정된 릴리스를 내보내고 서버에 업로드하여 초기 배포를 수행합니다.

추가 된 변경은 일반적으로 변경된 파일을 수동으로 업로드하여 부분적으로 이루어집니다.



답변

PHP의 경우 Phing 빌드 스크립트가있는 SVN을 사용하는 것이 좋습니다 . Phing은 ANT 와 비슷 하지만 PHP로 작성 되었으므로 PHP 개발자가 자신의 요구에 맞게 수정하기가 훨씬 쉽습니다.

우리의 배포 루틴은 다음과 같습니다.

  • 모든 사람은 직장에서 동일한 로컬 서버에서 개발하며 모든 개발자는 자신의 컴퓨터에서 집으로 체크 아웃 할 수 있습니다.
  • 커밋은 준비 서버를 업데이트하는 커밋 후 후크를 트리거합니다.
  • 테스트가 통과되면 스테이징 서버에서 실행됩니다. 계속하십시오.
  • Phing 빌드 스크립트가 실행되었습니다.
  • 도메인을 “공사 중”페이지로 전환하여 프로덕션 서버를 중단시킵니다.
  • 생산 체크 아웃시 SVN 업데이트 실행
  • 스키마 델타 스크립트를 실행합니다
  • 테스트 실행
  • 테스트에 실패한 경우 롤백 스크립트를 실행하십시오.
  • 테스트가 통과되면 서버는 프로덕션 체크 아웃으로 다시 라우팅됩니다.

Continuous Integration 서버 인 phpUnderControl 도 있습니다 . 나는 웹 프로젝트가 정직하다는 것이 그다지 유용하지 않다는 것을 알았습니다.


답변

현재 Git을 사용하여 PHP 배포하고 있습니다. 간단한 git push 프로덕션이 Git의 최신 사본으로 프로덕션 서버를 업데이트하는 데 필요한 전부입니다. Git이 전체 프로젝트가 아닌 diff 만 보낼 수있을 정도로 똑똑하기 때문에 쉽고 빠릅니다. 또한 하드웨어 오류가 발생할 경우 웹 서버에 리포지토리의 중복 복사본을 유지하는 데 도움이됩니다 (물론 안전을 위해 GitHub로 푸시).


답변

우리는 Capistrano를위한 웹 프론트 엔드 인 Webistrano를 사용 하며 매우 만족합니다.

Webistrano는 SVN, GIT 등의 다단계, 다중 환경 배포를 지원합니다. 롤백 지원 기능이 내장되어 있으며 웹, db, 앱 등과 같은 별도의 서버 역할을 지원하며 병렬로 배포됩니다. 스테이지와 같은 여러 레벨에서 구성 매개 변수를 대체하고 모든 배치 결과를 로그 (선택적으로 메일 발송) 할 수 있습니다.

Capistrano와 Webistrano는 Ruby 애플리케이션이지만, 배포 ‘레시피’의 구문은 모든 PHP 프로그래머가 이해할 수있을만큼 쉽고 강력합니다. 원래 Capistrano는 Ruby on Rails 프로젝트를 위해 제작되었지만 PHP 프로젝트를 쉽게 수용 할 수 있습니다.

일단 구성되면 스테이징 버전을 배포하는 테스터와 같은 프로그래머가 아닌 사람도 사용할 수 있습니다.

가장 빠른 배치를 제공하기 위해 원격 서버에서 svn 작업 복사 캐시를 업데이트 한 다음 결과를 하드 링크로 연결하는 fast_remote_cache 메소드를 설치했습니다 .


답변

Apache Ant 를 사용 하여 다른 대상 (dev, QA 및 live)에 배포합니다. Ant는 Java 배치를 위해 작동하도록 설계되었지만 임의의 파일을 배치하는 데 유용한 유용한 일반 사례 솔루션을 제공합니다.

build.xml 파일의 구문은 배우기 매우 쉽습니다. 명령 줄에서 ant 프로그램을 호출 할 때 실행되는 다른 대상 및 해당 종속성을 정의합니다.

예를 들어 dev, QA 및 live에 대한 대상이 있습니다. 각 대상은 CVS 서버에서 최신 헤드 개정을 확인하고 해당 파일을 빌드 디렉토리에 복사합니다 (fileset 태그 사용) .cvsbuild 대상에 따라 다릅니다. 빌드 디렉토리를 적절한 서버로 rsync합니다. 배워야 할 몇 가지 단점이 있으며 학습 곡선은 완전히 평평하지는 않지만 수년간 문제 없이이 방법을 사용 해 왔으므로 상황에 따라 추천하고 싶습니다. 다른 답변은 궁금합니다. 이 스레드에서 볼 수 있습니다.


답변

Git을 사용하여 수동으로 작업합니다. 개발을위한 하나의 저장소 ( git push --mirror공개 저장소로 가져오고 라이브 서버는 그 중 세 번째 저장소입니다). 내가 생각하는이 부분은 자신의 설정과 동일합니다.

가장 큰 차이점은 내가하고있는 거의 모든 변경 사항에 대해 지점을 사용한다는 것입니다 (지금은 약 5가 있습니다). 마스터 브랜치는 다른 브랜치를 병합하는 것을 제외하고 직접 변경되지 않습니다.

마스터 지점에서 직접 라이브 서버를 실행하고 다른 지점으로 작업을 마치고 병합 할 준비가되면 서버를 해당 지점으로 잠시 동안 뒤집습니다. 고장이 나면 다시 마스터로 되 돌리는 데 몇 초가 걸립니다. 작동하면 마스터로 병합되고 라이브 코드가 업데이트됩니다. SVN에서 이것의 비유는 두 개의 작업 사본이 있고 심볼릭 링크를 통해 실제 사본을 가리키고 있다고 가정합니다.


답변

나는 Phing 이 몇 번 언급되었다는 것을 알고 있지만 phpUnderControl 과 함께 행운을 빕니다 . 우리를 위해

  1. 로컬 머신에 대한 개별 브랜치 사본 확인
  2. 지점을 테스트 한 후 트렁크에 병합
  3. 트렁크에 대한 커밋은 phpUnderControl에 의해 자동으로 빌드되고, 테스트를 실행하고 모든 문서를 작성하며 데이터베이스 델타를 적용합니다
  4. 트렁크는 품질 테스트를 거친 후 안정적인 지점으로 통합
  5. phpUnderControl은 자동으로 Stable을 빌드하고 테스트를 실행하며 문서를 생성하고 데이터베이스를 업데이트합니다.
  6. 프로덕션으로 푸시 할 준비가되면 프로덕션을 백업하고 데이터베이스를 업데이트 한 다음 파일을 푸시하는 rsync 스크립트를 실행합니다. rsync 명령은 손으로 호출되므로 누군가 프로모션을보고 있는지 확인할 수 있습니다.

답변

집에서 만든 배포 스크립트의 대안은 많은 작업을 추상화하는 서비스 형 플랫폼에 배포하는 것입니다. PaaS는 일반적으로 자체 코드 배포 도구와 스케일링, 내결함성 (예 : 하드웨어 장애시 다운되지 않음), 일반적으로 모니터링, 로그 확인 등을위한 훌륭한 툴킷을 제공합니다. 좋은 구성으로 시간이 지남에 따라 최신 상태로 유지됩니다 (두 번 덜 골치 아파).

내가 추천하는 PaaS는 dotCloud 이며 PHP 외에도 ( PHP 빠른 시작 참조 ) MySQL, MongoDB 및 추가 서비스를 배포 할 수 있습니다. 또한 다운 타임없는 배포, 즉각적인 롤백, SSL 및 웹 소켓에 대한 완벽한 지원 등과 같은 유용한 기능이 있습니다. 또한 항상 좋은 프리 티어가 있습니다. 🙂

물론 거기에서 일한 후 약간 편견이 있습니다! dotCloud 외에도 체크 아웃 할 가치가있는 다른 옵션은 Pagodabox 및 Orchestra (현재 Engine Yard의 일부)입니다.

도움이 되었기를 바랍니다!

솔로몬