2012-02-24 6 views
1

이제 프로덕션 서버의 개인 저장소를 응용 프로그램의 www 폴더 (예 : /var/www/app.com/web/)로 초기화 한 다음 내 테스트 사이트 (예 : /var/www/test.com/web/app.com/)에 준비 저장소를 준비하고 마지막 단계에서 코드 작업을 위해 로컬로 복제합니다.프로덕션 서버의 개인 저장소 초기화

나는 그것을 올바르게 계획하고 있습니까?

나는 개인 저장소를 "자식 서버"를 설정하는 방법에 대한 자세한 내용을 초기화하기 위해이 자습서에 다음과 같은 오전 :

마지막 질문이 성공적인 Git Branching Model에 관한 튜토리얼 어디에서 적용 할 것인가? 주요 개인 저장소 (프로덕션 서버), 로컬 또는 혼합? 나는 그것을 완전히 읽지 않았다. 나는 그것을 최대한 빨리 할 것이다.

편집 :

  • 이 중요한 경우에, 나는 ISPConfig 구성을 실행하는 서버에 그렇게 노력하고 있어요.
  • "건강한"방법이 있다면 기꺼이 배워야합니다. 위에서 언급 한대로해야합니다.
http://www.howtoforge.com/the-perfect-subversion-server-debian-lenny-ispconfig-3

와 GIT 버전이 http://www.howtoforge.com/installing-subversion-and-configuring-access-through-different-protocols-on-ubuntu-11.10 내가 좀 마음

답변

5

내가 올바르게 계획하고 있습니까?

계단식 repos는 상당히 복잡하고 정상적이지 않습니다.

당신이 저지른 베어 게토 레포의 클라이언트/위성/아동을 체크 아웃하십시오.스테이징 및 프로덕션 설치는 특정 브랜치의 읽기 전용 체크 아웃이어야합니다. (거의 모든 git 질문에 대한 링크가 있으므로이 항목도 이제는 예외가 아닙니다) git-flow으로 설정하는 방법에 대한 통찰력을 줄 수 있습니다 귀하의 지점 및 따라서 체크 아웃 적절하게.

This tutorial

망할 놈의 서버 설정은 아마 당신이 따라야 할 단 하나입니다.

가정과 함께 git 사용자를 /home/git으로 설정하고 절대 경로가 필요하지 않음을 의미하는 /home/git/project.git에 저장소를 만들면 유의하십시오. 나는.

(server) $ cd /home/git 
(server) $ mkdir project.git 
(server) $ cd project.git 
(server) $ git --bare init 

당신이 그것을 원하는 목적지 그런 : 동일을 달성하기 위해 물론

(home) $ git clone [email protected]:project.git 

을 당신이 원하는 어디든지, 당신은 또한 당신의 자식의 repos를 넣을 수 있고 단지 (/etc/passwd 단위) 자식 사용자의 홈 디렉토리를 변경합니다.

당신이 저장소에 밀어 때마다 체크 아웃을 업데이트하려면 푸시

업데이트, 당신은 그것을 할 후받을 후크가 필요합니다. 먼저 올바르게 자체를 설정 :

  • 후크 파일 :

    (server) $ cd /var/www/app.com/web/ 
    (server) $ git clone -b production-branch /home/git/project.git . # it's local - use a file path 
    (server) $ cd /var/www/test.com/web/app.com/ 
    (server) $ git clone -b staging-branch /home/git/project.git . 
    

    그런 다음 확인

    cd /var/www/test.com/web/app.com 
    git --git-dir /var/www/test.com/web/app.com/.git pull #> /dev/null 2>&1 & #uncomment after testing 
    

    와 /home/git/project.git/hooks/post-update를 만들 git가 실행 가능하며 소유하고 있습니다.

  • 체크 아웃 된 파일의 소유자와 동일한 그룹에 있음 (그렇지 않으면)
  • 01을 푸시하면 권한 오류가 발생합니다.

위와 같이 작성하면 명령을 내릴 때마다 출력이 전송되므로 느리게 (ish)를 밀게됩니다. 올바르게 작동한다고 확신 할 때 백그라운드에서 실행할 수 있습니다. 스테이징 체크 아웃이 모든 푸시를 당기는 것은 중요하지 않습니다. 지점을 변경하지 않으면 아무 것도 수행하지 않습니다.

실시간 사이트를 자동으로 업데이트하는 것은 좋지 않습니다. 대신

(home) $ git checkout production-branch 
(home) $ git merge staging-branch 
(home) $ git push # updating production-branch 
(home) $ git checkout feature/i-was-working-on-this 
(home) $ ssh server 'cd /var/www/app.com/web/; git pull' 
# Manual Post update checks 

자동으로 예를 들어 업데이트가 사용할 수없는 상태에있는 당신의 생산 현장을 떠난 한 경우 - 당신은 알 수 없습니다 (당신이 "생산 사이트 오프라인"라는 pingdom 경고를 얻을하지 않는 한 /까지). 중요한 테스트 커버리지와 자동화 된 배포 프로세스가 있지만 실행하기 전에 걸어 가면 라이브 사이트를 자동으로 업데이트하는 것이 안전합니다. 당신이 정말로하지 않은 베어 체크 아웃로 밀어하려면

직접 올리기는

당신은 당신이 프로젝트에서

[receive] 
    denyCurrentBranch = ignore 

을 설정 할 수 있습니다.작업 사본 (iirc)을 갱신해야하는 로컬 변경 사항이없는 경우 git/config 파일을 사용하십시오.

+0

확실히 놀라운 대답 AD7six, 감사합니다 마스터 :) 자동으로 사이트를 업데이트하는 것이 좋지 않은 경우 다른 옵션은 무엇입니까? 편집에서 언급했듯이 이것은 ISPConfig 환경을위한 것입니다 (알고 있다면). – Alex

+0

나는 위의 정보를 위의 – AD7six

+0

tnx를 바꿀 ISP 설정에 대해 특별한 것을 기억하지 못합니다. 미안하지만 나는 내 자신이 묻지 않는 것을 도울 수 없다 : 당신은 Pingdom에서 일하고 있는가? xDD – Alex

2

그것은 좋은 생각에서 무엇을했다,하지만 조금 더 많은 작업이 필요합니다. 당신이 체크 아웃 된 분기가 푸시 될 때 git reset --hard을 할 수있는 post-update hook를 정의하여 도움이 플러스 체크 아웃에 밀어에 대한 기본 검사를 해제하지 않는 한 비 베어 REPO에 누르면

힘내 작업 카피를 업데이트하지 않습니다 지점 (나는 정확한 옵션을 기억하지 못한다. git-config 매뉴얼 페이지를 보아라).

git reset --hard을 수행하면 모든 로컬 수정이 취소됩니다. 로컬 수정을 유지하도록 훅을 작성하는 것은 조금 더 까다 롭지 만 수행 할 수도 있습니다. 그러나 프로덕션 서버에서 로컬 수정을해서는 안됩니다.

적절한 훅을 사용하면 서버가 많지 않은 작은 설치 환경에서도 매우 합리적인 워크 플로입니다.

큰 설정의 경우 별도의 서버에 베어 리포 지 토리가 있고 후크로 git pullssh trigger을 사용하여 프로덕션 저장소에서 실행됩니다. 장점은 서버의 중앙 저장소가 외부에서 액세스 할 수 없으므로 보안을 강화할 수 있다는 것입니다.

+0

아직 배울 점이 있습니다. 프로덕션 서버에서 맨 처음 저장소를 시작할 수 없으므로 언급 된 문제가 없습니까? – Alex

+1

@ w0rldart : 어디 까지나 기본 저장소가 중요하지 않습니다. 비록 내부 네트워크가 하나의 서버를 비무장 지대 (프로덕션 서버가있는 곳, 즉 프로덕션 서버가 아닌)에있는 서버보다 선호합니다. 그러나 프로덕션 서버가 푸시 할 때 자동으로 데이터를 업데이트하려고한다고 가정했습니다. 그리고 모든 경우에'post-update' 후크가 필요합니다. 'post-update' 훅으로 작업 디렉토리를 수정하기 위해 푸시 한 non-bare 리포지토리를 가질 수 있습니다. 그렇지 않은 경우 하나를 갱신하기 위해'post-update' 훅으로 베어 리포 지 토리를 가질 수 있습니다. 'post-update' 후크. –

+0

@ w0rldart : 빈 공간이 아닌 베어 메탈 리포지토리로 설치하는 것이 더 많은 공간을 차지하면서도 설정하는 것이 더 안전하고 백업하는 것이 더 쉬울 것입니다. 그렇습니다. –

관련 문제