Geek

Redmine(redmine_git_hosting) + git (gitolite) 연동하기. (in Ubuntu 12.04 TLS)

miro 2014. 1. 9. 16:30

쉬는 동안 뭔가 재밌는 일이 없을까.. 궁금해하던 차에 전에 있던 회사에서 나름 괜찮게 사용했던 redmine과 사용해볼 기회가 없었던 git을 연동해서 프로젝트를 관리해보는 방법을 익혀보기로 했다.


수많은 삽질 후에 정리해두는 차원에서 적어보기로 한거라.. 혹시나 이 블로그를 보고 질문할 사항은 Google 신에게 여쭤볼 것을 권한다. (나는 내 블로그에 자주 들어오지 않는 관계로.. ㅋ)


1. SSH 설치하기

이미 설치되어 있다면 당연히 이 과정은 생략해도 무방하다.

root $ apt-get install ssh


2. LAMP 설치하기

Redmine을 설치하기 전에 먼저 기본이 되는 아파치 서버와 MySQL을 먼저 설치해야 한다.

apt 를 이용한 패키지로 설치해도 되지만 일단 손쉽게 설치하기 위해 tasksel을 이용하여 LAMP (Linux Apache MySQL PHP)를 설치하도록 한다.

root $ apt-get install tasksel

root $ tasksel install lamp-server

root $ apt-get install libmysqlclient-dev libmagickcore-dev libmagickwand-dev

위 과정에서 MySQL root 패스워드를 물어본다. 적당한걸로 하자.

사실 여기까지는 기존에 있는 것이 있다면 그냥 쓰면 된다.


3. Redmine 및 Gitolite 사용자 추가하기.

여러번의 삽질 끝에 가장 관리하기 편한 방법이라고 생각되는 것이 각 계정 사용자를 통한 관리였다.

그래서 Redmine 과 Gitolite 사용자를 추가하여 관리하는 방식으로 처리하도록 하겠다.

root $ adduser --system --shell /bin/bash --gecos 'Git Administrator' --group --disabled-password --home /opt/gitolite git

root $ adduser --system --shell /bin/bash --gecos 'Redmine Administrator' --group --disabled-password --home /opt/redmine redmine

어차피 사용자 계정도 아니므로 /opt 디렉토리에 홈을 생성하는 방식을 취한다.


4. Redmine 설치.

Redmine을 설치하기 위해서는 RVM (Ruby Version Manager)를 설치하여 시스템에 영향을 끼치지 않는 방향으로 진행하도록 한다.

root $ apt-get install curl

root $ su - redmine

redmine $ curl -L https://get.rvm.io | bash


이후, /opt/redmine/.profile 파일을 수정하여 다음과 같이 환경변수를 적용한다.

# set PATH so it includes rvm bin if it exists

if [ -d "$HOME/.rvm/bin" ] ; then

  PATH="$PATH:$HOME/.rvm/bin"

fi


if [ -s "$HOME/.rvm/scripts/rvm" ] ; then

  source "$HOME/.rvm/scripts/rvm"

fi


if [ -s "$HOME/.rvm/scripts/completion" ] ; then

  source "$HOME/.rvm/scripts/completion"

fi


Ruby를 설치하기 전에 편의를 위해 다음과 같은 내용을 /etc/sudoers에 추가하도록 하자.

이 과정을 생략하게 되면 설치시 퍼미션 문제로 설치가 정상적으로 수행되기 어렵다.

root $ visudo

# 인스톨 완료후 삭제해야 할 필드.

redmine ALL=(ALL)           NOPASSWD:ALL


# add redmine + git permission

www-data ALL=(git)      NOPASSWD:ALL

www-data ALL=(redmine)  NOPASSWD:ALL

git      ALL=(redmine)  NOPASSWD:ALL

git      ALL=(www-data) NOPASSWD:ALL

redmine  ALL=(git)      NOPASSWD:ALL

redmine  ALL=(www-data) NOPASSWD:ALL


# If you have the requiretty set in the Defaults directive

Defaults:www-data !requiretty

Defaults:git     !requiretty

Defaults:redmine !requiretty


위 과정을 마치고 이제 Ruby를 설치하도록 하자.

root$ su - redmine

redmine$ rvm install 2.0.0-p247


제법 오래 걸렸다. 이제 드디어 Redmine을 설치하도록 하자. Redmine 역시 우분투 패키지로 설치하지 않는다. Redmine에서 배포하는 녀석을 설치하도록 하자. 

redmine $ wget http://www.redmine.org/releases/redmine-2.3.4.tar.gz

redmine $ tar xvzf redmine-2.3.4.tar.gz

redmine $ mv redmine-2.3.4/* .

redmine $ rm -rf redmine-2.3.4*


이제, MySQL에 사용자와 데이터베이스를 등록하도록 하자. 사용자는 redmine, 비밀번호도 redmine이다. 비밀번호를 변경하고 싶을 경우 아래의 붉은색으로 칠해진 부분을 원하는 비밀번호로 설정하면 된다.

redmine $ mysql -u root -p

mysql> CREATE DATABASE redmine CHARACTER SET utf8;

mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'redmine';

mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';


Redmine의 설정파일을 수정하도록 하자.

redmine $ cd /opt/redmine/config

redmine $ cp database.yml.example database.yml

redmine $ cp configuration.yml.example configuration.yml

각각의 파일의 내용은 다음과 같다.

/opt/redmine/config/database.yml

production:

  adapter: mysql2

  database: redmine

  host: localhost

  username: redmine

  password: "redmine"

  encoding: utf8


development:

  adapter: mysql2

  database: redmine_development

  host: localhost

  username: redmine

  password: "redmine"

  encoding: utf8


test:

  adapter: mysql2

  database: redmine_test

  host: localhost

  username: redmine

  password: "redmine"

  encoding: utf8

/opt/redmine/config/configuration.yml

# 메일 설정. (Ex. gmail)

default:

  email_delivery:

    delivery_method: :smtp

    smtp_settings:

      enable_starttls_auto: true

      address: smtp.gmail.com

      port: 587

      domain: smtp.gmail.com

      authentication: :plain

      user_name: "wtf@gmail.com"

      password: "what the freak"


# 첨부파일 설정

  attachments_storage_path: /opt/redmine/files

# git 설정

  scm_git_command: /usr/bin/git


위 설정까지 마친 후 Redmine과 연동할 plugin assets 디렉토리를 미리 생성한다.

redmine $ cd ~

redmine $ mkdir public/plugin_assets


자 이제 Redmine 설치준비가 대략 끝났다. 이제 설치하자.

redmine $ gem install bundler

redmine $ bundle install --without development test postgresql sqlite rmagick

redmine $ rake generate_secret_token

redmine $ RAILS_ENV=production rake db:migrate

redmine $ RAILS_ENV=production rake redmine:load_default_data

마지막 명령 수행 후 언어를 설정하는 부분에서 한국어(ko)를 선택하면 된다.


5. Redmine + Gitolite 연계

Gitolite와 연계를 하기 위해서는 먼저 Gitolite의 관리자를 Redmine이 하기 위해 공개키를 생성해야 한다. 그러기 위해서 다음과 같은 일을 수행하도록 하자.

redmine $ mkdir ~/.ssh

redmine $ cd ~/.ssh

redmine $ ssh-keygen -t rsa -N '' -f gitolite_admin_id_rsa

redmine $ ls

gitolite_admin_id_rsa  gitolite_admin_id_rsa.pub

redmine $ ln -s gitolite_admin_id_rsa id_rsa

위와 같이 두개의 파일이 생성되어 있을 것이다.


Redmine에 Gitolite와 연계할 plugin인 redmine_git_hosting plugin을 설치하도록 하자.

redmine $ sudo apt-get install git git-core gitolite

redmine $ cd /opt/redmine/plugins

redmine $ git clone https://github.com/jbox-web/redmine_git_hosting.git

redmine $ git clone https://github.com/jbox-web/redmine_plugin_views_revisions.git

redmne $ cd ~

redmine $ bundle install

redmine $ RAILS_ENV=production rake redmine:plugins:migrate

redmine $ RAILS_ENV=production rake redmine:plugins:process_version_change

redmine $ rake redmine_git_hosting:install_scripts RAILS_ENV=production WEB_USER=redmine

이로써 Redmine 설치와 관련된 패키지들은 모두 설치가 된 상태이다.


이젠 Gitolite에 대한 설정을 수행하도록 하자.

redmine $ sudo dpkg-reconfigure gitolite

======= 다음의 사항을 입력한다.

user: git

repos path: /opt/gitolite

admin ssh-key: /opt/redmine/.ssh/gitolite_admin_id_rsa.pub

======= 입력 끝.

redmine $ ssh -v git@localhost

....

hello admin, this is gitolite 2.2-1 (Debian) running on git 1.7.9.5

the gitolite config gives you the following access:

     R   W gitolite-admin

    @R_ @W_ testing

....

위와 같이 표시가 된다면 설정이 잘 된 것이다.


6. Apache mod_passenger 설치 및 실행.

Apache를 통해 서비스 하는 것이 아무래도 관리하기가 편하다. Ruby로 개발된 Redmine을 동작시키기 위해서는 mod_passenger 라는 Apache 확장 모듈이 필요하므로 해당 모듈을 설치해서 적용하도록 하자.

redmine $ gem install passenger

redmine $ sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev apache2-prefork-dev libapr1-dev libaprutil1-dev

redmine $ passenger-install-apache2-module

이제 컴파일이 시작된다. 물어보는 단계에서는 그냥 엔터치면 된다.


마지막에 나오는 내용이 매우 중요하다. 해당 내용은 아마 다음과 같을 것이다.

--------------------------------------------

The Apache 2 module was successfully installed.


Please edit your Apache configuration file, and add these lines:


   LoadModule passenger_module /opt/redmine/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.33/buildout/apache2/mod_passenger.so

   PassengerRoot /opt/redmine/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.33

   PassengerDefaultRuby /opt/redmine/.rvm/wrappers/ruby-2.0.0-p247/ruby


After you restart Apache, you are ready to deploy any number of web

applications on Apache, with a minimum amount of configuration!


Press ENTER to continue.


자 이제 위 내용을 Apache 설정에 적용하도록 하자. (파일이 없으면 생성하고, 있으면 수정하면 된다.)

/etc/apache2/mods-available/passenger.load

LoadModule passenger_module /opt/redmine/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.33/buildout/apache2/mod_passenger.so

/etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>

    PassengerRoot /opt/redmine/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.33

    PassengerDefaultRuby /opt/redmine/.rvm/wrappers/ruby-2.0.0-p247/ruby

    PassengerDefaultUser www-data

</IfModule>

붉은색 내용이 추가된 내용이니 잊지 말고 추가하자.


마지막으로 아파치 설정을 다음과 같이 하도록 하자.

redmine $ sudo su -

root $ cd /var/www

root $ ln -s /opt/redmine/public redmine

/etc/apache2/sites-available/redmine

RailsBaseURI /redmine

PassengerUserSwitching on

PassengerUser redmine

PassengerGroup redmine


모든 설정이 끝났으면 이제 적용하고 재시작 하도록 하자.

root $ a2enmod passenger

root $ a2ensite redmine

root $ service apache2 restart


Maybe source will be with you.