Docker라는 놈도 Ubuntu 환경에서 그다지 유연하고 편하게 사용할 수 있는 것은 아닌 것 같다.

 

일단, 32bit 환경은 지원하지 않는다. 64bit 환경에서만 Docker를 사용할 수 있다.

또 하나는 12.04 에서는 Docker를 패키지로 바로 제공해주지 않는다.

 

Docker에서는 나름 편하게 설치할 수 있도록 도움은 주고 있지만, 솔직히 좀 귀찮다.

 

 

 

1. Docker 설치

 

$ sudo apt-get install curl

 

$ curl -sSL https://get.docker.com/ | sh

 

$ docker --version
Docker version 1.8.2, build 0a8c2e3

 

 

2. Docker Group 설정

 

사용자 계정으로 docker를 실행할 수 있는지 다음과 같이 확인해보자.

 

$ docker run hello-world
Post http:///var/run/docker.sock/v1.20/containers/create: dial unix /var/run/docker.sock: permission denied.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

 

위와 같이 나온다면 권한이 없는 것이다. 다음과 같이 그룹 설정을 하자.

 

$ sudo usermod -aG docker <사용자 계정>

 

 

위와 같이 한 뒤에 다시 재로그인을 해야 한다. (심지어 재부팅이 필요할수도)

 

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

 

535020c3e8ad: Pull complete
af340544ed62: Pull complete
Digest: sha256:a68868bfe696c00866942e8f5ca39e3e31b79c1e50feaee4ce5e28df2f051d5c
Status: Downloaded newer image for hello-world:latest

 

Hello from Docker.
This message shows that your installation appears to be working correctly.

 

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

 

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

 

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

 

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

 

 

3. Redmine pull

 

$ docker pull sameersbn/postgresql:9.4-4

 

$ docker pull sameersbn/redmine:3.1.1

 

 

 

4. Redmine Run

 

$ docker run --name=postgresql-redmine -d --env='DB_NAME=redmine_production' --env='DB_USER=redmine' --env='DB_PASS=password' --volume=/srv/workspace/redmine/postgresql:/var/lib/postgresql sameersbn/postgresql:9.4-4

 

$ docker run --name=redmine -d --link=postgresql-redmine:postgresql --publish=10083:80 --env='REDMINE_PORT=10083' --volume=/srv/workspace/redmine/redmine:/home/redmine/data sameersbn/redmine:3.1.1

 

 

 

아직은 많은 이해와 활용력이 부족하여 이번 포스팅에서 설명을 달지는 않겠다.

일단 위와 같이 진행을 하면 http://localhost:10083 으로 접속을 하면 Redmine을 만날 수 있다!

 

 

참고 : https://github.com/sameersbn/docker-redmine#installation

 

 

반응형

 

 

기존에 redmine을 설치할 때에는 Ruby의 난관에 부딪히다보니 root 계정을 통해 설치 진행을 했다.

당연히 권한 관리에 문제의 여지가 있지만... Ruby의 난관이 높다보니...

그래서 이번에는 사용자계정을 이용해서 설치하는 것을 해보고자 한다!

 

한동안 Redmine을 버려두고 있다보니... 오랜만에 살펴보니...

어느덧 3.1.1 버전까지 나온 Redmine !

 

 


00. 버전 호환성 확인하기

   - Redmine이 지원하는 Ruby 버전은 아래와 같다.

 Redmine  Supported Ruby  Required Rails

 current trunk
 3.0

 ruby 1.9.3, 2.0.0, 2.1, 2.2  Rails 4.2

 

 

01. 기본 패키지 설치

 

$ sudo apt-get install apache2 curl bison libbison-dev zlib1g-dev libssl-dev sqlite3 libsqlite3-dev autoconf automake build-essential libtool libreadline6-dev libyaml-dev libxml2-dev libcurl4-openssl-dev libssl-dev libgpg-error-dev autotools-dev imagemagick libmagickcore-dev libmagickwand-dev

 

 

02. Ruby 설치
 

$ sudo add-apt-repository ppa:brightbox/ruby-ng

$ sudo apt-get update

$ sudo apt-get install ruby2.1 ruby-switch ruby2.1-dev libruby2.1

$ sudo ruby-switch --set ruby2.1

 


03. Redmine 계정/그룹 생성
 

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

 

$ sudo visudo

 

# temp - *REMOVE* after installation
redmine    ALL=(ALL)      NOPASSWD:ALL

 


04. rvm 설치

 

- 여기에서 주의할 점은 redmine 계정으로 설치를 진행한다는 점이다. 이 부분을 주의해서...

 

$ sudo su - redmine
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ curl -sSL https://get.rvm.io | bash -s stable
$ exit

 

$ sudo su - redmine
$ rvm install 2.1.4
$ exit 

 

 

05. Redmine 다운로드

 

$ sudo su - redmine 

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

$ ln -s /srv/redmine/redmine-3.1.1 redmine

$ exit


 

06. PostgreSQL 설치 및 설정

 

$ sudo apt-get install postgresql libpq-dev

$ sudo su - postgres
$ psql

 

# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
# \q


$ exit

 

$ sudo su - redmine 

$ cp redmine/config/database.yml.example redmine/config/database.yml

$ nano redmine/config/database.yml

 

production:
        adapter: postgresql
        database: redmine
        host: localhost
        username: redmine
        password: "redmine"
        encoding: utf8
        schema_search_path: public


     - 주의 사항으로는 위의 파일 내용을 입력할 때에 Tab 말고 White-Space로 입력해야 한다.

$ exit

 

 

07. bundler & install

$ sudo su - redmine

$ cd ./redmine
$ gem install bundler
$ bundle install --without development test mysql sqlite

$ rake generate_secret_token
$ RAILS_ENV=production rake db:migrate
$ RAILS_ENV=production rake redmine:load_default_data

→ ko (enter)
$ exit

 


08. Redmine 계정 정리

 

$ sudo visudo

 

- 아래 부분 제거

 

# temp - *REMOVE* after installation
redmine    ALL=(ALL)      NOPASSWD:ALL

 


09. Passenger 설치

 

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

$ sudo apt-get update 

$ sudo apt-get install apt-transport-https ca-certificates

$ sudo nano /etc/apt/sources.list.d/passenger.list

 

12.04

deb https://oss-binaries.phusionpassenger.com/apt/passenger precise main

 

14.04

deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

 

$ sudo chown root:root /etc/apt/sources.list.d/passenger.list
$ sudo chmod +r /etc/apt/sources.list.d/passenger.list

 

$ sudo apt-get update
$ sudo apt-get install libapache2-mod-passenger

 

$ sudo nano /etc/apache2/mods-available/passenger.conf

 

...

PassengerUserSwitching on
PassengerUser redmine
PassengerGroup redmine

...

 

 

10. Apache 설정

 

12.04

$ sudo nano /etc/apache2/sites-available/default

 

14.04

$ sudo nano /etc/apache2/sites-available/000-default.conf

 

...

<Directory /var/www/html/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
</Directory>

...

 

$ sudo a2enmod passenger
$ sudo ln -s /srv/redmine/redmine/public /var/www/html/redmine
$ sudo service apache2 restart

 

 

- 아래와 같이 에러메시지가 보이면... 다음 링크를 참고!!

: http://www.whatwant.com/440

 

$ sudo service apache2 restart
 * Restarting web server apache2                                                                             AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

 

 

여기까지 진행하고 웹브라우저로 localhost/redmine에 접속을 하면 Redmine을 볼 수 있다.

초기 관리자는 admin/admin 이다.

 
반응형
  1. 이정민 2015.12.07 17:44

    정말 감사합니다!
    덕분에 설치할 수 있었어요.
    다른 블로그들에 있는 글들은 어딘가가 잘 안됐었는데 소개해주신 내용으로 설치 됐습니다.

    다만, ln -s ... 부분은

    ln -s /opt/redmine/redmine/public /var/www/redmine

    처럼 바꿔서 진행했습니다-



01. 기본 패키지 설치

$ sudo apt-get install build-essential libpcre3-dev libruby libssl-dev libcurl4-openssl-dev libpq-dev libreadline-dev libjpeg62-dev libpng12-dev curl openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libc6-dev libncurses5-dev automake libtool bison pkg-config


02. Ruby 설치

$ sudo su -
$ curl -L https://get.rvm.io | sudo bash -s stable
$ source /etc/profile
$ rvm install 2.0.0
$ rvm use 2.0.0
$ rvm --default use 2.0.0

$ nano /etc/environment


PATH="......:/usr/local/rvm/bin"




03. Rails 설치

$ gem install rdoc
$ gem install rails -v 3.2.13
 

04. PostgreSQL 설치 및 설정

$ apt-get install postgresql

$ su - postgres
$ psql

# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
# \q

$ exit
$ gem install pg


05. ImageMagick

$ apt-get install imagemagick librmagick-ruby libmagickwand-dev
$ gem install rmagick



06. Redmine

$ cd /srv/install/
$ wget http://www.redmine.org/releases/redmine-2.4.1.tar.gz
$ tar zxvf  redmine-2.4.1.tar.gz


07. bundler & install

$ cd redmine-2.4.1
$ gem install bundler

$ reboot

$ sudo su -
$ cd /srv/install/redmine-2.4.1
$ bundle install --without development test mysql sqlite


08. Apache2 설치

$ apt-get install apache2 apache2-prefork-dev


 

09. passenger 설치

$ gem install passenger
$ cd /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29/
./bin/passenger-install-apache2-module

 

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

<IfModule mod_passenger.c>
   PassengerUser www-data
   PassengerDefaultUser www-data

   PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29
   PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-2.0.0-p353/ruby
</IfModule>

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

LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29/buildout/apache2/mod_passenger.so


$ cd /etc/apache2/mods-enabled
ln -s ../mods-available/passenger.conf ./passenger.conf
ln -s ../mods-available/passenger.load ./passenger.load


10. database 설정값 등록

$ cd /srv/install/redmine-2.4.1
$ nano ./config/database.yml

 

production:
        adapter: postgresql
        database: redmine
        host: localhost
        username: redmine
        password: redmine
        encoding: utf8
        schema_search_path: public


     - 주의 사항으로는 위의 파일 내용을 입력할 때에 Tab 말고 White-Space로 입력해야 한다.


11. 추가 작업

$ rake generate_secret_token
$ RAILS_ENV=production rake db:migrate
$ RAILS_ENV=production rake redmine:load_default_data
   → Select language [ko]
$ mkdir public/plugin_assets

 

$ chown -R www-data:www-data files log tmp public
$ chmod -R 755 files log tmp public/plugin_assets
$ chown -R www-data:www-data ./config/database.yml
$ chmod 600 ./config/database.yml


 

12. 웹설정

$ cd /var/www/
$ ln -s /srv/install/redmine-2.4.1/public ./redmine

$ nano /etc/apache2/sites-available/default


<Directory /var/www/redmine>

        RailsBaseURI /redmine
        RackEnv production
        RailsEnv production
        PassengerResolveSymlinksInDocumentRoot on

</Directory>


$ service apache2 restart


여기까지 진행하고 웹브라우저로 http://127.0.0.1/redmine에 접속을 하면 Redmine을 볼 수 있다.

초기 관리자는 admin/admin 이다.

반응형
  1. BlogIcon mizniz 2014.03.22 18:20

    pgsql 쓰시는군요. pgsql 쓰시는 분을 좀처럼 만나뵙기 힘든데 반가워서 댓글 답니다. Redmine pdf 한글 문제 때문에 흘러들어 왔습니다.


개인적인 생각이라는 점을 전제하고,
자고로 Server라면 운영체제로 Linux를 사용하는 것이 백번이면 백번 편리하고 유리하다.

그리고, 최근 오픈(프리) 소프트웨어들의 품질도 상당한 수준이므로,
되도록이면 오픈 소프트웨어를 선택하여 비용적인 측면과 함께 성능적인 측면에서도 많은 이득을 볼 수 있다.



하지만, 예전 슬렉웨어 시절을 생각하면 최근 리눅스들은 상당히 편리하고 쉬워진 것이 사실이지만...
리눅스에 대한 거부감과 함께 윈도우즈에 대한 익숙함으로... (사실 예전에 비해 윈도우 서버도 좋아졌기에)
윈도우 서버를 추구하는 많은 분들이 계시기에...

윈도우 환경에서 Redmine을 설치하는 것에 대해서 살펴보고자 한다.



윈도우에서 Redmine Server를 구동하시려는 분들이라면 (정말 피치못할 상황이 있을 수도 있지만!!!)
서버 환경에 대한 매뉴얼한 설정 및 기타 사항들에 대해서 익숙치 않은 경우가 많으므로...

서버 소프트웨어를 편리하게 사용할 수 있도록 패키징해서 제공해주는 BitNami를 활용해보자.


1. BitNami
   - http://bitnami.com/
   - 일반 사용자들이 서버 소프트웨어를 설치하는 것이 그다지 녹록치 않기에
     한 번의 클릭으로도 손쉽게 설치할 수 있도록 패키징하여 제공하기도 하고 Cloud 환경으로 제공해주기도 하는 곳이다.


   - BitNami에서는 다음의 3가지 방법으로 제공을 해준다.
      ▷ 직접 설치하기 위한 "On your DESKTOP"
      ▷ VMWare와 같은 가상머신 이미지로 제공해주는 "On your SERVERS"
      ▷ 클라우드 환경으로 바로 사용할 수 있는 "Or in THE CLOUD"


2. Download
   - 우리는 당연히(?) 직접 설치를 해볼 것이기에 "On your DESKTOP"을 선택해서 'Download Now'를 클릭한다.
   - BitNami에서는 이렇게 패키징해서 제공해주는 묶음을 Stack이라고 표현한다.


   - Redmine이 제일 먼저 보인다 !!!


   - 이 회사도 먹고 살아야 하니... 계속 돈되는(?) 서비스를 노출하고 있다.
   - 마음이 아프지만, 돈이 안되는... Installer 부분을 선택하자.
   - 제공해주는 다른 Stack을 살펴보고 싶으면 오른쪽 말풍선의 "View all operating system and ..." 부분을 클릭하면 된다.


   - 회원가입을 요청하지만, 별도 로그인을 하지 않아도 다운로드 받을 수는 있다. (제일 하단 클릭)
   - 무엇인가 계속 미안해지는 마음이다.



3. Install
   - 다운로드 받은 파일을 실행하면 제일 먼저 언어 선택화면이 나온다.
   - 친절하게 한국어도 있다. 파이팅 !!!


   - 그리고 진행하다보면 설치할 내역을 선택하는 화면이 나온다.


   - 설치해서 나쁠 것 없으니 전부 선택된 상태에서 계속 진행하자.
   - 이후 설치 경로나Admin 계정 설정과 같은 일반적인 상황은 따로 설명하지 않겠다. 


   - Email notification을 위한 SMTP 설정을 물어보는 화면이다.
   - 대중적인 GMail 설정은 선택만 하면 되고, 다른 환경이라면 사용자정의를 선택해서 직접 설정하면 된다.


   - 각자의 환경에 맞게 입력하면 된다.


   - 최근 이러한 비즈니스 모델을 활용하는 업체들이 많다. 클라우드... 좋긴한데... ^^

 


   - 이제, 실제 파일들을 설치 진행하게 된다... 좀 시간이 걸린다.



4. 1st Execute
   - http://localhost/


   - 왼쪽 위의 Redmine 아이콘을 클릭해보면.... 드디어 !!!


   - 그렇다! 드디어 Redmine이 실행된 것이다 !!!
   - 오른쪽 위의 로그인을 선택하자.


   - 설치과정에서 입력한 admin 정보로 로그인하면 된다.


   - 관리 메뉴와 같은 부분은 여기에서는 생략하겠다.


5. Software...
   - 설치된 경로와 파일들을 살펴보자.


   - Install 과정에서 별도로 지정하지 않았다면 위와 같은 경로에 설치가 되었을 것이다.

   - 디렉토리를 잘 살펴보면... 참 많은 소프트웨어들이 설치되어있는 것을 확인할 수 있을 것이다.
      ▷ Apache
      ▷ MySQL
      ▷ Git
      ▷ Subversion
      ▷ PHP
      ▷ Ruby
      ▷ ImageMagicK

   - 서버를 운영한다면 위에 나열된 것들을 포함해서 모든 항목들에 대해서 관리할 수가 있어야 한다.
   - 다만, BitNami에서 제공하는 패키지(stack ?)을 통해 간단히 설치가 되었을 뿐이다.
   - 실제 서버를 운영한다고 하면 이에 대한 공부를 게을리하면 큰 코 다치게 될 것이다 !!!


일단, BitNami Redmine Stack을 통한 설치는 여기까지~
반응형
  1. BlogIcon kto2005 2013.09.24 11:37 신고

    안녕하세요 우연히 레드마인을 설치하기 위하여 검색을 했는데 알맞는 게시물이 나왔네요
    한가지 궁금한것이 있는데 윈도우용 레드마인 설치를 회사에서 할때 라이센스가 프리인가요
    아니면 돈주고 사야 하나요~~~~
    궁금합니다 이노무 라이센스가 걸려서요~
    그럼 수고하세요~

    • BlogIcon whatwant 2013.09.24 15:08 신고

      Redmine도 free이고, BitNami도 free인 것으로 알고 있습니다.

      위의 스크린샷을 보시면 아시겠지만...
      free라고 강조하고 있으니 마음놓고 사용하셔도 됩니다~!!!

  2. Joey 2014.02.21 16:17

    자세한 설명 감사합니다. 많은 도움이 되었어요! ^^;

  3. whoisk 2014.03.05 17:18

    안녕하세요 ( _ _)
    회사에서 bitnami 레드마인을 이용 중인데

    연동 문제로 2.3.2 버전이 필요합니다.. 근데 지금 bitnami에서는
    2.5 신규버전만 다운로드 가능해서
    혹시라도 가지고 계시다면
    slayas@naver.com 로 셋업파일 받을 수 있을까요?
    부탁드립니다~!

  4. 궁금해요 2015.05.12 17:19

    레드마인설치시에 devKit가 있는데 그게 무엇인지 알수 있을까요?

  5. BlogIcon 재우니 2018.03.22 10:42 신고

    잘 보고 갑니다. 감사합니다.^^


Git 에서 지원하는 기능 중의 한 가지가 바로 hooks 이다.
다른 형상관리 도구 또는 변경관리 도구에서는 trigger 기능이라고도 부른다.

예를 들어 개발자가 Local에서 commit을 한 것을 Remote로 push를 할 때에
어떤 작업을 실행하고 싶은 것이 있을 때 사용할 수 있는 기능이다.

Git의 어떤 행위를 수행 했을 때 특정 작업을 하도록 연결을 하고 싶다면 이 기능을 사용하면 되는 것이다.
 


Redmine에서는 Git을 저장소에 연결할 수 있다.


gitweb에 비해서 기능적으로는 조금 부족할 수도 있지만,
그에 비해서 훨씬 편리하고 예쁜 인터페이스를 자랑한다. 개인적으로 너무나 좋아한다.


그리고 Redmine은 Git의 commit을 작업으로 관리할 수도 있다.



그런데, 이렇게 아름다운 Redmine과 Git의 관계에 몇 가지 문제가 존재한다.
문제일 수도 있고, 그냥 이슈일 수도 있겠다.

1. Redmine과 Git은 같은 위치에 존재해야 한다.
   - Remote repository를 지원하지 않는 것은 정말 아쉽다.
   - mirroring 등의 방법으로 해결할 수는 있지만 문제는 문제다.

2. 대용량 repository 처리 시간에 따른 오류 발생 가능성이 있다.
   - Git 정보를 Web으로 처리하기 위해서 Redmine은 별도 가공을 해야 하는데 이 때 많은 시간이 소요된다.
   - Redmine은 웹으로 처리가 되다보니 지나치게 많은 소요시간이 걸리게 되면 Timeout이 되게 되는 것이다.
   - Apache의 Timeout 시간을 늘리는 것으로 임시조치는 할 수 있지만, 역시 문제는 문제다.

3. Git에 새로운 commit이 push 되었어도 Redmine에 실시간으로 반영되지 않는다.
   - 저장소 탭을 누군가 열어보기 전까지는 Redmine은 Git의 새로운 변경 내역을 알지 못한다.
   - 이 부분은 마땅히 해결할 방법이 없다. 관리자가 정기적으로 저장소 탭을 실행하곤 해야 하는 것이다.
   - 그런데, 이 때 Git의 hooks 기능을 사용하면 된다 !!!



정리해보면,
Redmine에서 형상관리 도구로 Git을 지원을 해주고 있지만 몇 가지 제약사항이 있다.
그 중 한 가지는 Git 저장소의 변경 사항이 실시간으로 Redmine에 반영이 되지 않는다는 것이다.
그래서 Git의 hooks 기능을 이용해 저장소의 변경 사항이 바로 바로 Redmine에 반영이 되도록 해보겠다.


원하는 결과를 얻기 위해서는 고려해야 할 사항들이 있다.
   - 우리가 원하는 기능을 수행할 시기는 Git Repository에 commit이 들어온 다음이다.
   - 우리가 원하는 기능은 Redmine의 저장소 페이지를 자동으로 여는 것이다.
   - Redmine의 저장소 페이지를 열도록 하기 위해서는 페이지를 열 수 있는 권한이 필요하다.


그런데, 이 부분을 처리하기 위해 알아 보던 중 또 하나 새로운 사항을 알게 되었다.

 


Redmine에서 설정 부분의 저장소 부분에 대한 것들을 살펴보자.

아래 적힌 내용은 저자가 테스트해본 결과에 기반한 것이다.
저자가 잘못 알고 있는 부분이 있다면 언제든 알려주기 바란다 !!!!


□ 커밋(commit)된 변경묶음을 자동으로 가져오기
   - Redmine 탭에서 '저장소'를 클릭하여 페이지를 열 때 저장소의 변경 사항을 받아오게 한다.
   - 선택하지 않으면 변경된 사항을 가져오지 않는다. 이런 경우 별도로 cron 작업을 통해서 변경 사항을 적용한다.

□ 저장소 관리에 WS를 사용
   - Redmine 공식적인 설명을 보면, SVN 저장소를 생성하기 위한 스크립트를 설치했을 때 활성화 시켜야 한다고 한다.
   - 그런데, Git refresh를 할 때에도 활성화 되어야 한다. 이유는 아직 모르겠다.

□ API 키
   - 실행 권한을 받기 위해서는 '키 생성'을 하고 이를 사용하면 된다.




자~ 서론이 길었다. 이제 시작해보자.

우리가 원하는 것은 현재 Redmine에 있는 하나의 프로젝트에서 사용하고 있는 Git repository에
새로운 commit이 들어오면 Redmine에게 정보를 리프레쉬 하라고 명령을 보내는 것이다.


1. Redmine 준비하기
   - 위 스크린샷과 같이,
   - [ 관리 → 설정 → 저장소 ] 메뉴에서 설정을 하자.
      ▷ 커밋(commit)된 변경묶음을 자동으로 가져오기 : 활성화
      ▷ 저장소 관리에 WS를 사용 : 활성화
      ▷ API 키 : 키생성


2. 저장소 경로 확인하기
   - 어떤 저장소인지 확인을 하자.



3. Git repository에 hook 설정하기
   - [ post-receive ] hook을 작성하자.

$ cd /srv/repository/barerepo.git
$ cd hooks
$ nano ./post-receive

   - [ _apikey ] 값은 위에서 생성한 값을 이용하면 된다.
   - [ _projectid ] 값은 프로젝트의 식별자를 사용한다.

#!/bin/bash

_apikey=UDcdoUtTm4a15xycCH52
_projectid=test

curl "http://127.0.0.1/redmine/sys/fetch_changesets?key=$_apikey&id=$_projectid"&

$ chmod +x ./post-receive

이걸로 끝이다.

그런데, 실제 push 작업을 해보면 무언가 좀 이상한 것이 보일 것이다.

$ git push
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 233 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
remote:                                                  Dload  Upload   Total    Spent     Left    Speed
remote: 100     1       0     1          0     0       0           0     --:--:--  0:00:07 --:--:--     0
remote:  To /srv/repository/barerepo.git
   bbde6a2..1107f45  master -> master

push를 하게 되면 Remote repository 입장에서 commit을 받아들인 후 post-receive 명령까지 수행을 해야 한다.
push 작업이 마무리 되는 순간은 post-receive 스크립트가 모두 완료가 되는 때이다.

그래서, 이렇게 하는 것이 문제가 될 수도 있다. 개발자 입장에서는 commit만 push가 되면 되는데,
(개발자 입장에서) 알지 못할 작업 때문에 push가 완료되는데에 시간이 더 소요되기 때문이다.



단지 어떻게 하는지만 알고 싶은 사람은 여기까지면 충분~!!
조금 더 알고 싶은 사람을 위해 설명을 추가하면...

   - [ http://<redmine url>/sys/fetch_changesets?key=<key값> ]과 같이 사용해도 충분하다.
   - 다만, 위와 같이 사용할 경우 사용하고 있는 redmine 전체에 대해서 refresh 하게 된다.

   - 전체가 아니라 특정 프로젝트만 refresh 하고 싶은 경우 위와 같이 [ &id=<식별자> ]를 붙이면 된다.

   - redmine 가이드를 보면 Git repository 이름을 사용하게 되어있는데, 그렇게 하면 실행이 안되었다.
   - 기능 변경이 있던지, 아니면 뭔가의 오류로 보인다.

   - [ /sys/fetch_changesets ] 주소는 그냥 사용하면 된다.

   - 개발자의 개발 과정에 지장을 주기 싫다면 (push 명령의 완료 시점) 위와 같이 이벤트 드리븐 방식으로 하면 안된다.
   - cron 등의 방법을 사용해서 개발자 부담을 줄여주는 것도 고려해볼만 하다.
   - [ ruby /path_to_redmine/redmine/script/rails runner "Repository.fetch_changesets" -e production > /dev/null 2>&1 & ]


Redmine 공식 가이드는 아래와 같다.

http://www.redmine.org/projects/redmine/wiki/HowTo_setup_automatic_refresh_of_repositories_in_Redmine_on_commit

반응형

Redmine이 자랑하는 대표적인 기능 중 하나가 바로 간트(Gantt) 차트이다.
디자인이 비교적 예쁜 편이라서 많은 사람들이 그림파일로 착각을 하는 경우도 있지만 HTML로 만들어져 있다.


기특하게도 Redmine은 내보내기 기능도 제공을 해준다.
PDF 파일로도 내보내기가 가능하고, PNG 파일로도 내보내기가 가능하다.

그런데, PDF 파일 내보내기의 경우엔 별 문제가 없지만,
PNG 파일 내보내기의 경우에는 한글 출력에 문제가 있다.


한글 부분이 ????? 로 출력이 되는 것이다.
이는 한글 폰트 설정으로 인한 문제이다.

폰트 설정에 대한 내용은 [ config/ ] 디렉토리에 있는 [ configuration.yml ] 파일에서 셋팅을 해야 한다.

기존부터 사용하고 있었다면 그 파일을 그대로 사용하면 되고,
사용하고 있던 파일이 없다면 example 파일을 이용하면 편리하다.

$ cd /srv/install/redmine/config/
$ mv ./configuration.yml.example ./configuration.yml

이제 폰트를 셋팅해보자.

$ cd /srv/install/redmine/config/
$ nano ./configuration.yml

파일의 밑 부분을 살펴보면 [ rmagick_font_path: ] 부분이 있다.
여기에 사용할 폰트의 경로를 적어주면 된다.

rmagick_font_path: /usr/share/fonts/truetype/nanum/NanumGothic.ttf

그리고 Apache2를 재시작해주자.

$ sudo service apache2 restart

그리고 다시 PNG 내보내기를 하면 한글이 잘 출력된다는 것을 확인할 수 있다.


이것으로 해결 끝~

반응형
  1. BlogIcon 조화선인장 2017.01.12 16:01

    감사합니다. 한글이 제대로 보이네요~
    configuration.yml 수정시 탭/스페이스 맞추는 것도 중요하군요.


만날 살펴보다가 꼭 신경안쓸 때 새로운 버전이 나온다.

• Defect #12650: Lost text after selection in issue list with IE
• Defect #12684: Hotkey for Issue-Edit doesn't work as expected
• Defect #13405: Commit link title is escaped twice when using "commit:" prefix
• Defect #13541: Can't access SCM when log/production.scm.stderr.log is not writable
• Defect #13579: Datepicker uses Simplified Chinese in Traditional Chinese locale
• Defect #13584: Missing Portuguese jQuery UI date picker
• Defect #13586: Circular loop testing prevents precedes/follows relation between subtasks
• Defect #13618: CSV export of spent time ignores filters and columns selection
• Defect #13630: PDF export generates the issue id twice
• Defect #13644: Diff - Internal Error
• Defect #13712: Fix email rake tasks to also support no_account_notice and default_group options
• Defect #13811: Broken javascript in IE7 ; recurrence of #12195
• Defect #13823: Trailing comma in javascript files
• Patch #13531: Traditional Chinese translation for 2.3-stable
• Patch #13552: Dutch translations for 2.3-stable
• Patch #13678: Lithuanian translation for 2.3-stable

마이너 업데이트는 새로운 기능이 추가없이 Defect 수정 위주이다.

개인적으로 그닥 피부에 와닿는 부분은 없지만... 업데이트는 해야지..... ^^



기존 2.3.0 버전 설치는 다음 포스팅을 참고해서 진행했다.

   - http://whatwant.tistory.com/553



1. PostgreSQL

   - 제일 중요한 데이터베이스를 혹시 모르니 백업을 해두자.

$ sudo su - postgres

$ pg_dump -Fc --file=redmine_20130503.sqlc redmine



2. Redmine 압축파일

   - 최신 버전의 Redmine을 다운로드 받고 압축을 풀자.

$ cd /srv/install/

$ wget http://rubyforge.org/frs/download.php/76933/redmine-2.3.1.tar.gz
$ tar zxvf redmine-2.3.1



3. Files 복사

   - 파일들과 플러그인들을 복사하자.

$ cd /srv/install/redmine-2.3.1/

$ sudo cp /srv/install/redmine-2.3.0/config/database.yml ./config/
$ sudo cp /srv/install/redmine-2.3.0/config/configuration.yml ./config/  (없을 수도 있다)
$ sudo cp -r /srv/install/redmine-2.3.0/files/* ./files/
$ sudo cp -r /srv/install/redmine-2.3.0/plugins/*  ./plugins/



4. Upgrade

   - 이제 업그레이드 작업 진행하면 된다.

   - Ruby 권한 관련 이슈가 있어서.... 아래 진행은 애초 설치 진행 時 (sudo su -) 권한으로 진행을 한 상황이다.

$ sudo su -
$ cd /srv/install/redmine-2.3.1

$ bundle install
$ rake generate_secret_token
$ rake db:migrate RAILS_ENV=production
$ rake redmine:plugins:migrate RAILS_ENV=production
$ rake tmp:cache:clear

$ rake tmp:sessions:clear




5. 권한 설정

   - 중요한 권한 설정을 해주자.

$ sudo su -
$ cd /srv/install/redmine-2.3.1

$ chown -R www-data:www-data files log tmp public
$ chmod -R 755 files log tmp public/plugin_assets
$ chown -R www-data:www-data ./config/database.yml
$ chmod 600 ./config/database.yml



6. 웹 설정

   - 링크 잡아주고 재시작하자.

$ sudo su -
$ cd /var/www/

$ ln -s /srv/install/redmine-2.3.1/public ./redmine
$ service apache2 restart



접속 성공~!!!

반응형

시스템을 운영하다가 사고가 발생하면 가장 많은 도움을 받는 것이 바로 Log 파일이다.
Redmine의 경우에도 당연히 Log 파일을 만들어주고 있다.

그런데, 관심을 두지 않고 있어서 별 문제가 없어 보이지만 지금 현재 Log 파일을 살펴보면
엄청난 용량에 무의미한 데이터를 계속 저장하고 있을 수도 있다.


1. Redmine's Log File

   - 기본 경로는 redmine 설치 디렉토리 밑에 ./log/ 에 생성이 된다.
   - 필자의 경우 [ ./log/production.log ] 파일로 생성이 되고 있다.


2. Log contents

   - 아무런 설정 변경 없이 그냥 사용할 경우 어떤 내용이 채워지고 있을까?
   - [ cat ./log/production.log ]

Started GET "/redmine/" for 10.0.2.2 at 2013-04-28 18:31:27 +0900
Processing by WelcomeController#index as HTML
  Current user: anonymous
  Rendered news/_news.html.erb (1.3ms)
  Rendered welcome/index.html.erb within layouts/base (3.0ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.0ms)
Completed 200 OK in 26ms (Views: 9.5ms | ActiveRecord: 4.3ms)
Started GET "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:29 +0900
Processing by AccountController#login as HTML
  Current user: anonymous
  Rendered account/login.html.erb within layouts/base (3.6ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.1ms)
Completed 200 OK in 13ms (Views: 9.7ms | ActiveRecord: 1.5ms)
Started POST "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:35 +0900
Processing by AccountController#login as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pe5aTLPaPSNRv6MX244+6cDZBU1JgcOtjdGm9bE3xis=", "back_url"=>"ht$
  Current user: anonymous
Failed login for 'admin' from 10.0.2.2 at 2013-04-28 09:31:35 UTC
  Rendered account/login.html.erb within layouts/base (1.7ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.1ms)
Completed 200 OK in 8ms (Views: 6.6ms | ActiveRecord: 0.5ms)
Started POST "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:39 +0900
Processing by AccountController#login as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pe5aTLPaPSNRv6MX244+6cDZBU1JgcOtjdGm9bE3xis=", "back_url"=>"ht$
  Current user: anonymous
Successful authentication for 'admin' from 10.0.2.2 at 2013-04-28 09:31:39 UTC
Redirected to http://127.0.0.1/redmine/
Completed 302 Found in 6ms (ActiveRecord: 2.8ms)
Started GET "/redmine/" for 10.0.2.2 at 2013-04-28 18:31:39 +0900
Processing by WelcomeController#index as HTML
  Current user: admin (id=1)
  Rendered news/_news.html.erb (2.8ms)
  Rendered welcome/index.html.erb within layouts/base (5.1ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.0ms)
Completed 200 OK in 19ms (Views: 11.1ms | ActiveRecord: 3.6ms)

   - 에러만 기록되고 있는 것이 아니라 Redmine에서 이루어지는 모든 상황이 전부 기록되고 있는 것을 확인할 수 있다.
   - 그러다보니 Log의 크기를 감당하기가 쉽지가 않다.



3. Guide Document

   - Redmine에서 Log 관련 설정을 어떻게 해야하는지에 대한 내용은 다음에서 확인할 수 있다.
   - http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Logging-configuration

   - Log 파일에 대한 설정을 어떻게 해야하는지 확인하기 위해서 현재 사용하고 있는 Ruby 버전을 확인해보자.

 Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL
Redmine plugins:

 $ ruby --version
ruby 1.9.3p392 (2013-02-22 revision 39386) [i686-linux]


   - Ruby v1.9.3 에서 Logger에 대한 도움말은 아래의 주소에서 찾아볼 수 있다.
   - http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html

   - Redmine에서 검색 결과로 나온 document도 있다.
   - http://www.redmine.org/boards/2/topics/25236




4. ./config/addional_environment.rb

   - Redmine의 config 디렉토리에 있는 설정 파일들 중 하나에서 Log에 대한 설정을 할 수 있다.

   - 우선 설정 파일을 만들자.

$ cd ./config/

$ cp ./additional_environment.rb.example ./additional_environment.rb

$ ls
additional_environment.rb          boot.rb                    environment.rb  locales            settings.yml
additional_environment.rb.example  configuration.yml.example  environments    preinitializer.rb
application.rb                     database.yml               initializers    routes.rb

   - 파일 내용을 보면 아래와 같다.

 $ cat ./additional_environment.rb
# Copy this file to additional_environment.rb and add any statements
# that need to be passed to the Rails::Initializer.  `config` is
# available in this context.
#
# Example:
#
#   config.log_level = :debug
#   ...
#

   - 아직은 주석밖에 없다. 그렇다는 말은 지금 현재는 default 설정으로 되어있다는 것이다.

   - 특별한 설정 없는 default 설정은 다음과 같은 값으로 되어있는 것과 같다고 한다.

 config.logger.level = Logger::INFO

   - 로그 파일을 분할을 한다거나 하는 설정은 전혀 없는 것이다. 이 부분에 대한 설정을 해보자.

config.logger = Logger.new('./log/production.log', 5, 1024000)
config.logger.level = Logger::ERROR

   - Logger.new 첫 번째 파라미터는 로그 파일 저장 위치이고,
   - 그 다음은 한 개의 로그 파일의 크기가 약 10MB가 되면 최대 5개로 분할되어 저장을 하라는 의미이다.
   - 로그 파일이 모두 채워지면 처음 만들어진 것부터 차례대로 삭제된다.

   - config.logger.level 에서 사용할 수 있는 옵션은 FATAL, ERROR, WARN, INFO, DEBUG 이다.
   - 기본 설정인 INFO의 경우 너무 많은 정보를 저장하기 때문에, ERROR 정도로 설정을 변경하는 것을 추천한다.


   - 이렇게 파일을 저장하고 Apache2를 재시작하면, 변경된 설정으로 Log가 남겨지게 된다.




결론만 보면 그냥 설정 파일 하나 추가해서 두 줄 추가하는 것 뿐이지만,
이번 기회에 Redmine의 Log에 대해서 정리한다는 생각으로 한 번 살펴봤다는 의미로 생각하면 되겠다.

반응형

+ Recent posts