제목이 뭔가 거창한데, 그냥 소스파일을 그대로 원하는 웹서버에 배포하는 내용입니다. java 개발인 경우에는 뭐 필요없지만, php인 경우에는 컴파일이 필요없이 웹서버에 복사만 하면 되는 경우라 이 방법을 택했습니다.
개인별로 개발하고 푸쉬타임에 해당 웹서버에 배포하게 되어서 서버에서 테스트해볼 수 있는 구조를 만드려고 했습니다.
환경은 gitolite + gitlab으로 설치되어 있는 환경입니다.
구조는 간단합니다.
배포하려는 서버에 git을 clone을 합니다. 그리고, 서버훅을 이용해서 push 후에 스크립트를 실행할 수 있는 스크립트를 실행해서 그 서버에서 pull을 하거나 reset을 하면 됩니다.
이 구조는 git서버, 배포서버, 로컬 이렇게 다 나눠진 경우입니다.
1. 배포할 서버에 git서버 공개키 추가
이걸 하는 이유가 서버와 git서버가 틀린 경우에 하는 겁니다. git서버에서 해당 배포서버에 비번없이 접속하려고 하다보니 ssh키가 필요합니다.
git서버로 접속해서 ssh키를 생성합니다.
sudo su git
ssh-keygen -t rsa
cd ~/.ssh
cat id_rsa.pub
id_rsa.pub 파일을 복사해서 배포할 서버의 ~/.ssh 디렉토리 안에 authorized_keys 파일을 생성해서 붙여넣습니다. 그럼 이제, git -> 배포서버에서 ssh접속 시 비밀번호 없이 접속할 수 있습니다.
2. 해당 서버에 공개키를 git서버에 추가
이걸 하는 이유는 해당 서버에서 git서버에서 clone을 받아야 하기 때문입니다. 즉 서로 등록이 필요한 것이죠. 으핫. 위와 동일한 방법으로 ssh-keygen으로 생성합니다. 그리고 id_rsa.pub파일을 복사해서 authorized_keys파일에 추가합니다. gitlab을 사용하고 있다면 사용자 ssh키 등록만 해주면 되겠죠?
3. 해당 배포 디렉토리에 git clone하기
소스가 있는 git repository를 해당 배포할 디렉토리에 clone을 합니다. 저는 일단 아파치 기본 폴더에 했습니다. 일단 clone 시에는 다 지워야해서... 다 지우고 clone!
cd /var/www
rm -rf *
cd ..
git clone 해당git주소(ex:git@domain:mudchobo.git) www
이렇게 하면 /var/www가 해당 repository가 되어버립니다. 루트가 되어버리는 것이죠.
4. hooks 설정
일단 해당 서버에 pull을 하는 스크립트를 작성해서 스크립트가 실행될 수 있게 합니다.
vi /var/www/pull.sh
cd /var/www/
git pull origin
:wq
chmod +x pull.sh
gitolite로 설치를 해서 해당 서버훅을 사용하려면 git계정으로 접속하면 repositories 디렉토리에 hooks 관련 스크립트 디렉토리가 있습니다. 여기서 post-update 스크립트에 넣으면 client에서 push를 할 때 실행되게 됩니다.
cd /home/git/repositories/mudchobo.git/hooks
vi post-update
ssh mudchobo@서버주소 "/var/www/pull.sh"
:wq
여기서 post-update를 한 번 실행을 해줘서 신뢰할 수 있는 사이트에 등록을 해줘야합니다. 스크립트 실행 시 한번에 다 실행이 되야해서 yes/no 물음이 없어야 하거든요. 그래서 한번 실행해서 신뢰할 수 있는 사이트에 등록합니다.
5. 클라이언트에서 push하기
이제 다른 pc에서 push하면 바로 해당 서버에서 자동으로 pull이 되게 됩니다. 그래서 push타임에 서버에 배포되는 것처럼 되는 것이지요.
vi index.php
<?php
phpinfo();
?>
:wq
git add .
git commit -m "index add"
git push origin
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: From localhost:mudchobo
remote: 3455f24..308e01a master -> origin/master
remote: Updating 3455f24..308e01a
remote: Fast-forward
remote: index.php | 1 +
remote: 1 file changed, 1 insertion(+)
To git@192.168.198.130:mudchobo.git
3455f24..308e01a master -> master
저희는 일단 이렇게 쓰려고 지금 셋팅을 하고 있는데.....제대로 된 것이 맞는지 의문이네요. 하다가 잘 안되면 다시 방법이 바뀔지도......ㅠㅠ