리눅스에서 nginx를 proxy로 사용하여 인증하는 방식.
(리눅스에 nginx와 mercurial이 이미 설치되어 있다고 가정함)
(/path/to/repo1 과 /path/to/repo2 는 hg init 를 통해 이미 저장소 생성이 되어 있는 상태라고 가정함)
포트번호
nginx : 8888
mercurial : 9999
nginx 설정
proxy를 이용할 virtual host 설정을 하나 만든다.
아래 예제는 http://localhost:8888 을 접속하면 mercurial로 proxy 하는 예제다.
listen 8888;
server_name localhost;
access_log /path/to/access_log;
error_log /path/to/error_log;
location / {
auth_basic "Mercurial Restricted";
auth_basic_user_file /path/to/file;
proxy_pass http://localhost:9999;
}
}
인증파일 만들기
/path/to 로 이동하여 아래 명령어를 입력하여 인증파일을 생성한다. (비번은 알아서 적당히)
ex) /path/to 경로에 passwd 라는 파일을 만들고 user1이란 사용자 추가
htpasswd -c /path/to/passwd user1
Mercurial 설정
원활한 사용을 위해 아래의 내용중 [web] 탭의 내용은 webconf 파일에 반드시 들어 있어야 한다.
[paths] 는 serve 하고자 하는 저장소들을 나열해주면 된다.
push_ssl = false
allow_push = *
[paths]
repo1 = /path/to/repo1
repo2 = /path/to/repo2
실행
1. nginx 실행
- nginx 는 conf 파일에 다 해놨으므로 그냥 실행만 하면 됨.
2. mercurial 실행
- 실행커맨드는 아래와 같다. 나머지 옵션은 알아서.
확인
브라우저를 열어서 http://DOMAIN_NAME:9999/repo1 또는 repo2 로 접속해보면 사용자 인증 확인창이 나온다.
htpasswd 명령어를 이용하여 만든 username, password 를 넣어서 인증이 통과되면 Mercurial의 웹화면을 볼 수 있다.
windows 클라이언트 PC에서 TortoiseHg 를 이용하여 해당 저장소로부터 clone 해본다.
source 경로를 http://DOMAIN_NAME/repo1 로 하면 repo1 저장소의 내용을 clone 해올 수 있다.
이때 username과 password를 묻는 창이 뜨는데 제대로 입력하면 별일 없이 가져옴.
여기서 조낸 중요한 문제가 하나 있는데,
현재 상태로는 뭔 일만 하면 인증을 해야하는 굉장히 번거로운 문제가 생긴다.
이는 hgrc 파일에 인증내용을 넣어서 자동으로 처리되도록 만들 수 있다.
clone 받아온 경로가 C:\Repo1 이라고 가정할 때,
C:\Repo1\.hg\hgrc 파일을 열어서 아래의 내용 중 [auth] 탭 부분을 넣으면 이후부터는 커맨드를 날릴 때 일일이 인증을 하지 않아도 된다.
([path] 탭은 이미 있는 내용이다)
[path]
default = http://DOMAIN_NAME:9999/repo1
[auth]
repo1.prefix = http://DOMAIN_NAME:9999/repo1
repo1.username = USERNAME
repo1.password = PASSWORD
끝.
[참조]
http://mercurial.selenic.com/wiki/HgServeNginx
http://hgtip.com/tips/advanced/2009-10-01-configuring-user-auth-https/
'버전관리' 카테고리의 다른 글
[Mercurial] named branch (0) | 2014.07.31 |
---|---|
[SVN] TortoiseSVN - Client Side Hook Scripts (0) | 2013.03.15 |
[Mercurial] http 인증 for Windows (nginx, proxy, authorization) (0) | 2012.01.04 |
[Mercurial] 특정 리비전 묶음으로 backout 하기 (backout revisions) (0) | 2012.01.03 |
[SVN] SubVersion 에서 특정 리비전으로 Backout 하는 법 (0) | 2011.11.14 |