2008-10-13 5 views
17

나는 Linux/PHP 웹 사이트의 뒤에서 실행되는 여러 배치 프로세스를 가지고 있습니다. 그들은 숫자와 복잡성이 커지기 시작 했으므로 소량의 프로세스를 필요로합니다.프로덕션에 도구 및 스크립트를 배포하는 모범 사례?

내 소스 트리에는 개발과 함께 배포되었지만 배포가 염두에 둔 cpp 파일과 스크립트가 많이 있습니다. 모든 실행 파일을 컴파일 한 후에는 여러 스크립트와 바이너리를 시스템 클러스터에 넣어야합니다. 다른 시스템은 일괄 처리를 위해 다른 실행 파일, 스크립트 및 구성 파일이 필요합니다. 나는 또한 모든 기계에 속한 필자가 작성한 몇 가지 도구가 있습니다. 현재이 배포 프로세스는 수동이며 오류가 발생하기 쉽습니다.

나는 원본 트리의 루트에서 실행되는 스크립트로 끝나고 모든 컴퓨터에 필요한 모든 작은 트리를 빌드하는 것으로 추측하고 있습니다. 그런 다음 해당 컴퓨터로 rsync 할 것입니다. 하지만 다른 사람들이 이런 유형의 문제를 어떻게 관리하고 있는지 궁금합니다. 어떤 아이디어?

+0

와우 (Wow) 7 년 후 ... 이제는 수많은 응용 프로그램 릴리스 자동화 도구가 있습니다. 다음은 더 많은 것을 배우기위한 훌륭한 시작 자료입니다 : https://en.wikipedia.org/wiki/Application_release_automation –

답변

2

배포판에서 사용하는 형식으로 패키지를 만듭니다. 데비안 패키지 (.deb). 이것들은 각 머신에 복사되어 수동으로 설치되거나, 자신의 저장소를 설정하여 소스 목록에 추가 할 수 있습니다.

패키지는 포함 된 스크립트가 각 호스트에서 실행해야하는 스크립트에 따라 각 호스트마다 다른 구성 파일을 참조하도록 설정해야합니다.

모두 묶어서 만들려면 다른 패키지 각각에 의존하는 메타 패키지를 만들면됩니다. 그렇게하면 새 서버를 설치할 때 하나의 메타 패키지를 설치하고 다른 패키지는 종속성으로 가져옵니다.

이 과정은 조금 복잡하게 들리지만 배포 할 스크립트와 호스트가 많으면 장기적으로 효과가 있습니다.

1

PHP 스크립트와 Apache 구성을 여러 고객에게 자주 제공해야합니다. 그들은 모두 데비안 리눅스를 실행하기 때문에 내 서버에 데비안 패키지 리포지토리를 설치했습니다. 고객이해야 할 일은 모두 apt-get upgrade이고 최신 버전을 얻는 것입니다.

3

cfengine이 상황에 맞는 도구인지 확인하려면 cfengine tutorial을 확인하십시오. 작은 웹 사이트에서는 다소 복잡 할 수 있습니다. 그러나 앞으로 더 많은 컴퓨터와 구성이 필요할 경우 cfengine 등을 사용하게 될 것입니다.

0

가장 먼저해야 할 일은 시간이 지남에 따라 이러한 스크립트의 변경 사항을 추적 할 수 있도록 이러한 모든 스크립트를 소스 제어 저장소 (svn 또는 git이 좋음)로 가져 오는 것입니다.

루비에 관심이 있다면 Capistrano을 확인하십시오. 클러스터에있는 여러 시스템에 항목을 배치하는 것이 적합하며 설정하기가 쉽습니다. 버전 제어 시스템에서 직접 파일을 읽을 수 있습니다.

1

Puppet은이 상황에서 사용할 수있는 또 다른 도구입니다. cfengine과 유사합니다. 원하는 배포 모델을 만들고 Puppet은 환경을이 상태로 만드는 방법을 보여줍니다.

19

여기에는 몇 가지 도구 범주가 있습니다. 어떤 사람들은이 범주의 도구를 조합하여 사용합니다. 때로는 Puppet과 Capistrano를 모두 사용합니다. 자세한 내용은 Puppet or Capistrano - Use the Right Tool for the Job을 참조하십시오.

스크립팅 응용 프로그램 배포하기위한 도구 :이 카테고리의 도구를 사용하여 일반적인 패턴이 자주 메이크 파일과 유사한 명령 세트, 스크립트 및/또는 설정 파일을 만들 수 있다는 것입니다

을하고, 도구는 제작 상자로 ssh를 보내고 소스를 체크 아웃하고 필요한 다른 단계를 실행합니다.

이 영역의 도구에는 일반적으로 이전 버전으로 롤백 할 수있는 기능이 있습니다. 따라서 릴리스/디렉토리에 대한 소스를 확인하고 모두 잘 수행되면 "현재"에서 "릴리스 /"로의 심볼릭 링크를 만듭니다. 문제가있는 경우 "현재"를 제거하고 이전 릴리스/디렉토리에 링크하는 명령을 실행하여 이전 버전으로 되돌릴 수 있습니다.

  • Capistrano은 레일스 커뮤니티에서 왔지만 범용입니다. Capistrano 사용자는 Capistrano의 배포 방법 집합 인 deprec에 관심이있을 수 있습니다.
  • Vlad the Deployer은 Rails 커뮤니티의 카피 스트라 노 (Capistrano)의 대안입니다.
  • 쉘 스크립트 나 Makefile을 직접 작성하십시오. 생산 상자에 파일을 가져 오는

옵션 : 소스에서

  • 직접 체크 아웃. 제작 상자에 개발 도구, 특히 소스 코드 관리 도구가없는 경우 항상 가능한 것은 아닙니다.
  • 소스를 로컬에서 체크 아웃 한 다음 타르거나 압축 해제하십시오. tarball을 복사하려면 scp 또는 rsync를 사용하십시오. 압축 된 타르볼로 시간/대역폭을 절약 할 수있는 Amazon EC2 배포 환경에 선호되는 경우가 있습니다.
  • 소스를 로컬에서 체크 아웃 한 다음 프로덕션 상자로 rsync합니다.

포장 도구

앱 파일이 포함 된 패키지를 생성하기 위해 OS의 포장 시스템을 사용. 종속물로 필요한 다른 패키지가있는 마스터 패키지를 만듭니다. 예를 들어, RubyWorks 시스템이 레일 스택과 샘플 애플리케이션을 배치하는 데 사용됩니다. 그런 다음 apt, yum/rpm, Windows msi 등을 사용하여 주어진 버전을 배포하는 데 문제가 있습니다. 롤백에는 이전 버전을 제거하고 다시 설치하는 작업이 포함됩니다. 이 도구는 특히 오히려 애플 리케이션을 유지/배포하는 일반적인 문제를 웹 응용 프로그램을 배포하는 문제를 대상으로하지 않지만

시스템의 설정을 앱/CONFIGS 설치 및 유지 보수 목표로

일반 도구/일련의 서버 또는 회사 전체의 워크 스테이션을 구성합니다. 웹 개발자보다 시스템 관리자를 대상으로하고 있지만 유용하다고 생각할 수도 있습니다.

  • Cfengine은이 카테고리의 도구입니다.
  • Puppet은 Cfengine을 개선하는 것을 목표로합니다. 그것은 학습 곡선을 가지고 있지만 많은 사람들이 configs를 수행하는 방법을 알아내는 데 가치가 있음을 알게됩니다. 일단 당신이 그것을 가지면, 각 상자는 중앙 서버를 주기적으로 검사하고 모든 것이 최신인지 확인합니다. 다른 사람이 파일을 편집하거나 권한을 변경하면이를 감지하여 수정합니다.따라서 위의 배치 도구와 달리 Puppet은 파일을 올바른 위치에 배치 할뿐만 아니라 파일을 그대로 유지합니다.
  • Chef은 비슷한 접근 방식으로 퍼핏보다 약간 젊습니다.
  • Smartfrog은이 카테고리의 다른 도구입니다.
  • Ansible 일반 YAML 파일을 작동하고는이 범주에서 이들의 비교 및 ​​더 많은 도구

를 관리하는 서버에서 실행되는 에이전트를 필요로하지 않습니다, 위키 피 디아 기사, Comparison of open source configuration management software를 참조하십시오.

+0

유익하고 유익하고 잘 쓰여 있습니다. 그냥 메모 : 몇 년이 지났고 지금도 꼭두각시는 Windows를 않습니다. – Luke404