문제

PHP에서 새로운 프로젝트를 시작했으며 PHP 배포를위한 선호 전략에 대해 다른 개발자로부터 피드백을 받고 싶습니다. 일단 변경되면 개발 또는 프로덕션 서버로 빠르게 마이그레이션 할 수 있도록 물건을 약간 자동화하고 싶습니다.

루비와 함께 Capistrano와 기본 쉘 스크립팅을 사용한 배포에 대한 경험이 있습니다.

내가 스스로 머리를 먼저 다이빙하기 전에 다른 사람들이 자신의 프로젝트에서 어떻게 접근했는지 듣는 것이 좋을 것입니다.

추가 정보

현재 개발자는 사이트의 로컬 설치 작업을 수행하고 Subversion Repository에 대한 변경 사항을 충족시킵니다. 초기 배포는 SVN에서 태그 릴리스를 내보내고이를 서버에 업로드하여 작성됩니다.

변경된 파일을 수동으로 업로드하여 추가 변경 사항은 일반적으로 단편적입니다.

도움이 되었습니까?

해결책

PHP의 경우 SVN phing 빌드 스크립트는 갈 길입니다. phing은 비슷합니다 개미 그러나 PHP로 작성되었으므로 PHP 개발자가 필요에 맞게 훨씬 쉽게 수정할 수 있습니다.

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

  • 모든 사람이 직장에서 동일한 로컬 서버에서 발전하고 있으며 모든 개발자는 자신의 컴퓨터에 집으로 돌아가는 체크 아웃이 있습니다.
  • 트리거 트리거 스테이징 서버를 업데이트하는 커미트 후크를 트리거합니다.
  • 통과하면 스테이징 서버에서 테스트가 진행됩니다. 계속하십시오.
  • Phing 빌드 스크립트가 실행되었습니다.
  • 생산 서버를 중단하고 도메인을 "건설 중"페이지로 전환합니다.
  • 생산 체크 아웃에서 SVN 업데이트를 실행합니다
  • 스키마 델타 스크립트를 실행합니다
  • 테스트를 실행합니다
  • 테스트가 실패한 경우 - 롤백 스크립트를 실행하십시오
  • 테스트가 통과되면 서버는 생산 체크 아웃으로 돌아갑니다.

또한 있습니다 phpundercontrol, 지속적인 통합 서버입니다. 나는 웹 프로젝트가 솔직히 말하는 것이 매우 유용하다는 것을 알지 못했습니다.

다른 팁

현재 PHP를 배포하고 있습니다 git 사용. 간단한 git 푸시 생산만으로도 GIT의 최신 사본으로 제작 서버를 업데이트하는 데 필요한 전부입니다. Git이 Diff 만 보낼만큼 충분히 똑똑하기 때문에 전체 프로젝트를 다시는 아니기 때문에 쉽고 빠릅니다. 또한 하드웨어 고장의 경우 웹 서버에서 저장소의 중복 사본을 유지하는 데 도움이됩니다 (Github로 안전하기 위해 푸시합니다).

우리는 사용 webistrano, Capistrano의 웹 프론트 엔드이며, 매우 만족합니다.

Webistrano는 SVN, GIT 등의 다단계의 다중 환경 배치를 허용합니다. 내장 롤백 지원, Web, DB, App 등과 같은 별도의 서버 역할을 지원하고 동시에 배포합니다. 스테이지 별과 같은 여러 레벨에서 구성 매개 변수를 무시하고 선택적으로 우편으로 보내는 모든 배포 결과를 기록 할 수 있습니다.

Capistrano와 Webistrano는 루비 응용 프로그램이지만 배포 '레시피'의 구문은 모든 PHP 프로그래머에게 쉽고 강력합니다. 원래 Capistrano는 Ruby on Rails 프로젝트를 위해 지어졌지만 PHP 프로젝트를 쉽게 수용 할 수 있습니다.

일단 구성되면 스테이징 버전을 배포하는 테스터와 같은 비 프로그래머가 사용하기에 쉽습니다.

가능한 가장 빠른 배포를 제공하기 위해 설치했습니다 FAST_REMOTE_CACHE 원격 서버에서 SVN Working-Copy 캐시를 업데이트 한 다음 결과를 하드 링크하는 메소드.

나는 사용한다 아파치 개미 다른 대상 (Dev, QA 및 Live)에 배포합니다. ANT는 Java 배포를 위해 작동하도록 설계되었지만 임의의 파일을 배포하는 데 매우 유용한 일반적인 사례 솔루션을 제공합니다.

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

예를 들어, Dev, QA 및 Live에 대한 대상이 있는데, 각각은 CVS 서버에서 최신 헤드 개정을 확인하는 CVSBuild 대상에 의존하고 적절한 파일을 빌드 디렉토리 (Fileset Tag 사용)에 복사 한 다음 (파일 세트 태그를 사용) 복사합니다. Rsyncs 빌드 디렉토리를 적절한 서버로 향합니다. 배우는 몇 가지 단점이 있으며 학습 곡선은 완전히 평평하지는 않지만 몇 년 동안 문제없이 몇 년 동안 이런 식으로 해왔으므로 다른 답변이 궁금하지만 귀하의 상황에 대해 추천 할 것입니다. 이 스레드를 참조하십시오.

나는 git을 사용하여 수동으로 물건을한다. 개발을위한 하나의 저장소 git push --mirror'공개 리포지토리에 대한 Ed는 라이브 서버가 세 번째로 가져온 세 번째 저장소입니다. 이 부분은 자신의 설정과 동일하다고 생각합니다.

가장 큰 차이점은 내가 작업중 인 거의 모든 변화에 분기를 사용한다는 것입니다 (지금은 약 5 명을 얻었습니다). 다른 지점 병합을 제외하고 마스터 브랜치는 직접 변경되지 않습니다.

마스터 브랜치에서 직접 라이브 서버를 실행하고 다른 지점으로 끝나고 병합 할 준비가되면 서버를 해당 브랜치로 한동안 뒤집습니다. 깨지면 마스터에게 다시 넣는 데 몇 초가 걸립니다. 작동하면 마스터로 병합되고 라이브 코드가 업데이트됩니다. 나는 SVN에서 이것의 비유가 두 개의 작업 사본을 가지고 있으며 Symlink를 통해 라이브 사본을 가리키는 것이라고 생각합니다.

알아요 phing 지금 몇 번 언급되었지만 운이 좋았습니다. phpundercontrol. 우리를 위해 우리는

  1. 지역 기계에 지점의 개별 사본을 확인하십시오
  2. 가지를 테스트 한 다음 트렁크로 병합합니다
  3. Commits to Trunk는 PhpunderControl에 의해 자동으로 구축되며 테스트를 실행하고 모든 문서를 작성하고 데이터베이스 DELTAS를 적용합니다.
  4. 트렁크는 품질 테스트를 통해 실행되고 안정적인 지점으로 합병됩니다.
  5. 다시, PhpunderControl은 자동으로 안정적인 구축, 테스트를 실행하며 Documenation을 생성하고 데이터베이스를 업데이트합니다.
  6. 생산으로 추진할 준비가되면 생산을 백업하고 데이터베이스를 업데이트 한 다음 파일을 푸시하는 RSYNC 스크립트를 실행합니다. RSYNC 명령은 손으로 호출되므로 누군가가 승진을보고 있는지 확인합니다.

집에서 만든 배포 스크립트의 대안은 서비스를 제공하는 플랫폼으로 배포하여 많은 작업을 추상화하는 것입니다. PAAS는 일반적으로 자체 코드 배포 도구뿐만 아니라 스케일링, 결함 장애 (예 : 하드웨어가 실패 할 때 내려 가지 않음) 및 일반적으로 모니터링, 로그 점검 등을위한 훌륭한 툴킷을 제공합니다. 시간이 지남에 따라 최신 상태로 유지되는 잘 알려진 좋은 구성 (두통이 적음).

내가 추천 할 파아는 dotcloud, PHP 외에도 (PHP QuickStart를 참조하십시오) MySQL, MongoDB 및 전체 추가 서비스를 배포 할 수도 있습니다. 또한 제로 다운 타임 배포, 인스턴트 롤백, SSL 및 WebSocket에 대한 완전한 지원 등과 같은 좋은 케이크가 있으며 항상 좋은 무료 계층이 있습니다 :)

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

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

솔로몬

저장소에서 프로덕션 서버로 자동으로 맹목적으로 변경하는 것은 위험한 소리로 들립니다. Commited Code에 회귀 버그가 포함되어 있으므로 생산 응용 프로그램에 화려하게되면 어떻게됩니까?

그러나 PHP를위한 지속적인 통합 시스템을 원한다면 phing PHP를위한 최상의 선택입니다. 그래도 EG SCP의 수동 방법을 사용하기 때문에 직접 테스트하지 않았습니다.

나는 파티에 늦었지만 우리의 방법을 공유 할 것이라고 생각했습니다. 우리는 Phing을 사용합니다 Phingistrano, 사전 구축 된 빌드 파일을 통해 phing에 capistrano와 같은 기능을 제공합니다. 매우 시원하지만 현재 Git을 사용하는 경우에만 작동합니다.

서버에 SVN 릴리스 브랜치의 작업 사본이 있습니다. SVN 업데이트 명령을 발행하는 것만 큼 쉬운 사이트 (스키마 변경이 없을 때) 사이트 업데이트는 쉽습니다. 사이트를 오프라인으로 가져갈 필요조차 없습니다.

XML 구성 파일의 통증을 견딜 수 있다면 Phing이 가장 좋은 방법 일 것입니다. Symfony 프레임 워크에는 자체 레이크 포트 (Pake)가 있으며, 이는 상당히 잘 작동하지만 나머지 Symfony와는 다소 단단히 연결되어 있습니다 (아마도 분리 할 수는 있지만).

또 다른 옵션은 Capistrano를 사용하는 것입니다. 분명히 그것은 Ruby와 마찬가지로 PHP와 통합되지는 않지만 여전히 많은 것을 위해 사용할 수 있습니다.

마지막으로, 항상 쉘 스크립트를 작성할 수 있습니다. 지금까지 그것이 내가 한 일입니다.

http://controltier.org/wiki/main_page

멀티 서버 배포 및 유지 보수에 사용할 것입니다.

1 년 늦었지만 ... 제 경우에는 배포가 자동이 아닙니다. 코드를 배포하고 데이터베이스 마이그레이션 스크립트를 자동으로 실행하는 것이 위험하다고 생각합니다.

대신, Subversion Hooks는 테스트/스테이징 서버에만 배포하는 데 사용됩니다. 코드는 반복이 끝날 때 생산에 배치되어 테스트를 실행 한 후 작업이 작동하는지 확인합니다. 배포 자체의 경우 파일을 전송하는 데 rsync를 사용하는 맞춤형 MakeFile을 사용합니다. MakeFile은 원격 서버, 일시 정지/이력서 웹 및 데이터베이스 서버에서 마이그레이션 스크립트를 실행할 수도 있습니다.

저의 작업에서 나 자신과 우리 팀은 Capistrano 배포를위한 Phing 지향 교체품을 개발했으며 PHPUnit 테스트, PHPC 및 PHPDocumentor와 같은 Phing에서 사용 가능한 일부 제품을 통합했습니다. 우리는 그것을 git의 하위 모듈로 프로젝트에 추가 할 수있는 git repo로 만들었고 매우 잘 작동합니다. 나는 그것을 소수의 프로젝트에 첨부했으며 여러 환경 (스테이징, 테스트, 생산 등)의 모든 프로젝트에서 쉽게 작동하게 할 수있을 정도로 모듈 식입니다.

Phing 빌드 스크립트를 사용하면 명령 줄에서 수동으로 실행할 수 있으며 Hudson 및 Jenkins CI와 함께 빌드/배포 루틴을 자동화하는 데 성공했습니다.

Repo가 아직 공개되지 않기 때문에 지금 링크를 게시 할 수는 없지만 때때로 곧 오픈 소스를 보게 될 것이라고 들었습니다. 관심이 있거나 있거나 있으면 저에게 연락하십시오. Phing 및 Git을 사용하여 배포를 자동화하는 데 질문이 있습니다.

SVN 배포 방식이별로 좋지 않은 것 같습니다. 왜냐하면:

전 세계의 SVN 액세스를 열어야합니다.

프로덕션 웹 서버에 많은 .SVN이 있습니다

Branch +를 생성하는 Phing은 모든 JS/CSS + 교체 단계 구성 + SSH 업로드를 모든 WWW 서버에 결합하는 것이 더 나은 방법이라고 생각합니다.

SSH에서 10 www 서버 및 SVN UP도 문제가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top