2010-11-21 7 views
7

저는 Apache 웹 서버를 실행 중이며 github에서 웹 서버로 변경 사항을 배포하는 가장 좋은 방법이 궁금합니다.git/github 및 웹 서버 배포 구성

/var/www/right는 이제 root 만 쓸 수 있습니다.

git 프로젝트를/var/www /에 직접 넣어야합니까? (그래서 /var/www/.git/?)

그러나 sudo git push 명령을 실행해야 할 때 (내 ssh 키가 sudo가 아니기 때문에) 작동하지 않습니다.

/var/www/writable을 나 자신 (루트가 아닌)으로 만드는 것이 더 좋을까요? 아니면 ssh 키를 루트 사용자에게 추가해야합니까? 아니면 전적으로 다른 일을해야합니까?

감사합니다.

+0

체크 아웃 http://stackoverflow.com/questions/279169/deploy-php-using-git – philfreo

+0

또는 Capistrano http://help.github.com/capistrano/ – philfreo

답변

5

로컬 컴퓨터의 내용을 서버와 동기화하려면 rsync를 사용하고, 한 서버에만 배포하는 경우에는 매우 간단합니다 (그리고 Capistrano는 과장입니다.). 나는 ~/.bash_profile에 다음과 같은 별칭을 넣어 :

alias eget='rsync -avie ssh [email protected]:sites/example.com/www/ ~/Projects/example/example.com/www/ --exclude .DS_Store --exclude ".git*" --delete-after' 
alias edep='rsync -avuie ssh ~/Projects/example/example.com/www/ [email protected]:sites/example.com/www/ --exclude .DS_Store --exclude ".git*" --delay-updates --delete-after' 

다음, 자식의 repo에서 내 로컬 컴퓨터에. 이 비린내가 보인다면

git commit -am 'commit some changes' 
git pull --rebase # pull any new changes from remote (--rebase prevents an unnecessary merge commit.) 
eget -n # confirm which files I've changed 

, 내가 -n없이 eget을 할 수있는 다음 단지 git diff -w을 : 내가 할. 그런 다음 변경 사항을 유지하려는 파일에 대해 git checkout -- path/to/file을 수행 할 수 있습니다. 그런 다음 아직 얻지 못한 서버의 변경 사항을 커밋합니다. 이는 서버의 파일이 배포와 다른 방식으로 변경되는 경우에만 발생합니다. 그렇지 않으면 로컬 버전이 서버의 파일보다 항상 최신이므로 서버에 아직 로컬에없는 파일을 덮어 쓰는 것에 대해 걱정할 필요가 없습니다. 계속 ...

edep -n # just see what files will be deployed/updated/etc. 
edep # looks good. Deploy for real. 

완료!

자세한 내용은 rsync(1) Mac OS X Manual Page을 확인하십시오.

또 다른 옵션은 Git post-receive hook입니다. 하지만 그렇게하려면 서버에 힘내를 설치해야합니다. 또한 보안 & 청결한 이유로 디렉토리 외부에 .git 디렉토리를 퍼블리시하는 것이 좋습니다. Git core.worktree 구성 옵션을 사용하여이 작업을 수행 할 수 있습니다. 예를 들어, ~/git/example.com.git에서 git init --bare; git config core.worktree ~/sites/example.com/을 입력하십시오. 따라서 ~/git/example.com.git~/sites/example.com/.git 디렉토리와 같습니다.

2

중앙 저장소를 생성하려면 git의 브랜칭을 사용하여 목적에 따라 다른 브랜치를 만들고 리포지토리를 공개적으로 제공하거나 .git 디렉토리를 공개적으로 제공하면 안됩니다. 코드를 사용하거나 저장소에 저장). 내 머리 위로 떨어져, 여기 내 자신의 경험에서, 내가 추천하는 단계는 다음과 같습니다

  • 이 코드에 대한 중앙/허브 저장소를 만듭니다. (선택 사항이지만 권장 됨 github.com을 중앙 저장소로 사용하는 것이 더 좋습니다). 그런 다음 로컬 배포를위한 로컬 복사본을 확인할 수 있습니다 (예 : 언제 당신의 노트북에 사이트를 재창조하고 싶습니다. 필요하지는 않지만 매우 편리하며 사이트가 휴대 가능합니다.개발 목적으로 준비 저장소와 준비 분기를 가질 수 있습니다. 프로덕션 용도로 저장소 및 분기를 가질 수도 있습니다.

  • 리포지토리에 이 아닌 명시 적으로 공개 디렉토리를 만듭니다 (예 : 리디렉션의 루트). 예 : 저장소 내에/www/또는/serve/또는/public/디렉토리를 만듭니다. 이것은 공개적으로 이용 가능하고 검색 엔진에 의해 색인 될 수있는 물건이므로, 거기에 무엇이 들어가는 지 조심하십시오. 거기에 들어가는 모든 내용은 영원히 캐싱 된 공개 지식이며 보안 취약점 공격의 대상이 될 것이라고 가정합니다 (이는 쉽게 진실 일 수 있기 때문입니다).

  • dev 저장소 만들기 : 개발자 그룹에 대한 공유 권한이있는 폴더에있는 것이 가장 이상적이지만 서버의 중앙 저장소 (예 : cd /home/tchal, git clone [email protected]:tchalvak/ninjawars.git)를 복제하십시오.

  • 개발 사이트의 심볼릭 링크를 만드십시오 : cd /var/www/, ln -s /url/to/shared/repository/public/ nickNameForDevSiteHere, 사이트의 서비스/공개 파일에 대한 심볼릭 링크를 만들어 간단한 개발 수준 사이트를 만듭니다. (선택 사항이지만 권장 됨). 그런 방식으로 dev 사이트는 일부 IP와 별명 (예 : http://10.0.1.123/publicdevelopmentsitenickname 실제 도메인 이름이 필요하지 않습니다.

  • 코드가 적용된 라이브 &을 지정하십시오. 어떤 코드가 현재 "라이브"인지에 상관없이 live-branch을 만들고 싶을 수도 있습니다.이 브랜치는 주기적으로 강제로 덮어 써야 할 것입니다. git branch live-branchgit push -f origin live-branch. 코드를 스냅 샷으로 간주하고 안정적인 분기를 고려하지 마십시오.

  • dev 사이트의 테스트가 충분하다고 확신하면 live-branch 코드를 수동으로 배포하거나 사용자 정의 배포 스크립트를 통해 배포하거나 라이브 지점이 체크 아웃 된 개별 저장소를 사용하여 명시 적으로 공용 컨텐츠, dev 사이트와 유사합니다.

    • 도메인 이름으로 Apache에서 가상 호스트를 만듭니다. 예를 들어, 다음과 같은 것을 사용할 수 있습니다 : <VirtualHost *> ServerName greatdomain.com ServerAlias www.greatdomain.com DocumentRoot /srv/greatdomain/www/ </VirtualHost> 세부 사항에 대해 명확하지 않으면 커다란 주제입니다. 아파치에서 가상 호스트 설정에 대한 추가 연구를하는 것이 좋습니다.

    • 서버의 ip에서 도메인 이름에 대해 DNS를 지정하십시오.

  • 요약

, 당신은 아주 쉽게 특정 - 투 - 각 배포 형 지점을 사용하여 모든 코드를 배포하는 자식을 사용할 수 있습니다. 예를 들어 배포 사이의 데이터베이스와 동기화하는 데 도움이되지는 않지만 실행 후 사이트를 구축하는 두 번째 계층으로 파악한 다음 수동으로 수행 할 수 있습니다.