Home | Info | Research | Blog | Repos | Messages | Contact Me

<!> 이 문서의 저작권은 PYRASIS에게 있고 무단도용시 법적 제재를 받을 수 있습니다. 복사, 재배포, 게시할 수 없으며 링크만 허용합니다. 자신의 블로그에 담고자 할 경우 비공개로 설정해 주시기 바랍니다.
/!\ 더 자세한 내용은 윈도우 프로젝트 필수 유틸리티 Subversion, Trac, CruiseControl.NET을 참고하세요.


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

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


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


Contents

1 설치할 파일들 구하기
1.1 Subversion
1.2 Apache
1.3 OpenSSL
1.4 ModSSL
2 설치 하기
2.1 Apache
2.2 Subversion
2.3 OpenSSL
2.4 ModSSL
3 인증서 만들기
3.1 개인키
3.2 공개키
4 저장소 만들기
5 설정
5.1 아파치 암호 설정
5.2 아파치 서버 설정
5.2.1 https
5.2.2 http
6 내부 도메인 설정하기
7 웹 브라우저에서 인증서 설치
8 ViewVC


1 설치할 파일들 구하기 #

1.1 Subversion #

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91[]에서 Windows 용 최신 버전을 받습니다. 인스톨러 버전을 받아야 합니다. 받자마자 설치하지 마시고 다음에 나올 설치 순서대로 설치하시면 됩니다.

1.2 Apache #

http://httpd.apache.org/download.cgi[]에서 apache_2.0.59-win32-x86-no_ssl.msi를 받습니다. Subversion은 아직 2.2용 모듈이 나오지 않았으므로 2.0을 사용합니다.

1.3 OpenSSL #

http://www.slproweb.com/products/Win32OpenSSL.html[]에서 최신버전을 받습니다.

2 설치 하기 #

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

2.1 Apache #

인스톨러를 실행하고 사용할 도메인을 입력합니다.
<!> 도메인이 없는 분들을 위해 내부 도메인을 설정하는 방법을 설명하겠으니 일단 사용할 도메인을 입력합니다.

ApacheServerInformation.png


설치가 끝나면 자동으로 아파치가 서버를 시작하는데 이때 Windows 방화벽이 아파치를 차단하겠냐고 물어봅니다. 당연히 차단해제를 해줍니다.

WindowsFirewall.png


2.2 Subversion #

아파치를 먼저 설치하면 Subversion 인스톨러가 아파치를 인식해서 자동으로 모듈 설정을 해줍니다.

SubversionAdditionalTasks.png


2.3 OpenSSL #

인스톨러를 실행해서 아무 설정 없이 그대로 설치하면 됩니다.
<!> https://를 사용하지 않으실 분들은 OpenSSL과 아래의 ModSSL을 설치하지 않고 5.1 아파치 암호 설정5.2.2 http를 참고해서 설정을 하시면 됩니다.


2.4 ModSSL #

받은 apache-2.0.59_openssl-0.9.8d.zip를 압축을 해제합니다.

압축이 해제된 디렉토리안에 modules 디렉토리의 mod_ssl.so 파일을 아파치가 설치된 디렉토리(C:\Program Files\Apache Group\Apache2)의 modules 디렉토리로 복사합니다.

다시 압축이 해제된 디렉토리 아래 conf 디렉토리의 ssl.conf 파일을 아파치가 설치된 디렉토리(C:\Program Files\Apache Group\Apache2)의 conf 디렉토리로 복사합니다.

아파치 설정 파일 C:\Program Files\Apache Group\Apache2\conf\httpd.conf를 열고 mod_ssl.so 부분의 #을 삭제하여 mod_ssl을 활성화 시킵니다.

httpconfmodssl.png


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

httpconflisten443.png


3 인증서 만들기 #

https://를 사용하기 위해서는 서버 인증서가 필요합니다. 방금 설치한 Windows용 OpenSSL을 이용하여 서버 인증서를 만들어보겠습니다.

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


3.1 개인키 #

여기서는 파일명을 example로 통일하겠습니다. 이것은 자신의 상황에 맞게 바꾸어도 됩니다.
기본 작업 경로는 C:\로 하겠습니다.
C:\Documents and Settings\Administrator>cd \

C:\>openssl\bin\openssl.exe
OpenSSL>req -config C:\openssl\bin\openssl.cnf -new -out example.csr

Enter PEM pass phrase:에서는 개인키에서 사용할 암호를 입력합니다.
Country Name:국가명입니다. 우리나라는 KO 입니다.
Locality Name:지역명입니다.
Organization Name:단체명인데 사용할 도메인을 입력합니다. (아파치 설치할때 입력했던 도메인)
Organizational Unit Name:여기도 사용할 도메인을 입력합니다.
Email Address:이메일 주소 아무거나

opensslcsr.png

이렇게 하면 C:\에 privkey.pem, example.csr 파일이 생성되었을 것입니다.

3.2 공개키 #

아파치에 사용할 공개키를 만들도록 하겠습니다. 유효기간은 1년(365일)로 하였습니다.
OpenSSL> rsa -in privkey.pem -out example.key
OpenSSL> req -config C:\openssl\bin\openssl.cnf -new -x509 -days 365 \
> -key example.key -out example.crt
example.key를 만들때에는 암호를 물어보는데 개인키 암호를 입력합니다.
Organization Name:사용할 도메인을 입력합니다.
Organizational Unit Name:여기도 사용할 도메인을 입력합니다.
https://로 접속한 서버의 도메인과 여기에 입력한 도메인이 다를 경우 접속할때마다 계속 Internet Explorer의 보안경고가 떠서 상당히 귀찮습니다. 이 도메인을 맞추어주는 것이 중요합니다. (공인인증서가 아니라서 계속 경고창이 뜨긴 하지만 도메인이 일치하고 유효기간이 맞으면 인증서 설치를 통해서 보안 경고를 뜨지 않게 할 수 있습니다.)

opensslkeycrt.png

이제 example.key, example.crt 파일이 생겼습니다. 이 두 파일과 방금 만든 privkey.pem, example.csr 파일을 아파치 설치 디렉토리의 conf 디렉토리로 옮깁니다.


4 저장소 만들기 #

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

c:\>mkdir repos

c:\>cd repos

c:\repos>svnadmin create sample


5 설정 #

5.1 아파치 암호 설정 #

Subversion 저장소에 접근할 ID와 암호를 설정해야 합니다. 먼저 아파치가 설치된 디렉토리의 conf 디렉토리로 이동합니다.
C:\Documents and Settings\Administrator>cd C:\Program Files\Apache Group\Apache2\conf

C:\Program Files\Apache Group\Apache2\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 처럼 해주면 됩니다.


5.2 아파치 서버 설정 #

5.2.1 https #

아파치가 설치된 디렉토리(C:\Program Files\Apache Group\Apache2)의 conf 디렉토리 아래에 있는 httpd.conf 파일을 편집합니다.

전 단계에서 만들었던 인증서, htpasswd, 저장소를 사용하여 서버 설정을 하도록 하겠습니다.
NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile "C:\Program Files\Apache Group\Apache2\conf\example.crt"
    SSLCertificateKeyFile "C:\Program Files\Apache Group\Apache2\conf\example.key"
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM

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

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files\Apache Group\Apache2\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\Apache Group\Apache2\conf\example.crt"
    SSLCertificateKeyFile "C:\Program Files\Apache Group\Apache2\conf\example.key"
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM

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

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files\Apache Group\Apache2\conf\htpasswd"
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>


5.2.2 http #

SSL을 사용하지 않는 일반적인 설정 방법입니다.
<VirtualHost *:80>
    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files\Apache Group\Apache2\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\Apache Group\Apache2\conf\htpasswd"
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>


6 내부 도메인 설정하기 #

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

C:\WINDOWS\system32\drivers\etc 아래에 hosts 파일을 편집하여 원하는 도메인으로 설정합니다.

WindowsHosts.png

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

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


7 웹 브라우저에서 인증서 설치 #

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

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

SecurityAlert.png

인증서 보기를 클릭합니다.

ExplorerCert.png

그리고 인증서 설치를 클릭하면 인증서 가져오기 마법사가 실행되는데 따로 설정할 것 없이 계속 "다음"만 눌러 주면 인증서를 설치할 것인지 아래와 같이 물어봅니다.

InstallCert.png

예(Y)를 눌러 인증서를 설치하고 인증서 창을 닫습니다. 그리고 보안 경고창에서 예(Y)를 누르면 설정한 사이트로 접속합니다. 이제 웹 브라우저를 껏다 켜도 보안 경고가 뜨지 않게 됩니다.


8 ViewVC #

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

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


Login | Title Index | Recent Changes | Edit | Page Info | Search | Subscribe

Copyright © 2003-2009 PYRASIS.COM,. All rights reserved.