S/W 개발 기반 시스템 구성 – 4. Redmine 설치
이 글은 S/W 개발에 가장 기본이 되는 이슈 추적(Issue Tracker), 버전 관리(Version Control), 빌드(Build), 지속적인 통합(CI) 시스템을 구성하는 방법에 대한 일련의 글 중 네 번째이다. 이번에는 이슈 관리 시스템으로 사용할 Redmine을 설치해 본다.
1. 미리 준비해야 하는 것들
- 현재 Redmine은 1.2.0이며 여기에서 받을 수 있다.
- Redmine에는 Ruby(루비)가 필요한데 1.9 버전은 지원하지 않으므로 1.8.x 버전을 Ruby 공식 사이트 또는 RubyInstaller에서 받는다.
- MySQL은 5.0 이상을 권장하며 여기에서 받는다.
- Gantt를 png 파일로 내보내려면 RMagic이 필요하다. 여기에서 win32용 바이너리를 받는다. 한글 처리에 문제가 있다.
2. 설치
먼저 Ruby를 설치한다. 설치 과정 중에도 안내가 나오지만 설치 경로에 빈 칸이 없도록 주의한다. 설치 과정을 따라 그대로 진행하면 별 문제 없다.
Redmine 공식 배포판에는 필요한 Rails(레일스)와 Rack이 있으므로 따로 설치하지 않아도 되지만 소스를 받는다면 명령행에서 다음을 입력해 설치한다. 참고로 gem은 관련 라이브러리를 쉽게 설치, 삭제할 수 있는 패키지 매니저이다.
1 |
gem install rails -v=2.3.11 --include-dependencies |
gem은 기본으로 설치되어 있지만 만약 설치해야 한다면 다음을 명령 행에서 입력한다[1].
1 |
gem update -system |
다음 명령을 실행하고 rake 0.8.7
, i18n 0.4.2
, rack 1.0.1
이 있는지 확인한다. Redmine 1.2.0에서는 rack 1.1.1
이 필요하다고 되어 있으나 실제 포함된 rails 패키지가 2.3.5이므로 rack 1.0.1
을 사용해야 한다.
1 |
gem list --local |
없거나 버전이 맞지 않으면 다음처럼 설치한다.
1 2 3 |
gem install rake -v=0.8.7 gem install i18n -v=0.4.2 gem install rack -v=1.0.1 |
Redmine은 설치할 곳에 압축을 풀어 준다. 여기서는 C:\redmine
에 압축을 풀어 설치했다.
정보를 저장할 DB인 MySQL을 설치한다. 설정 과정에서 인코딩은 UTF-8로 지정한다. 그리고 Ruby에서 MySQL에 접속할 때 성능을 높일 수 있도록 C 바인딩을 설치한다.
1 |
gem install mysql |
다음 내용으로 빈 DB를 만든다.
1 2 3 4 |
mysql -u root -p mysql> create database redmine character set utf8; mysql> create user 'redmine'@'localhost' identified by 'my_password'; mysql> grant all privileges on redmine.* to 'redmine'@'localhost'; |
만약 MySQL이 5.0.2 이전이면 create user
과정 대신 다음을 한다.
1 |
mysql> grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'my_password'; |
이제 Redmine에 DB 접속 정보를 설정한다.
C:\redmine\config\database.yml.example
파일을 복사해 C:\redmine\config\database.yml
파일을 만들고 다음과 같이 수정한다.
1 2 3 4 5 6 7 8 |
production: adapter: mysql database: redmine host: localhost username: redmine password: my_password port: 3306 encoding: utf8 |
포트 정보는 MySQL 기본값인 3306을 사용하지 않을 때만 지정해도 된다.
Session store secret을 만든다. Redmine을 설치한 최상위 위치(여기서는 C:\redmine
)에서 한다.
1 |
rake generate_session_store (or rake config/initializers/session_store.rb) |
실행 후 C:\redmine\config\initializers\session_store.rb
파일이 만들어 진 것을 확인한다.
DB 구조를 만든다. Redmine을 설치한 최상위 위치에서 다음을 실행한다. libmySQL.dll
파일을 참조할 수 없으면 DB 마이그레이션 과정에서 에러가 발생하니 Ruby187\bin
에 넣어준다.
1 2 |
set RAILS_ENV=production rake db:migrate |
만약 다음과 같은 에러가 생기면,
gem 버전이 맞지 않아 생기는 문제이므로 다음처럼 gem 버전을 1.4.2로 바꾸고 한다[2].
1 |
gem update --system 1.4.2 |
또는 여기에서 직접 받아 설치한다. zip 파일을 받아 압축을 풀고 다음처럼 설치한다.
1 |
ruby setup.rb |
만약 아래와 같은 에러가 발생하면,
MySQL 라이브러리가 맞지 않아 발생하는 현상이므로 여기에서 libmySQL.dll
을 받은 후 앞에서 Ruby187\bin
에 넣은 것과 바꿔준다.
DB 구조를 다 만들었으면 기본 설정 정보를 추가한다. 앞에서 RAILS_ENV
를 환경 설정에 추가했으면 다시 하지 않아도 된다. 각 항목에서 사용하는 기본값을 추가하는데 한글로 하려면 ko
를 사용한다. 기본값은 영문이다. 이 설정과 관계 없이 메뉴를 한글로 바꾸는 것은 Redmine 설정 메뉴에서 한다.
1 2 |
set RAILS_ENV=production rake redmine:load_default_data |
여기까지 했으면 모든 설치는 마쳤고 이제 동작하는지 확인할 차례이다. 명령 행에서 아래 내용을 실행한 후 접속해 본다. 기본으로 사용하는 포트는 3000번이므로 여기서는 http://plab.net:3000
으로 접속했다. 관리자 계정은 admin / admin이다. 접속 전에 방화벽 설정도 확인한다.
1 |
ruby script/server webrick -e production |
이제 실제 사용을 위해 Apache 웹 서버와 연동한다. 리눅스라면 Phusion Passenger를 사용하는 것 같은데 윈도에서는 mongrel로 clustering을 할 수 있다. 먼저 mongrel을 설치한다.
1 |
gem install mongrel mongrel_service --include-dependencies |
mongrel을 gem 파일로 받아 설치한다면 gem_plugin
, cgi_multipart_eof_fix
도 필요하므로 먼저 설치한다.
1 2 |
gem install gem_plugin gem install cgi_multipart_eof_fix |
prefix를 사용하려면 mongrel 패치를 해야 한다. C:\redmine\config\initializers
에 파일을 만들고 (이름은 상관 없으며 여기서는 mongrelpatch.rb
로 만들었다) 다음 내용을 넣는다.
1 2 3 4 5 6 7 8 9 10 |
module ActionController class AbstractRequest < ActionController::Request def self.relative_url_root=(path) ActionController::Base.relative_url_root=(path) end def self.relative_url_root ActionController::Base.relative_url_root end end end |
로드 밸런싱(load balancing)을 할 수 있도록 명령 행에서 다음 내용을 실행해 서비스를 두 개 등록한다.
1 2 3 4 |
mongrel_rails service::install -N redmine1 -D redmine1 -p 3001 -n 1024 -c C:redmine -e production --prefix=/redmine mongrel_rails service::install -N redmine2 -D redmine2 -p 3002 -n 1024 -c C:redmine -e production --prefix=/redmine net start redmine1 net start redmine2 |
참고로 서비스 삭제는 mongrel_rails service::remove -N redmine1
로 할 수 있다.
다시 접속 확인을 해 본다. 이번에는 포트를 3001, 3002로 지정하고 접두어를 사용했으므로 http://plab.net:3001/redmine
, http://plab.net:3002/redmine
으로 접속해야 한다[3]. 확인 후 서비스 실행을 자동으로 바꾼다.
httpd.conf
파일에 다음 내용을 추가한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so <IfModule proxy_balancer_module> ProxyPass /redmine balancer://redmine_cluster ProxyPassReverse /redmine balancer://redmine_cluster <Proxy balancer://redmine_cluster> BalancerMember http://127.0.0.1:3001/redmine BalancerMember http://127.0.0.1:3002/redmine </Proxy> </IfModule> |
이제 Apache 웹 서버를 다시 실행하고 http://plab.net/redmine
으로 접속하면 된다.
3. 설정
인증을 이전에 설치한 OpenLDAP을 사용하도록 바꾼다.
Administration – LDAP authenticaion 메뉴에서 New authentication mode를 선택 후 다음처럼 설정한다.
Redmine에 계정은 다음과 같은 과정으로 추가한다.
- 사용자가 Redmine에 등록
- 사용자가 등록한 계정 정보대로 관리자가 OpenLDAP에서 ou=People 아래에 계정 추가
- Redmine에서 관리자가 계정을 승인하면서 인증 방법을 internal에서 LDAP으로 변경
- 이때 관리자는 기본 암호를 부여하고 사용자는 Ldap Admin 같은 프로그램을 사용해 LDAP에서 자기 계정 암호를 직접 바꾸도록 한다.
저장소 통계 화면은 구글 크롬에서는 정상으로 볼 수 있으나 IE8에서는 볼 수 없으므로 필요하면 여기에서 SVG 뷰어를 받아 설치한다. 단 한글이 제대로 안 나오는 문제가 있다.
이메일로 변경 내용을 받으려면 C:\redmine\confige\mail.yml.example
파일을 복사해 C:\redmine\configemail.yml
파일을 만들고 필요한 내용을 설정한다.
1 2 3 4 5 6 7 8 9 |
production: delivery_method: :smtp smtp_settings: address: 127.0.0.1 port: 25 domain: plab.net authentication: :login user_name: account password: password |
설정 후 Redmine 서비스를 다시 실행하고 Administration – Settings 메뉴에서 Email notifications 탭을 선택해 추가 설정을 한다.
설치한 gem과 Redmine 정보를 정리하면 다음과 같다. Redmine 정보를 보려면 Redmine을 설치한 최상위 위치에서 한다.
마지막으로 프로젝트별 저장소 설정은 해당 프로젝트를 선택한 후 Settings – Repository를 선택한 후 다음과 같이 한다.
이 때 주의할 점이 있다. 파일 이름이 한글이면 Redmine에서 Mercurial 저장소 내용을 볼 때 internal error가 발생한다. Mercurial에서 파일 이름을 한글로 쓰는 것은 문제가 없지만 Redmine과 연동을 한다면 주의해야 한다.
[2] RubyGems 1.4.2 버전은 1.5.2 버전과 달리 미리 받아 둔 gem 파일을 설치하지 못하고 항상 인터넷을 통해 다운로드해 설치하려 하므로 인터넷 연결을 못하는 서버에서 gem 파일로 설치할 때는 RubyGems를 1.5.2로 다시 바꿔 설치한다. 설치 후에는 다시 1.4.2로 바꿔야 Redmine을 사용할 수 있으니 주의한다.
[3] RubyGems 버전이 1.5.2이면 접속할 수 없으니 1.4.2로 바꾸고 접속한다.