더 자세한 내용은 윈도우 프로젝트 필수 유틸리티 Subversion, Trac, CruiseControl.NET을 참고하세요.

윈도우에서 Subversion 서버 운영하기

이재홍 http://www.pyrasis.com 2007.2.28 ~ 2014.7.10 버전 1.0

윈도우(Windows)에 Subversion, Apache, OpenSSL을 설치하여 http://, https:// 프로토콜을 사용하는 서버를 구성하는 방법을 설명하겠습니다.

목차

설치할 파일들 구하기

Subversion

http://sourceforge.net/projects/win32svn/files/에서 Windows용 최신 버전을 받습니다. 인스톨러 버전을 받아야 합니다. 받자마자 설치하지 마시고 다음에 나올 설치 순서대로 설치하시면 됩니다.

Apache

http://archive.apache.org/dist/httpd/binaries/win32/에서 httpd-2.2.25-win32-x86-openssl-0.9.8y.msi를 받습니다.

설치 하기

설치 순서는 Apache -> Subversion순입니다.

Apache

인스톨러를 실행하고 사용할 도메인을 입력합니다.

도메인이 없는 분들을 위해 내부 도메인을 설정하는 방법을 설명하겠으니 일단 사용할 도메인을 입력합니다.

Subversion

아파치를 먼저 설치하면 Subversion 인스톨러가 아파치를 인식해서 버전 선택 화면이 나옵니다. Modules for Apache 2.2.x를 선택합니다.

메모장을 관리자 권한으로 실행한 뒤 아파치 설정 파일 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf를 엽니다.

mod_dav.so 부분의 #을 삭제하여 dav_module을 활성화시킵니다. 그리고 아래 dav_svn_module 설정을 추가합니다.

LoadModule dav_svn_module "C:/Program Files (x86)/Subversion/bin/mod_dav_svn.so"

ModSSL

https://를 사용하지 않으실 분들은 OpenSSL 모듈을 설정하지 않고 아파치 암호 설정http를 참고해서 설정을 하시면 됩니다.

아파치 설정 파일 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf에서 mod_ssl.so 부분의 #을 삭제하여 ssl_module을 활성화 시킵니다.

http.conf 파일에서 다음 그림과 같이 Listen 80이라는 부분을 찾아서 그 아래에 Listen 443을 추가해줍니다. 이 포트를 열지 않으면 아무리 SSL 설정을 해줘도 https://로는 절대 접속이 안됩니다.

인증서 만들기

https://를 사용하기 위해서는 서버 인증서가 필요합니다. Apache에 포함된 OpenSSL을 이용하여 서버 인증서를 만들어보겠습니다.

여기서 만드는 인증서는 사설 인증서입니다. 대부분 개발 서버는 개인적으로 쓰거나 내부적으로 쓰기 때문에 공인 인증서는 필요가 없습니다.

개인키

여기서는 파일명을 example로 통일하겠습니다. 이것은 자신의 상황에 맞게 바꾸어도 됩니다.

명령 프롬프트를 관리자 권한으로 실행합니다. 기본 작업 경로는 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf로 하겠습니다.

C:\Windows\system32>cd "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf"

C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf>..\bin\openssl.exe
OpenSSL>req -config openssl.cnf -new -out example.csr
  • Enter PEM pass phrase:에서는 개인키에서 사용할 암호를 입력합니다.
  • Country Name: 국가명입니다. 우리나라는 KO 입니다.
  • Locality Name: 지역명입니다.
  • Organization Name: 단체명인데 사용할 도메인을 입력합니다. (아파치 설치할때 입력했던 도메인)
  • Organizational Unit Name: 여기도 사용할 도메인을 입력합니다.
  • Email Address: 이메일 주소를 입력합니다.

이렇게 하면 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\confprivkey.pem, example.csr 파일이 생성되었을 것입니다.

공개키

아파치에 사용할 공개키를 만들도록 하겠습니다. 유효기간은 1년(365일)로 하였습니다.

OpenSSL> rsa -in privkey.pem -out example.key
OpenSSL> req -config openssl.cnf -new -x509 -days 365 -key example.key -out example.crt

example.key를 만들때에는 암호를 물어보는데 개인키 암호를 입력합니다.

  • Organization Name: 사용할 도메인을 입력합니다.
  • Organizational Unit Name: 여기도 사용할 도메인을 입력합니다.

https://로 접속한 서버의 도메인과 여기에 입력한 도메인이 다를 경우 접속할때마다 계속 Internet Explorer의 보안경고가 떠서 상당히 귀찮습니다. 이 도메인을 맞추어주는 것이 중요합니다(공인인증서가 아니라서 계속 경고창이 뜨긴 하지만 도메인이 일치하고 유효기간이 맞으면 인증서 설치를 통해서 보안 경고를 뜨지 않게 할 수 있습니다).

이제 example.key, example.crt 파일이 생겼습니다.

저장소 만들기

사용할 저장소를 만듭니다. C:\repos 아래에 각 프로젝트들의 저장소를 만들도록 하겠습니다.

명령 프롬프트를 관리자 권한으로 실행합니다.

C:\Windows\system32>cd \

C:\>mkdir repos

C:\>cd repos

C:\repos>svnadmin create sample

설정

아파치 암호 설정

Subversion 저장소에 접근할 ID와 암호를 설정해야 합니다. 먼저 아파치가 설치된 디렉터리의 conf 디렉터리로 이동합니다.

명령 프롬프트를 관리자 권한으로 실행합니다.

C:\Windows\system32>cd "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf"

C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf>..\bin\htpasswd -c htpasswd sampleusr
Automatically using MD5 format.
New password: *******
Re-type new password: *******
Adding password for user sampleuser

-c 옵션은 새 파일을 만드는 옵션입니다. 이후 새로운 아이디를 추가하려면 ..\bin\htpasswd htpasswd hellouser 처럼 해주면 됩니다.

아파치 서버 설정

https

아파치 설정 파일 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf를 편집합니다.

전 단계에서 만들었던 인증서, htpasswd, 저장소를 사용하여 서버 설정을 하도록 하겠습니다.

아래 내용을 설정 파일 맨 아래애 추가합니다.

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.crt"
    SSLCertificateKeyFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.key"
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM

    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        Require valid-user
    </Location>
</VirtualHost>

SVNParentPath는 각 프로젝트의 저장소 디렉터리가 아닌 그 바로 위의 디렉터리를 뜻합니다. 이렇게 설정하면 https://svn.example.com/svn/sample로 접속할 수 있고 sample 대신에 각 프로젝트 저장소 디렉터리 이름으로 접근할 수 있습니다.

프로젝트의 저장소를 바로 지정하려면 SVNPath "C:\repos\sample"로 설정해야 합니다. 이렇게 설정하면 https://svn.example.com/svn/에서 그 저장소의 내용이 표시되게 됩니다.

Require valid-user로 설정했기 때문에 인증된 사용자만 볼 수 있습니다. 웹 브라우저로 저장소를 보는 것과 체크아웃은 아무에게나(Anonymous) 할 수 있게 하고 커밋은 지정된 사용자만 할 수 있도록 하려면 httpd.conf에서 설정한 부분을 아래와 같이 바꾸어 주면 됩니다.

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.crt"
    SSLCertificateKeyFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.key"
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM

    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>

http

SSL을 사용하지 않는 일반적인 설정 방법입니다.

<VirtualHost *:80>
    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        Require valid-user
    </Location>
</VirtualHost>

Require valid-user로 설정했기 때문에 인증된 사용자만 볼 수 있습니다. 웹 브라우저로 저장소를 보는 것과 체크아웃은 아무에게나(Anonymous) 할 수 있게 하고 커밋은 지정된 사용자만 할 수 있도록 하려면 httpd.conf에서 설정한 부분을 아래와 같이 바꾸어 주면 됩니다.

<VirtualHost *:80>
    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>

내부 도메인 설정하기

실제 도메인을 구입하지 않아도 내부 도메인을 설정하면 아파치에 원하는 도메인으로 접속할 수 있습니다.

메모장을 관리자 권한으로 실행한 뒤 C:\Windows\System32\Drivers\etc 아래에 hosts 파일을 편집하여 원하는 도메인으로 설정합니다.

여기서는 127.0.0.1(지금 설치하고 있는 컴퓨터)를 svn.example.com으로 설정했습니다. 이렇게 하면 현재 쓰고 있는 컴퓨터에서 http://svn.example.com으로 접속하면 방금 설치한 아파치로 접속하게 됩니다.

하지만 다른 컴퓨터에서는 어느 컴퓨터가 svn.example.com인지 모르기 때문에 hosts 파일을 편집하여 아파치가 설치된 컴퓨터의 IP 주소를 svn.example.com으로 설정해줘야 합니다.

윈도우에 인증서 설치

우리가 여기서 OpenSSL로 만든 인증서는 공인 인증서가 아니기 때문에 https://로 접속할 때매다 보안 경고가 뜨게 됩니다.

인증서를 만들때 Organization Name, Organizational Unit Name을 아파치로 접속할 도메인과 일치 시켰다면 인증서를 설치하는 것으로 보안 경고를 뜨지 않게 할 수 있습니다.

탐색기에서 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf 디렉터리로 이동한 뒤 example.crt 파일을 더블클릭합니다.

인증서 설치 버튼을 클릭합니다.

인증서 가져오기 마법사가 실행됩니다. 다음 버튼을 클릭합니다.

모든 인증서를 다음 저장소에 저장(P)를 선택하고 찾아보기 버튼을 클릭합니다.

신뢰할 수 있는 루트 인증 기관을 선택하고 확인 버튼을 클릭합니다. 그리고 다음 버튼을 클릭합니다.

마침 버튼을 클릭합니다.

예(Y) 버튼을 클릭하여 인증서를 설치하고 인증서 창을 닫습니다.

이제 웹 브라우저를 다시 시작한 뒤 https://svn.example.com/svn/sample에 접속하면 보안 경고가 뜨지 않게 됩니다.

ViewVC

Subversion에서 제공하는 기본 웹 인터페이스는 저장소의 파일과 디렉터리만 보여줄 뿐 아무것도 하지 못합니다. ViewVC를 이용해서 편리하게 저장소를 볼 수 있습니다.

설정 방법은 SubversionWithViewVCForWindows를 참고하세요.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

28 February 2007