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