티스토리 뷰

자 이제 세번째로 서버에 git 설치를 하고 git을 사용하기 위한 설정을 해보겠습니다.


git 설치

1. git 설치

$ sudo apt-get install git

2. git 관리 계정 만들기

$ sudo adduser git-admin

$ su - git-admin

3. git repositories 설정

3.1 디렉토리 생성

$ cd /var/www/html/

$ sudo mkdir git-repositories

$ sudo chmod +x git-repositories

$ cd git-repositories

$ mkdir test.git

$ cd test.git

3.2 bare repositories 생성

$ git init --bare --shared   

4. git 계정, 이메일 설정

$ git config --global user.email "gitolite@xxx.xxx"

$ git config --global user.name "gitolite"



자 이제 bare 저장소를 사용하기 위해 git clone을 한후 파일을 하나 올려보겠습니다.


ssh를 이용한 git 테스트


만약 ssh를 설치하지 않았다면 openssh-server를 설치하면 됩니다.

$ sudo apt-get install openssh-server

$ sudo service ssh restart


1. clone tet.git (server에서 작업중이면 <server ip>에 localhost를 치고 아니면 server ip를 치면 됩니다.)

$ git clone git-admin@<server ip>:/var/www/html/git-repositories/test.git

2. 파일 생성 및 커밋

$ touch README

$ git add README

$ git commit -m "initial commit"

$ git push origin master


다시 clone 을 해보면 파일이 잘 받아지는 것을 확인 할 수 있습니다.



지금은 browser를 통해 https://xxx.xxx.xxx.xxx/git-repositories/test.git를 쳐보면 파일을 확인할 수 있지만 보통 소스를 받을 때 많이 사용하는 git clone https://xxx.xxx.xxx.xxx/git-repositories/test.git을 해보면 connection refused가 나는 것을 발생하는 것을 확인할 수 있습니다. 이에 대한 설정을 해보겠습니다.


git http 설정


1. post update hook 설정

$ cd /var/www/html/git-repositories/test.git

$ mv hooks/post-update.sample hooks/post-update

$ chmod a+x hooks/post-update

2. git repository directory 사용 권한 수정

$ sudo chown -R _currentuser_:www-data /var/www/html

$ sudo chmod -R g+sw /var/www/html

3. git-http-backend 설정 추가

3.1 apache moude 설정

$ sudo a2enmod cgi alias env rewrite

3.2 git-http-backend 설정 

$ sudo vi /etc/apache2/sites-available/000-default.conf

SetEnv GIT_PROJECT_ROOT /var/www/html/git-repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git-repositories/ /usr/lib/git-core/git-http-backend/

RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git-repositories/ - [E=AUTHREQUIRED]

<Files "git-http-backend">
     AuthType Basic
     AuthName "Git Access"
     AuthUserFile /var/www/html/.htpasswd
     Require valid-user
     Order deny,allow
     Deny from env=AUTHREQUIRED
     Satisfy any
</Files>

3.3 htpasswd 인증 파일 생성

$ htpasswd -c /var/www/html/.htpasswd _currentuser_

3.4 apache 재시작

$ sudo service apache2 restart  

이제 http 설정이 끝났으니 테스트를 해보겠습니다.

$ git clone http://xxx.xxx.xxx.xxx/git-repositories/test.git

잘 받아지는 것을 확인 할 수 있습니다. 그럼 이제 파일을 하나 더 올려보겠습니다.

$ touch README2

$ git add README2

$ git commit -m "second commit"

$ git push origin master

아마 The requested URL returned error: 403 다음과 같은 메시지가 뜨면서 push가 안되는 것을 확인 할 수 있을 것입니다. 이럴때는 remote 저장소를 추가하면 됩니다.

$ git remote add pushServer ssh://git-admin@xxx.xxx.xxx.xxx:/var/www/html/git-repositories/test.git

$ git push pushServer master


잘 동작하는 것을 확인 할 수 있습니다.




이제 마지막으로 https에 대한 설정을 해보겠습니다.


git https 설정


1. self-signed certificate 생성

$ sudo mkdir /etc/apache2/ssl

$ sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache-ssl-cert.crt

crt 파일의 내용을 확인해보면 BEGIN CERTIFICATE ~ END CERTIFICATE와 BEGIN PRIVATE KEY ~ END PRIVATE KEY로 구성되어 있는 것을 볼 수 있습니다. 다음 파일을 두개로 나눕니다. 

apache-ssl-cert.pem (BEGIN CERTIFICATE ~ END CERTIFICATE 포함)

apache-ssl-cert.key (BEGIN PRIVATE KEY ~ END PRIVATE KEY 포함)

$ cd /etc/apache2/ssl

$ sudo cp apache-ssl-cert.crt apache2-ssl-cert.pem

$ sudo cp apache-ssl-cert.crt apache2-ssl-cert.key

2. certificate 사용을 위한 httpd 설정

$ sudo vi /etc/apache2/sites-available/default-ssl.conf

SSLCertificateFile /etc/apache2/ssl/apache2-ssl-cert.pem

SSLCertificateKeyFile /etc/apache2/ssl/apache2-ssl-cert.key

3. 위의 git http 설정시, /etc/apache2/sites-available/000-default.conf 에서 적용한 부분을 default-ssl.conf에도 적용

4. apache virtual host 생성 및 module 설정

$ sudo a2enmod ssl

$ sudo a2ensite default-ssl.conf


자 이제 모든 설정이 끝났습니다. 마지막으로 https를 이용한 clone 을 해보겠습니다.

git clone https://xxx.xxx.xxx.xxx/git-repositories/test.git

음? SSL certificate problem: self signed certificate 라는 메시지가 뜨면서 clone이 동작하지 않는 것을 볼 수 있습니다. 이럴때는 받는쪽에서 다음 설정을 추가하시면 됩니다.

$ git config --global http.sslverify false
다시 해보면 잘 되는 것을 확인 할 수 있습니다. push는 http를 할때랑 똑같이 하면 동작하는 것을 확인 할 수 있습니다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함