|
# 나만의 Git server 만들기(Making my lubuntu Git server)
# 깃 서버 만드는 방법(How to make my Git server)
# https 깃서버 구축, 리눅스 Git 서버 구축(HTTPS)
참고: https://git-scm.com/book/ko/v2/Git-%EC%84%9C%EB%B2%84-%EC%8A%A4%EB%A7%88%ED%8A%B8-HTTP
목적: 나만의 git 서버를 생성하며, 프로토콜은 http(or https)를 사용한다.
서론: HTTPS로 깃 서버 구축하는 방법입니다. 글이 많이 길죠? ㅎㅎ
-------
먼저 구축할 환경을 살펴보겠습니다. 이 환경은 저의 환경입니다.
구축 환경:
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04 LTS Release: 18.04 Codename: bionic |
운영체제는 우분투 18.04인데 사실 루분투 18.04로 구축했어요. 참고하시고요. 그 밖에 깃 버전은 2.17.1이고요.
필요한 프로그램 설치하기
먼저 Git 서버를 구축하시려면 Git을 설치하셔야겠지요?
$ sudo apt update $ sudo apt install -y git |
설치된 git의 version을 확인하여 git이 정상적으로 설치되었는지 확인합니다.
$ git version git version 2.17.1 |
http로 접근하기 위해서는 웹서버가 필요합니다. 이 글에서는 Apache2를 사용합니다.
Apache2를 설치합니다.
$ sudo apt-get install apache2 $ sudo service apache2 start |
이제 아파치 가상 호스트를 설정합니다.
가상호스트 가상호스트는 하나의 서버에 여러개의 웹서버를 구축하는 방법이라고 생각해주시면 될 거 같아요. 그리고 각 웹 서버는 도메인으로 분기가 되어요. 이 도메인으로 접속하면 이 웹을 보여주고 저 도메인으로 접속을 하면 저 웹을 보여주는 식입니다. |
저는 git.kimtheho.com이라는 도메인으로 설정합니다.
$ cd /etc/apache2/sites-available/ $ sudo vi git.kimtheho.com.conf |
<VirtualHost *:80> ServerAdmin admin@git.kimtheho.com DocumentRoot /var/www/git ServerName git.kimtheho.com ErrorLog ${APACHE_LOG_DIR}/git.kimtheho.com_error.log CustomLog ${APACHE_LOG_DIR}/git.kimtheho.com_access.log combined Errordocument 404 "https://www.naver.com" Timeout 2400 SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER <Directory /var/www/git> Options +ExecCGI -Includes +SymLinksIfOwnerMatch Require all granted </Directory> RewriteEngine On RewriteCond %{QUERY_STRING} service=git-receive-pack [OR] RewriteCond %{REQUEST_URI} /git-receive-pack$ RewriteRule ^/ - [E=AUTHREQUIRED] <Files "git-http-backend"> AuthType Basic AuthName "Git Access" AuthUserFile "/etc/git-auth-file" Require valid-user Order deny,allow Deny from env=AUTHREQUIRED Satisfy any </Files> ScriptAlias / /usr/lib/git-core/git-http-backend/ </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet |
뭔가 복잡한 게 막 써져 있으나 그냥 복붙 하시면 됩니다. 지금 공부해도 어차피 까먹기 때문에 필요할 때 궁금한 거 공부하시면 되어요.
그리고 필요한 아파치 모듈을 활성화합니다.
$ sudo a2enmod cgi alias env rewrite |
생성한 가상호스팅 사이트도 활성화 및 아파치 설정을 재 로딩 합니다.
$ sudo a2ensite git.kimtheho.com.conf $ sudo systemctl reload apache2 |
아래 명령으로, git 저장소가 생성될 디렉토리를 생성해 줍니다.
$ cd /var/www/ $ sudo mkdir git $ cd /var/www/git/ |
kimtheho.git 이라는 디렉토리를 생성합니다. 저장소가 될 디렉토리예요.
$ sudo mkdir -p /var/www/git/kimtheho.git $ cd kimtheho.git/ |
단순하게 directory만 생성했습니다.
이제 'kimtheho.git'를 실제 저장소로 설정하기 위해 알래 명령을 입력합니다.
$ cd /var/www/git/kimtheho.git $ sudo git init --bare --shared |
--bare와 --shared는 무엇인가요? 깃 서버는 그냥 git init으로 초기화 시키지 않고 위와 같이 --bare --shared를 붙여서 초기화 해야 해요. 그냥 git init 후에, 해당 저장소에서 파일을 생성하고 변경하고 하면 그 파일이 그대로 보여지고 git에 대한 정보는 .git이라는 숨겨진 디렉토리안에 저장이 되어요. --bare 옵션은 작업한 파일은 필요없고 그냥 .git안에 있는 내용만 저장시키는 저장소로 설정해라 라는 뜻이예요. 원격저장소에는 굳이 작업한 file과 directory가 보일 필요가 없어요. 왜냐하면 .git안에 이미 해당 파일 정보들이 모두 들어있기 때문입니다. 복잡하시면 그냥 git서버에 저장되는 저장소로 설정할 때 일반적으로 --bare를 붙이더라 ~ 라고 생각하고 넘어가주시면 되어요. --shared는 다른 사용자에게 이 저장소를 공유하는 옵션이예요. |
/var/www/git/kimtheho.git/ 안의 빈 공유 깃 저장소를 다시 초기화했습니다
깃에는 훅이라는 것이 있어요. 이벤트 핸들러 같은 거예요. 사용자가 업로드(push)하려고 하면 호출되는 파일이지요. 아래와 같이 이것을 활성화 시킵니다. 이것을 잘 이용하면 사용자가 push를 할 때 이메일을 보내 게 하거나 여러가지 프로그래밍과 연동시킬 수 있다는 점 참고해주세요. 이건 그냥 아 깃에서 사용자가 업로드(push)를 하려고 할 때 뭔가 필요한가보구나 생각해주세요.
$ sudo mv hooks/post-update.sample hooks/post-update $ sudo chmod a+x hooks/post-update $ sudo git config http.receivepack true |
우리는 HTTPS로 깃 서버를 만들고 있는데요. 아파치가 해당 디렉토리에 파일을 쓸수 있는 권한이 필요해요. 그래서 www-data라는 그룹으로 지정하는 거예요. 아파치는 www-data라는 그룹에 속해 있다고 생각해주세요.
cd /var/www $ sudo chown -R $USER git $ sudo sudo chgrp -R www-data git |
이제 접근할 수 Git 계정을 생성해보겠습니다. 우리가 git push 할 때 ID 또는 Password를 입력해야하잖아요. 그 설정을 하는 거예요.
$ sudo htpasswd -c /etc/git-auth-file kimtheho [sudo] password for kimtheho: <sudo의 패스워드를 입력합니다> <- 이것은 안 나올 수도 있어요.</sudo의 패스워드를 입력합니다> New password: <지금 생성하는 Git 계정의 패스워드를 입력합니다> Re-type new password: <지금 생성하는 Git 계정의 패스워드를 다시 입력합니다> Adding password for user kimtheho |
이후에 계정을 추가하고 싶다면, -c 옵션을 빼고 계정을 추가하시면 됩니다. 아래 명령을 참고해주세요.
추가 계정생성하기:
sudo htpasswd /etc/git-auth-file newuser |
글이 많이 긴데요, 이제 아파치 재시작만 하면 끝나요~!
$ sudo service apache2 restart |
끝났습니다.
이제 테스트를 해볼께요.
$ git clone http://git.kimtheho.com/kimtheho.git 'kimtheho'에 복제합니다... warning: 빈 저장소를 복제한 것처럼 보입니다. |
성공입니다.
그냥, 한 번 더 test.
$ cd kimtheho $ git remote -v <-원격 저장소 정보를 출력합니다. origin http://git.kimtheho.com/kimtheho.git (fetch) origin http://git.kimtheho.com/kimtheho.git (push) |
자 테스트가 성공했습니다.
참고로 아래처럼 설정해 놓으면 upload 시, 편안하답니다.
git config --global http.postBuffer 52428800 |
아니면 아래 처럼 shellscript를 작성해서 repository를 생성시키셔도 좋습니다.
$ cd /var/www/git $ vi createRepository.sh |
#!/bin/bash oldpath=$(pwd) mkdir -p /var/www/git/$1.git cd /var/www/git/$1.git git init --bare --shared git config http.receivepack true cp hooks/post-update.sample hooks/post-update cd .. sudo chown -R www-data:www-data /var/www/git/$1.git cd $oldpath |
fatal: unable to access 'http://127.0.0.1/test.git/': The requested URL returned error: 500 <-이런 에러가 발생하면
$ tail -f /var/log/apache2/error.log
확인
Request not supported: '/var/www/git/'fatal: detected dubious ownership in repository at '/var/www/git/test.git' To add an exception for this directory, call: git config --global --add safe.directory /var/www/git/test.git |
조치는 아래와같이 www-data:www-data로 설정
끝. 이하는 안 보셔도 되어요.
기존 프로젝트를 나만의 Git Server로 옮기기.
가장 간단한 방법은
$ git clone http://git.kimtheho.com/kimtheho.git 'kimtheho'에 복제합니다... warning: 빈 저장소를 복제한 것처럼 보입니다. # 원하는 파일을 kimtheho에 넣고 $ git add . $ git commit -m "Init project" <-여기서 user email 및 name을 설정하라고 나올 수도 있어요. $ git push # 하시는 것을 추천드립니다. |
기존 프로젝트 directory로 이동 후,
$ git init $ git remote add origin http://git.kimtheho.com/kimtheho.git $ git remote update $ git checkout -b master origin/master $ git add . $ git commit -m 'Project Init' <-여기서 사용자 이메일 및 이름을 설정하라고 나올 수도 있어요. 직감적으로 하실 수 잇을 거예요. $ git push <- 드디어 서버에 올립니다. 이때 생성된 계정정보를 물어볼꺼예요. |
이렇게 히면 기존 프로젝트를 자신만의 원격 Git서버에 올릴 수 있어요.
여기 이하는 kimtheho.com domain이 아닌 peer-to-peer.kr로 설명합니다. |
http를 https로 변경하기
http를 https로하는 방법은 간단해요. certbot같은 도구를 사용해서 http service를 https service로 변환해주면 끝나요.
만약 이것을 해 보지 않으신 분을 위해 그 과정을 설명 드리자면요.
certbot을 설치합니다. 이것은 앞서 말씀드렸다시피 인증서 발급 및 http service를 https service로 변환해주는 편리한 도구 입니다.
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache
여기까지가 certbot 설치이고요
이제 certbot을 이용해 인증서 적용 및 https서비스 활성화 및 http접속 시, https로 redirection하도록 해보겠습니다.
sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): kimtheho@naver.com <-자신에게 맞는 이메일을 입력해주세요.(최초 1회만 입력)
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A <-동의를 해주셔야 계속 진행됩니다.(최초 1회만 입력)
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
-------------------------------------------------------------------------------
(Y)es/(N)o: N <-이건 N으로 해주셔도 되어요(최초 1회만 입력)
Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: git.peer-to-peer.kr <- 어느 가상호스팅을 https로 서비스 할 것이냐 라고 묻는데 이때 목록입니다. 여기에 목록은 설정된 가상호스팅 수에 따라 여러 개가 나올수도 있어요. 가상호스팅 개념을 모르신다면 꼭 알아두세요. 간단하게 설명드리자면 서버 1식에 웹서버 여러 개 서비스 하고 싶은 경우 사용하는 것이 가상호스팅이예요. 우리 인터넷신청하면 하나의 유동 IP에 하나의 80(또는 443)port만 매칭시켜서 port forwarding 또는 DMZ설정으로 하나의 domain에 대해서만 web service를 제공 할 수 있는데 이거 사용하면 여러 도메인에 해당하는 web service를 많이 할 수 있어요. 여러 개의 도메인에 해당하는 웹 서비스를 할 수 있는 기능인 거죠. 이 도메인으로 요청이오면, 이 DocumentRoot랑 연결시켜주고 저 도베인으로 요청이 오면, 저 DocumentRoot랑 연결시켜주는 거예요.
중요!!!! 반드시 해당 도메인과 연결된 A record는 실제 다른 곳에서 접속할 수 있는 IP와 연결되어 있어야 합니다. 127.0.0.1이거나 외부에서 접속할 수 없는 192.168.0.250 이라면 안 되어요. port forwarding을 이용하시던 DMZ로 설정하시던 간에 반드시 외부에서 80 port로 접속할 수 있어야 해요. 안 그러면 certbot인증서 발급이 안 되어요. 왜냐하면 이 도메인이 진짜 당신이 도메인인지 검사 나오거든요. 얘기가 길어지니깐 핵심 부분만 설명은 여기까지만 할께요.
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1 <- 1번 도메인을 선택했어요.
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for git.peer-to-peer.kr
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/git.peer-to-peer.kr-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/git.peer-to-peer.kr-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/git.peer-to-peer.kr-le-ssl.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 <- redirect로 설정해야 http로 들어온 요청을 https로 연결시키도록 해요.
Added an HTTP->HTTPS rewrite in addition to other RewriteRules; you may wish to check for overall consistency.
Redirecting vhost in /etc/apache2/sites-enabled/git.peer-to-peer.kr.conf to ssl vhost in /etc/apache2/sites-available/git.peer-to-peer.kr-le-ssl.conf
-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://git.peer-to-peer.kr
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=git.peer-to-peer.kr
-------------------------------------------------------------------------------
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/git.peer-to-peer.kr/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/git.peer-to-peer.kr/privkey.pem
Your cert will expire on 2018-10-05. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
이제 http대신 https로 git clone 해보세요~!
자신만의 원격 저장소를 이용하면 웹 인터페이스도 만들고 Github처럼 커스터마이징도 되고, hook을 이용해 push 액션에 따라서 여러가지 프로그래밍이 가능합니다. push 시, 특정 서버에 밀어 넣는 것이나 메일을 보내거나 등의 커스터마이징이 제한없이 가능해요.
------- 절 취 선(읽어도 되고 안 읽어도 되어요)-------
이하 무시(읽어도 되고 안 읽어도 되어요) ( 컴퓨터 1대는 proxy를 이용해 스위칭하는 역할을 나머지 여러대 컴퓨터 연결해서 용량도 무제한으로 늘리는 등의 내용과 관련된 내용이 있긴 해요)
먼저 아래 명령으로 proxy 기능을 활성화 해줍니다.
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod ssl
sudo a2enmod proxy_fcgi
그리고 sudo service apache2 restart 명령으로 apache2를 재가동 해줍니다.
48(172.30.1.48)번 서버:
웹 서버입니다. 여기에 Apache가 설치되어 있습니다.
이 서버는 HTTP 80포트와 HTTPS 443포트가 외부에서 접근이 가능하도록 설정되어있습니다. 공유기 환경이라면 포트포워딩 설정이 되어있다는 거 겠죠?
이 서버가 하는 역할은 두가지가 존재합니다.
첫 번째는 내부에 도메인 별로 여러대의 웹서버가 있어서 도메인 별로 가상호스팅을 해주고 Proxy기능을 이용해 내부의 다른 웹서버와 연결해주는 역할을 합니다. a.com으로 온 요청은 요서버로 Proxy로 연결해주고 b.com으로 요청 온 것은 저 서버로 연결해줍니다. 이 예제에서는 git.kimtheho.com으로 요청이 들어온 경우 203서버의 Git서버로 연결해 줍니다. 여기서 203은 Git Server이면서 Web Sever이기도 합니다.
두 번째는 외부에서 들어온 HTTPS의 요청을 내부의 HTTP로 변환해주고, 내부에서 클라이언트 방향으로 가는 HTTP의 응답을 HTTPS로 변환해 주는 역할을 합니다.
203(172.30.1.203)번 서버:
이게 Git 서버 입니다. 여기에도 Apache가 설치되어 있습니다.
O/S: lubuntu 17.10 (루분투)
Git version 정보:
2.14.1
Apache version 정보:
Server version: Apache/2.4.27 (Ubuntu)
Server built: 2017-09-18T15:05:48
필요 선행학습:
1. Apache2 가상호스팅(서버 1대로 여러개의 도메인 별 웹 서버를 만드는 방법) 설정 방법.
######################################################
# 172.30.1.48번 서버 설정
#
######################################################
--------- 172.30.1.48 서버 아파치 가상호스팅 설정 파일 생성
sudo vi /etc/apache2/sites-available/git.kimtheho.com.conf
<VirtualHost *:80>
ServerAdmin admin@git.kimtheho.com
DocumentRoot /var/www/html
ServerName git.kimtheho.com
ErrorLog ${APACHE_LOG_DIR}/git.kimtheho.com_error.log
CustomLog ${APACHE_LOG_DIR}/git.kimtheho.com_access.log combined
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
Timeout 2400
ProxyTimeout 2400
ProxyBadHeader Ignore
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://172.30.1.203:80/
ProxyPassReverse / http://172.30.1.203:80/
</VirtualHost>
--------- 저장
--------- 적용sudo a2ensite git.kimtheho.com.conf
--------- 아파치 재시작
/etc/apache2/sites-available$ sudo service apache2 restart
--------- certbot을 활용한 인증서 설치
han@han:/etc/apache2/sites-available$ sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: git.kimtheho.com
2: hoho.kimtheho.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for git.kimtheho.com
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/git.kimtheho.com-le-ssl.conf
Deploying Certificate for git.kimtheho.com to VirtualHost /etc/apache2/sites-available/git.kimtheho.com-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/git.kimtheho.com-le-ssl.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting vhost in /etc/apache2/sites-enabled/git.kimtheho.com.conf to ssl vhost in /etc/apache2/sites-available/git.kimtheho.com-le-ssl.conf
-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://git.kimtheho.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=git.kimtheho.com
-------------------------------------------------------------------------------
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/git.kimtheho.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/git.kimtheho.com/privkey.pem
Your cert will expire on 2018-06-11. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
--------- 아파치 재시작
/etc/apache2/sites-available$ sudo service apache2 restart
######################################################
# 172.30.1.203번 서버 설정
#
######################################################
여기서 부터는 172.30.1.203 컴퓨터의 작업입니다.
필요한 모듈을 설치합니다:
sudo apt-get install git-core
아파치를 설치합니다:
sudo apt-get install apache2 apache2-utils
필요한 모듈을 활성화 합니다:
sudo a2enmod cgi alias env rewrite
--------- git.kimtheho.com 도메인에 대한 아파치 설정 파일을 세팅한다 ---------
sudo vi /etc/apache2/sites-available/git.kimtheho.com.conf
<VirtualHost *:80>
ServerAdmin admin@git.kimtheho.com
DocumentRoot /var/www/git
ServerName git.kimtheho.com
ErrorLog ${APACHE_LOG_DIR}/git.kimtheho.com_error.log
CustomLog ${APACHE_LOG_DIR}/git.kimtheho.com_access.log combined
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
<Directory /var/www/git>
Options +ExecCGI -Includes +SymLinksIfOwnerMatch
Require all granted
</Directory>
RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/ - [E=AUTHREQUIRED]
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile "/etc/git-auth-file"
Require valid-user
Order deny,allow
Deny from env=AUTHREQUIRED
Satisfy any
</Files>
ScriptAlias / /usr/lib/git-core/git-http-backend/
</VirtualHost>
저장 후 닫기
아파치 설정 파일 적용하기
$ sudo a2ensite git.kimtheho.com.conf
아파치 재 시작하기.
$ sudo service apache2 restart
이 예제에서 /var/www/git 디렉토리를 Git 작업용 디렉토리로 설정하여 작업하고 있습니다.
이제 실제 깃 저장소를 만들어 보겠습니다. 깃 서버에 있는 깃 저장소는 bare저장소입니다.
$ cd /var/www/git
$ sudo mkdir hoho.git
$ cd hoho.git
$ sudo git init --bare --shared
$ sudo mv hooks/post-update.sample hooks/post-update
$ sudo chmod a+x hooks/post-update
$ sudo git config http.receivepack true
$ cd /var/www
$ sudo sudo chgrp -R www-data git
이제 접근할 수 Git 계정을 생성해보겠습니다.
$ sudo htpasswd -c /etc/git-auth-file kimtheho
[sudo] password for kimtheho: <sudo의 패스워드를 입력합니다>
New password: <지금 생성하는 Git 계정의 패스워드를 입력합니다>
Re-type new password: <지금 생성하는 Git 계정의 패스워드를 다시 입력합니다>
Adding password for user kimtheho
--------- 아파치 재시작
$ sudo service apache2 restart
######################################################
# 잘 적용 되었는지 테스트하기
#
######################################################
이제 준비가 다 되었습니다. 아무 서버에가서 다음 명령을 입력해 봅니다:
git clone https://git.kimtheho.com/hoho.git
'kbot'에 복제합니다...
warning: 빈 저장소를 복제한 것처럼 보입니다.
연결을 확인하는 중입니다... 완료.
$ cd hoho/
$ ls
$ vi README.md
<아무내용이나 적고 저장 후 빠져 나옵니다.>
$ git add .
$ git commit -m 'init'
[master (최상위-커밋) 22b57a2] init
1 file changed, 1 insertion(+)
create mode 100644 README.md
$ git push
Username for 'https://git.kimtheho.com': kimtheho
Password for 'https://kimtheho@git.kimtheho.com':
오브젝트 개수 세는 중: 3, 완료.
오브젝트 쓰는 중: 100% (3/3), 211 bytes | 0 bytes/s, 완료.
Total 3 (delta 0), reused 0 (delta 0)
To https://git.kimtheho.com/hoho.git
* [new branch] master -> master
완료
문제 해결:
git 서버 변경 후, 클라이언트에서 push 했을 때 아래 에러가 난다면
error: 리모트 묶음 풀기 실패: unable to create temporary object directory
To https://git.domain.com/projectname.git
! [remote rejected] master -> master (unpacker error)
error: 레퍼런스를 'https://git.domain.com/projectname.git'에 푸시하는데 실패했습니다
다시한번 git 서버에 가서 git이 저장된 폴더의 권한을 재 조정해준다.
예를 들어 /var/www/git이라면,
sudo chown -R myID:www-data /var/www/git
여기서 myID는 실제 해당 계정으로 입력해 줘야 하면 해당 아이디는 whoami라는 명령어를 통해 확인할 수 있다.
클라이언트에서 add 했을 때 아래 에러가 난다면
$ git add .
error: insufficient permission for adding an object to repository database .git/objects
error: xxxx: failed to insert into database
error: unable to index file xxxx
fatal: 파일 업데이트가 실패했습니다
$ sudo chown -R myID:myID .(한 칸 띄고 쩜) <- 여기서 myID는 실제 해당 계정으로 입력해 줘야 하면 해당 아이디는 whoami라는 명령어를 통해 확인할 수 있다.
[sudo] myID의 암호:
myID@myID-ThinkPad-Edge:/var/www/html$ git add .
(성공)