문제

내가 들었어요"구 응용 프로그램을 배포할 때의"하는 소리는 훨씬 더 간단/더 많은 신뢰할 수 있는 업로드하기 보다는 개별 변경된 파일을 서버지만,I don't know where to begin.

나는 Zend Framework 응용 프로그램을 아래에있는 버전 제어(Subversion 저장소).조금 더 자세한 정보가 필요한 문제는"배포"내 응용 프로그램?나는 무엇을 해야 하는가 생기면"업로드"디렉토리는 내가 원하지 않을 덮어쓰시겠습니까?

호스팅 응용 프로그램을 통해 세 번째 파티를,그래서 나는 많이 알지 못한다 FTP.는 경우 이를 포함 로깅으로 서버 설명해 주시기 바랍니다.

도움이 되었습니까?

해결책

스테이징 서버에 대한 자동 배포 + 테스트 실행을 연속 통합이라고합니다. 아이디어는 테스트를 중단하는 무언가를 확인하면 즉시 알림을받습니다. PHP의 경우 조사를 원할 수도 있습니다 Xinc 또는 phpundercontrol

당신은 일반적으로 ~ 아니다 그래도 자동으로 프로덕션에 배포하고 싶습니다. 정상적인 일은 작업을 자동화하는 일부 스크립트를 작성하지만 여전히 수동으로 시작해야한다는 것입니다. 다음과 같은 프레임 워크를 사용할 수 있습니다 phing 또는 이것에 대한 다른 빌드 툴 (인기있는 선택은 Capistrano), 그러나 당신은 또한 몇 개의 쉘 스크립트를 함께 털어 낼 수 있습니다. 개인적으로 나는 후자를 선호합니다.

스크립트 자체는 응용 프로그램 및 설정에 따라 다른 작업을 수행 할 수 있지만 일반적인 프로세스는 다음과 같습니다.

  • SSH에서 프로덕션 서버. 나머지 명령은 SSH를 통해 프로덕션 서버에서 실행됩니다.
  • 운영 svn export svn://path/to/repository/tags/RELEASE_VERSION /usr/local/application/releases/TIMESTAMP
  • 스톱 서비스 (아파치, 데몬)
  • 운영 unlink /usr/local/application/current && ln -s /usr/local/application/releases/TIMESTAMP /usr/local/application/current
  • 운영 ln -s /usr/local/application/var /usr/local/application/releases/TIMESTAMP/var
  • 운영 /usr/local/application/current/scripts/migrate.php
  • 서비스를 시작하십시오

(신청서가 있다고 가정합니다 /usr/local/application/current)

다른 팁

자동 업데이트를 권장하지 않습니다. 단위 테스트 패스가 응용 프로그램이 100% 작동한다는 의미는 아닙니다. 누군가 새로운 장치 테스트없이 무작위 새 기능을 확인하고 기능이 작동하지 않으면 어떻게해야합니까? 기존 단위 테스트가 통과 될 수 있지만 기능은 어쨌든 깨질 수 있습니다. 사용자는 반쯤 다루는 것을 볼 수 있습니다. 체크인으로부터 자동 배치를 사용하면 무언가가 없어야 할 때 몇 시간 동안 알지 못할 수 있습니다.

어쨌든, 당신이 정말로 원한다면 자동 배포를하는 것은 그리 어렵지 않을 것입니다. 체크 후 후크가 필요하며 실제로 단계는 다음과 같습니다.

1) 최신 체크인에서 내보내기 2) 생산 서버로 내보내기 3) 새로 업로드 된 내보내기를 포장/구성

나는 항상 마지막 단계를 수동으로 수행했습니다. 일반적으로 SVN 내보내기, 지퍼, 업로드, 실직, 구성 및 마지막 두 단계 만 수행하여 수행하기 위해 몇 개의 BASH 명령을 사용하는 것만 큼 간단합니다. 그런 다음 루트 앱 디렉토리를 새 앱 디렉토리로 교체하여 이전 앱 디렉토리를 백업으로 유지하는 것이 좋습니다.

자동으로 실시되기 전에 오류를 잡을 수있는 능력에 확신이 있다면 해당 절차를 자동화하는 것을 볼 수 있습니다. 그래도 그것은 나에게 jibbly-jibblies를 준다.

다음은 파괴를 사용하여 웹 프로젝트를 배포하는 것에 대한 훌륭한 기사입니다. 많은 질문에 답변합니다.

http://athleticsnyc.com/blog/entry/on-using-subversion-for-web-projects

내 WebDev 회사에서 우리는 최근에 사용을 시작했습니다 webistrano, 인기있는 Capistrano 도구의 웹 GUI입니다.

우리는 중앙 집중식 인터페이스, 책임 성 (배포 된 버전), 이전 버전으로의 롤백 및 바람직하게는 무료로 사용하기 쉬운 빠른 배포 도구를 원했습니다. Capistrano는 Ruby on Rails 응용 프로그램을위한 배포 도구로 잘 알려져 있지만 주로 Rails 앱을 중앙 집중화하고 타겟팅하지는 않습니다. Webistrano는 GUI, 책임 성으로이를 향상시키고 PHP 배포에 대한 기본 지원을 추가합니다 ( 'Pure File'프로젝트 유형 사용).

Webistrano 자체는 개발 또는 스테이징 서버에 설치하는 Ruby on Rails 앱입니다. 각 웹 사이트에 대한 프로젝트를 추가합니다. 각 프로젝트에 Prod 및 Dev와 같은 단계를 추가합니다.

각 단계마다 배포 할 서버와 다른 설정을 가질 수 있습니다. Capistrano에게 무엇을 해야하는지 알려주는 루비 스크립트 인 '레시피'를 작성 (또는 수정)하십시오. 우리의 경우 방금 제공된 레시피를 사용하고 명령을 추가하여 언급 한 것처럼 공유 업로드에 심볼 링크를 만듭니다.

배포를 클릭하면 webistrano sshs가 원격 서버 (들)에 SVN을 클릭하고 코드의 SVN 체크 아웃 및 데이터베이스 마이그레이션, Symlinking 또는 이전 버전의 정리와 같은 다른 작업을 수행합니다. 물론이 모든 것이 조정 될 수 있습니다. 결국, 그것은 단순히 스크립트되어 있습니다.

우리는 그것에 매우 만족하지만, 특히 루비와 레일에 익숙하지 않았기 때문에 배우고 설립하는 데 며칠이 걸렸습니다. 그럼에도 불구하고, 나는 중소 기업에서 생산 사용을 강력히 추천 할 수 있습니다. 매우 신뢰할 수 있고 유연하며 초기 투자를 여러 번 저축했기 때문입니다. 배치 속도를 높이고 실수/사고를 줄임으로써.

이 종류의 것은 무엇이 당신을 부를 것이다"지속적인 통합".Atlassian 대나무(비용),선 허드슨(무료)및 크루즈 컨트롤(무료)는 모든 인기있는 옵션(기 위해서는 나의 설정)을 지원하는 이 라이브러리를 처리 출력(기 때문에 이 라이브러리 지원을 JUnit 출력).

배포는 물건으로 할 수 있는 게시물을 구축니다.다음과 같은 일부에서 다른 사람들이 스레드,나는 운동이 위대한 주의를 하기 전에 자동 배포에 체크에(그리고 테스트를 통과하).

Fredistrano를 확인하십시오. Capistrano 클론은 훌륭합니다 (Litle Bit Confusing Installing이지만 모든 것이 잘 진행됩니다)

http://code.google.com/p/fredistrano/

업로드를 처리하려면 클래식 솔루션은 실제 디렉토리를 메인 웹 스페이스에서 옮기고 신선한 버전 만 확인하여 (아래 스크립트에서하는 것처럼) Apache를 사용하여 다시 '별명'을 사용하는 것입니다. 웹 사이트의 일부로 배치하십시오.

Alias /uploads /home/user/uploads/

그러나 서버를 많이 제어하지 않으면 선택의 여지가 적습니다.

주어진 스크립트를 Dev/Live 사이트에 배포하는 데 사용하는 스크립트가 있습니다 (둘 다 같은 서버에서 실행).

#!/bin/sh

REV=2410
REVDIR=$REV.20090602-1027

REPOSITORY=svn+ssh://topbit@svn.example.com/var/svn/website.com/trunk
IMAGES=$REVDIR/php/i
STATIC1=$REVDIR/anothersite.co.uk

svn export --revision $REV  $REPOSITORY $REVDIR

mkdir -p $REVDIR/tmp/templates_c
chown -R username: $REVDIR
chmod -R 777       $REVDIR/tmp $REVDIR/php/cache/
chown -R nobody:   $REVDIR/tmp $REVDIR/php/cache/ $IMAGES
dos2unix $REVDIR/bin/*sh  $REVDIR/bin/*php
chmod 755 $REVDIR/bin/*sh $REVDIR/bin/*php

# chmod -x all the non-directories in images
find $IMAGES -type f -perm -a+x | xargs -r chmod --quiet -x
find $STATIC1 -type f -perm -a+x | xargs -r chmod --quiet -x

ls -l $IMAGES/* | grep -- "-x"

rm dev && ln -s $REVDIR dev

Revison 번호와 확인 된 디렉토리 이름에 사용되는 날짜/시간을 넣었습니다. 중간에있는 CHMOD는 또한 SRE가 이미지에 대한 권한을 전용 이미지 서버와 동성화하므로 괜찮습니다.

마지막으로 발생하는 것은 오래된 Symlink입니다 .../website/dev/는 새로 확인 된 디렉토리에 다시 표시됩니다. 그런 다음 Apache Config에는 Doc-Root의 .../웹 사이트/dev/htdocs/

일치하는 .../웹 사이트/라이브/htdocs/docroot도 있습니다. 다시 'Live'는 또 다른 심볼릭 링크입니다. 이것은 라이브 심볼 링크를 제거하고 Dev가 가리키는 것으로 바꾸는 다른 스크립트입니다.

#!/bin/sh
# remove live, and copy the dir pointed to by dev, to be the live symlink
rm live && cp -d dev live

나는 몇 개의 dats마다 새 버전의 사이트를 푸시하고 있으므로 하루에 여러 번 사용하고 싶지 않을 수도 있습니다 (내 APC 캐시는 몇 가지 버전의 사이트를 좋아하지 않을 것입니다). , 나는 이것이 내 자신의 배포에 매우 문제가 없다고 생각합니다.

3 년 후, 나는 배포 모범 사례에 대해 조금 배웠습니다. 나는 현재 Capistrano라는 도구를 사용하고 있으며 설정 및 사용이 쉽기 때문에 많은 기본값을 잘 처리합니다.

자동 배포 프로세스의 기본 사항은 다음과 같습니다.

  1. 코드는 제작 준비가되었으므로 릴리스 버전으로 태그가 지정됩니다. v1.0.0
  2. 배포 스크립트를 이미 구성했다고 가정하면 스크립트를 실행하여 방금 만든 태그를 지정합니다.
  3. 스크립트 SSH는 다음과 같은 디렉토리 구조가있는 프로덕션 서버로 끝납니다.

    /your-application
        /shared/
            /logs
            /uploads
        /releases/
            /20120917120000
            /20120918120000  <-- latest release of your app
                /app
                /config
                /public
                ...etc
        /current --> symlink to latest release
    
    Your Apache document root should be set to /your-application/current/public
    
  4. 이 스크립트는 현재 DateTime과 함께 Releases 디렉토리에 새 디렉토리를 만듭니다. 해당 디렉토리 내부에서 코드는 지정한 태그로 업데이트됩니다.

  5. 그런 다음 원래 Symlink가 제거되고 새 Symlink가 생성되어 최신 릴리스를 가리 킵니다.

릴리스 사이에 유지 해야하는 것은 공유 디렉토리에 있으며, Symlinks는 공유 디렉토리를 위해 생성됩니다.

응용 프로그램과 테스트가 얼마나 견고한 지에 따라 다릅니다.

내가 작업하는 곳에서 모든 것이 리포지토리에 체크인 된 후 검토 한 다음 출시됩니다.

저장소에서 자동 업데이트는 우리에게 똑똑하지 않을 것입니다. 때로는 다른 개발자가 나중에 버전을 가져와 변경 사항을 병합 할 수 있도록 체크인하므로 때때로 체크인합니다.

당신이 말하는 일을하기 위해서는 1 차 체크인 영역에서 개발자 간의 협력을 허용하기 위해 일종의 2 차 체크인 및 아웃이 필요합니다. 나는 그것에 대해 아무것도 모른다.

분기 및 기타 유사한 기능과 관련하여 처리 해야하는 문제도 있습니다.

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