본문 바로가기

Geek

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

쉬는 동안 뭔가 재밌는 일이 없을까.. 궁금해하던 차에 전에 있던 회사에서 나름 괜찮게 사용했던 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.