티스토리 뷰

IT 일반

깃(git) 웹서비스 설치하기

야라바 2015. 9. 16. 22:29


깃(Git)을 웹을 통해서 접근할 수 있도록 설정하는 방법을 다룰까 합니다. 본 포스팅은 윈도우 시스템을 타겟으로 하지만 리눅스나 기타 시스템도 유사하게 적용할 수 있습니다.

깃(Git)을 웹을 통해서 접근할 수 있도록 하려면, 다시말해서 현재 PC를 웹을 지원하는(HTTP 또는 HTTPS) 깃서버로 사용하기 위해서는 우선 시스템에 깃을 설치해야 합니다(윈도우에서 깃(git) 설치하기 참조) 그리고 아파치 웹서버 또는 아파치 웹서버가 포함되어 있는 XAMPP와 같은 APM(Apache+PHP+MySQL) 패키지를 설치합니다. 그리고 깃 저장소들을 일괄적으로 포함하고 있는 폴더를 준비하면 깃의 웹서비스를 위한 준비는 충분합니다. 본 포스팅에서는 Apache 2.4.2 기반의 XAMPP를 사용하고 C:\gitrepo를 깃 저장소들을 일괄적으로 포함하고 있는 저장소들의 루트 폴더로 생성했습니다. 참고로 깃서버가 서비스가 저장소들은 사본(Working) 디렉토리가 없는 Bare 저장소 이어야 합니다. Bare 저장소는 "git clone --bare myproject myproject.git" 처럼 --bare 옵션을 붙여서 복제하거나 "git init" 생성한 폴더에서 "cp -Rf myproject/.git myproject.git"처럼 만들수도 있습니다. Bare 저장소는 확장자를 ".git"를 붙여줍니다.

깃 웹서비스 설치를 위한 준비가 완료되면 위의 그림과 같이 C:\Program Files\Git\bin 폴더에 있는 libiconv-2.dll을 C:\Program Files\Git\libexec\git-core로 복사합니다. 이 작업이 없으면 웹서비스 과정에서 오류가 발생할 수 있습니다.

설치한 웹서버로 테스트 웹페이지를 띄워서 웹서버의 정상 가동 여부가 확인되었으면 깃 웹서비스를 위한 웹설정 파일을 아래와 같이 수정합니다. 단, 시스템 별로 차이가 있을 수 있으므로 감안하여 설정합니다. 단, 시스템별로 차이가 있을 수 있으므로 감안하여 설정합니다.


웹문서 폴더는 저장소 루트 폴더로 변경합니다.(DocumentRoot "/gitrepo") 환경 설정도 저장소의 루트 폴더를 가리키도록 하고(SetEnv) 웹주소로 전달된 정보가 깃의 git-http-backend로 자연스럽게 넘어가도록 설정합니다(ScriptAlias, ScriptAliasMatch)  결과적으로 이 과정을 통해서 깃의 웹주소는 "http://서버IP/git/저장소이름"의 구조가 됩니다. 끝으로 디렉토리 권한 설정을 해주는데 git-http-backend가 위치한 C:/Program Files/Git/libexec/git-core 폴더에 대해서도 ExecCGI 옵션을 부여하는 것을 기억해야 합니다. 설정이 끝나면 웹서버를 재가동시킵니다. 아래의 그림은 적용한 설정이 반영된 서버에 대해서 클라이언트에서 웹주소로 복제(Clone)하는 과정입니다. .



웹을 통한 복제(Clone)가 성공했다면 이제 남은 것은 사용자 인증을 적용하는 것입니다. 사용자 인증을 위해서는 아래의 그림과 같이 사용자 아이디와 비밀번호가 담긴 인증 파일을 먼저 생성합니다.


인증 파일은 아파치 웹서버에서 제공하는 htpasswd 명령을 사용하여 작성할 수 있습니다. 최초 작성 시점에는 -c 옵션을 추가해 줍니다.

htpasswd 명령의 첫 인수는 인증 파일명이고 두번째 인수는 사용자 아이디로 비밀번호를 확인해서 입력하면 기존 사용자는 비밀번호를 수정하고 없으면 추가합니다.

인증 파일이 준비되었으면 아래와 같이 웹 설정 파일을 수정하고 웹서버를 재가동시킵니다.


웹 주소로 복제한 저장소를 PUSH하면 아래와 같은 화면이 나오는데 등록한 사용자 아이디와 비밀번호를 입력하면 인증을 통과해서 PUSH할 수 있습니다.


익명 접근을 허용하는 경우 네이버 개발자센터 처럼 nobody라는 임의의 사용자를 생성해서 읽기 권한만 부여하는 방법도 있습니다. 물론 이런 경우에는 읽기 권한 사용자 파일과(git-receive*) 저장 권한 파일(git-upload*)을 구분해야 합니다. 


댓글
댓글쓰기 폼
«   2022/12   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함