Ubuntu GitLab 설치하기 with apache, mysql


svn만 주구장창 써오다가 어느날 문득 시대에 너무 뒤처지는 느낌이라 git 를 써보고 싶었다. (심지어 회사에서는 cvs 를 쓴다)



그냥 개인적으로 로컬 git 리포지토리만 썼었는데 팀원이 쪼매 생기는 바람에 원격 리포지토리도 맹글 필요가 생겼졌다.



이것저것 알아봤는데 Window 용 git 서버도 있지만, 왠지 매우 있어보이는 GitLab 을 써보고 싶어서 Ubuntu 에다 설치해 보기로 했다.



먼저 기존에 Ubuntu 서버가 있으면 좋고, 아니면 컴퓨터를 하나 받아서 간지나게 전용 서버를 맹글어도 되고, 아니면 VirtualBox 에다 Ubuntu를 깔아도 된다.



설치과정중 이미 설치된 것들은 과감하게 스킵해도 될것같다.


설치할때 참고한 URL

공식 설치 가이드 : https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md

웹D 라는 분의 훌로구 : http://webdir.tistory.com/224‎


설치한 Ubuntu 버전 : Ubuntu 12.04.4 LTS





뭐 내용은 참고한 URL에 있는 내용과 거의 비슷하다.


단지 나는 개인적인 여건상 git.example.com 과 같이 간지나는 URL 을 쓸 수가 없어서 


www.example.com/git 요런식으로 기존 도메인의 서브 디렉토리로 접근할 수 있도록 하는점만 다를뿐이다.


사실 이것 때문에 살짝 삽질을 많이 하긴 했다.


아무튼 설치하는게 apt-get install 요렇게 딸랑하는 설치에 비교하면 무척 번거롭지만 설치해볼만한 가치는 있을것 같다.


자연스럽게 통합된 Git Server + Issue + Wiki 를 가질 수 있게된다.






최신 상태로 패키지 업데이트(해도 별로 손해 볼건 없을것 같으니까 일단 함)

sudo apt-get update -y
sudo apt-get upgrade -y





설치과정에 필요한 패키지 설치

sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate






Git 설치

# Git 버전은 1.7.10 이상 버전이 설치되야 한다고 한다.
# Ubuntu 에서 그냥 쌩으로 apt-get 으로 설치하면 1.7.9 버전이 설치된다.
# 혹시 최신버전이 설치되 있을 수 있을 수 있으니까 git --version 으로 한번 확인해 보고 없으면 아래 과정을 따라하면 된다.

# ppa 추가
# add-apt-repository 명령을 한번 해보고 없으면 python-software-properties 추가 설치 후 수행

sudo apt-get install -y python-software-properties
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update

# git 설치
sudo apt-get install -y git-core






루비 설치

# git 과 마찬가지로 apt-get 으로 ruby 를 설치하면 옛날 후진버전으로 설치가 된다.
# rvm 같은 걸로 최신버전을 손쉽게 설치할 수 있지만 공식문서에서는 rvm 으로 설치하는걸 별로 추천하지는 않았다.
# 루비 최신 소스를 내려받아서 컴파일 해서 설치하기
# 루비 최신 버전은 ftp://ftp.ruby-lang.org/pub/ruby/ 요기가서 보면 확인할 수 있다. 
# 최신 버전에 맞게 아래 url을 적당하 바꿔서 설치하면 된다.

mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz | tar xz
cd ruby-2.1.1
./configure --disable-install-rdoc

#쪼매 시간이 걸린다.
make
sudo make install

sudo gem install bundler --no-ri --no-rdoc







사용자 추가

# 왠만하면 사용자 이름은 git 으로 하길 바란다. 설정 파일들 보니까 git 이 아니면 상당히 설치하기가 힘들어 질것같다.
sudo adduser --disabled-login --gecos 'GitLab' git






GitLab Shell 설치

# 대충 보니까 GitLab WebUI 에서 요걸 호출해서 뭘 하는것 같다. 설치하자.
# https://gitlab.com/gitlab-org/gitlab-shell 에 가보면 최신버전을 확인할 수 있다.
# 최신버전 확인 후 아래 url 들을 눈치껏 적당히 바꿔주면 된다.

cd /home/git/
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-shell.git -b v1.9.1
cd /home/git/gitlab-shell


# 설정
sudo -u git -H cp config.yml.example config.yml

# 요파일에서 gitlab_url 어쩌고 하는 부분을 찾아 접속할 url을 써주면 된다.
# ex) gitlab_url: "http://stove99.tistory.com/git"  도메인이 없으면 http://127.0.0.1/git 요런식으로 ip로 해도 상관없다.
sudo -u git -H vi config.yml


# GitLab Shell 설치
sudo -u git -H ./bin/install







mysql 설치

# 기존에 mysql 이 설치되 있다면 넘어가도 좋지만 
# mysql-client 요거랑 libmysqlclient-dev 요거는 설치 안됐을 수도 있으니깐 꼭설치!
# 나는 기존에 mysql 이 설치되 있어서 과감히 뛰어넘었지만 
# mysql-client, libmysqlclient-dev 요거 설치안하는 바람에 뒤 과정에서 에러나서 삽질했음
# mysql 설치중 설정할 root 비밀번호 물어보는데 적당한 걸로 설정하면 됨.
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

#설치 완료후 mysql 접속
mysql -u root -p

# USER 생성
CREATE USER 'git'@'localhost' IDENTIFIED BY '원하는 비밀번호';

# DB 생성
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

# DB 권한 설정
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 
           ON `gitlabhq_production`.* TO 'git'@'localhost';

exit

# 방금 추가한 mysql 계정 접속 쪽바로 잘되나 확인
sudo -u git -H mysql -u git -p -D gitlabhq_production

exit





GitLab 설치

# GitLab-shell 과 마찬가지로 
# https://gitlab.com/gitlab-org/gitlab-ce.git 요기가서 최신버전 확인해서 URL 눈치껏 바꿔준다.
# 현재 최신버전은 6.7.2
cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-7-stable gitlab
cd /home/git/gitlab

#설정(할게 쫌 됨)
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# which git 으로 git 위치 확인
# host: localhost => host: stove99.tistory.com  (자신의 환경에 맞게 도메인이나 ip로 변경)
# relative_url_root: /gitlab 주석 제거 후 
# relative_url_root: /git 로 변경 (나는 stove99.tistory.com/git 으로 접속하고 싶으니깐)
# git:  아래쪽 bin_path: /usr/bin/git   이 which git 해서 알아낸 설치경로랑 똑같은지 확인
sudo -u git -H vi config/gitlab.yml


# ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab" 주석해제 후 
# ENV['RAILS_RELATIVE_URL_ROOT'] = "/git" 으로 변경
# listen 어쩌고 하는 두줄 주석처리 후 listen "127.0.0.1:9292"
# 9292 는 내가 해본거고 다른포트 쓸려면 다른포트 적어주면 됨.
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb


# config.relative_url_root = "/gitlab" 주석제거 후
# config.relative_url_root = "/git" 로 변경
sudo -u git vi config/application.rb


sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb


# 기타 잡다구리 설정
sudo -u git -H mkdir /home/git/gitlab-satellites

sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX  tmp/pids/
sudo chmod -R u+rwX  tmp/sockets/
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX  public/uploads

sudo -u git -H git config --global user.name "Stove"
sudo -u git -H git config --global user.email "stove@naver.com"
sudo -u git -H git config --global core.autocrlf input





mysql 접속설정 및 초기 데이터 입력

sudo -u git cp config/database.yml.mysql config/database.yml

# production: 아래에 password: "비밀번호" 설정
# 비밀번호는 mysql 에서 새로 추가한 git 계정 비밀번호를 적어주면 된다.
sudo -u git vi config/database.yml

sudo -u git -H chmod o-rwx config/database.yml

# 시간 살짝 걸림
sudo -u git -H bundle install --deployment --without development test postgres aws


# 초기 데이터 입력
# 명령어 입력하면 뭐라고 물어보는데 yes 입력 후 엔터치면 됨.
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production





GitLab 서비스 등록및 시작후로그램 추가

# service gitlab start 요래 하기 위한 스크립트 생성
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab

# 시작할때 start 되도록 처리
sudo update-rc.d gitlab defaults 21

# 뭐하는건진 잘 모름 기냥 했음.
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab






설정이 쪽바로 됐나 확인(url, git path 같은거 맞는지 확인)

sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production






GitLab 서비스 시작

sudo service gitlab start






Compile assets (뭐하는건지 잘 모름, 있길래 그냥 했음)

sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production






여기까지하면 일단 GitLab 설치는 다 했다.

이제 아파치랑 연동해서 웹으로 접근할 수 있도록 해야 한다.



아파치 설치 안돼 있으면 설치

sudo apt-get install apache




passenger 설치(자바로 치면 mod_jk 같은거 같다)

sudo apt-get install apache2-prefork-dev libapr1-dev libaprutil1-dev

sudo gem install passenger --no-rdoc --no-ri

# 아래 명령어 입력하면 뭐 물어보는거 같긴한데 내 경우 화면이 깨져서 뭔소린지 몰르겠다.
# 그냥 계속 엔터 치면 된다.
# 컴파일 끝나고 스크롤 살짝 올려보면 어째어째 설정하라고 설명으로 알려줌
# 여기서 which ruby 로 ruby 경로 알아내서 PassengerRuby 부분에 있는 경로랑 같은지 확인바람
sudo passenger-install-apache2-module


# passenger 모듈 apache에 추가
sudo vi /etc/apache2/mods-available/passenger.load

#파일내용(자신의 경로에 맞는지 확인 바람, 위에서 설명한대로 passenger 설치과정에서 요런거 다 알려줌.)
LoadModule passenger_module /usr/local/lib/ruby/gems/2.1.0/gems/passenger-4.0.40/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
    PassengerRoot /usr/local/lib/ruby/gems/2.1.0/gems/passenger-4.0.40
    PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>


#저장후 모듈 enable
sudo a2enmod passenger






proxy, proxy_http  mod 활성화

sudo a2enmod proxy
sudo a2enmod proxy_http







gitlab 사이트 등록

sudo ln -s /home/git/gitlab/public/ /var/www/git

sudo vi /etc/apache2/sites-available/git

# 파일내용
ProxyPass /git/uploads !     #아바타 이미지 나오게 /git/uploads 요청은 apache에서 처리
<Location /git/>
    ProxyPass http://127.0.0.1:9292/git/
    ProxyPassReverse http://127.0.0.1:9292/git/
</Location>





site 활성화

sudo a2ensite git





apache restart

sudo service apache2 restart





마지막으로 gitlab에서 관리자가 계정을 생성하면 계정 email 로 비밀번호를 발송하는데 요것 때문에 메일서버도 필요하다.

메일서버 설치방법은 요기 참고 : http://webdir.tistory.com/227


※ 설치하고 이것저것 만져보니 쪼금 귀찮아 지긴 하지만, 굳이 메일서버는 안깔아도 되긴된다.


※ 사용자 계정 생성후 다시 편집 화면으로 들어가면 관리자가 임의로 비밀번호를 설정할 수 있고 

 추가된 사용자가 로그인 했을때 비밀번호를 변경하게 시킨다.





요렇게 해주면 모든 설정이 끝난다.


별탈없이 무난하게 설치가 다 끝났다면


http://stove99.tistory.com/git 으로 접속해 보면 뽓 하고 접속이 된다.


ID : root

password : 5iveL!fe






접속해서 이것저것 해보자.


GitLab 사용법은 다음 기회에~~