서버 설정 · 2 min read · Jan 23, 2026

nginx에서 Redmine 프로젝트 관리 실행하기 (Debian Wheezy)

nginx에서 Redmine 프로젝트 관리 실행하기 (Debian Wheezy)

Redmine은 Ruby로 작성된 프로젝트 관리 도구입니다. 이 튜토리얼에서는 Debian Wheezy에서 nginx 웹 서버를 통해 thin(빠른 Ruby 웹 서버)의 도움으로 Redmine을 제공하는 방법을 설명합니다.

이 방법이 여러분에게 작동할 것이라는 보장을 하지 않습니다!

1 사전 노트

저는 사용자 web1과 그룹 client0이 소유한 문서 루트 /var/www/example.com/web에 www.example.com 웹사이트를 준비했습니다(여기에 Redmine이 설치됩니다).

저는 또한 Redmine을 위한 MySQL 데이터베이스 c0db1을 준비했습니다. 사용자 이름은 c0db1이며, 비밀번호는 FyZ5z4QGfhTf8입니다.

2 Redmine 설치하기

먼저 몇 가지 필수 패키지를 설치합니다:

apt-get install thin ruby rake rubygems libopenssl-ruby libmysql-ruby librmagick-ruby ruby-dev libmysqlclient-dev libmagick-dev curl
gem install sass  
gem install compass

최신 Redmine을 다운로드하고 문서 루트 /var/www/example.com/web에 복사합니다:

cd /tmp  
wget http://www.redmine.org/releases/redmine-2.4.2.tar.gz  
tar xvfz redmine-2.4.2.tar.gz  
mv redmine-2.4.2/* /var/www/example.com/web  
cd /var/www/example.com/web  
chown -R web1:client0 *

MySQL 데이터베이스의 로그인 세부정보를 입력합니다:

cp config/database.yml.example config/database.yml  
vi config/database.yml
[...]
production:
  adapter: mysql2
  database: c0db1
  host: localhost
  username: c0db1
  password: "FyZ5z4QGfhTf8"
  encoding: utf8
[...]

필요한 다른 패키지를 설치하고 데이터베이스를 채웁니다:

apt-get install libmagickwand-dev
gem install rmagick
gem install bundler
bundle install --without development test postgresql sqlite
rake generate_secret_token
rake db:migrate RAILS_ENV="production"
rake redmine:load_default_data RAILS_ENV="production"

3 thin 구성하기

다음으로 nginx가 요청을 프록시할 Ruby 웹 서버 thin을 구성합니다.

ln -s /etc/thin1.9.1 /etc/thin
mkdir /var/log/thin  
chmod 755 /var/log/thin  
cd /etc/thin

문서 루트의 소유자(web1)와 같은 이름의 thin 구성 파일을 만듭니다:

vi web1.yml

로그, pid, 소켓 및 사용자 줄에서 올바른 사용자(web1)를 사용하고 그룹 줄에서 올바른 그룹(client0)을 사용해야 합니다. chdir 줄에서 올바른 문서 루트를 사용하세요:

---
chdir: /var/www/example.com/web
environment: production
timeout: 30
log: /var/log/thin/web1.log
pid: /var/run/thin/web1.pid
max_conns: 1024
max_persistent_conns: 512
require: []
wait: 30
socket: /var/run/thin/web1.sock
daemonize: true
user: web1
group: client0
servers: 1
prefix: /

thin이 소켓을 생성할 /var/run/thin 디렉토리를 만듭니다:

mkdir /var/run/thin  
chown -R web1:client0 /var/run/thin

thin이 시작될 때 디렉토리가 존재하는지 확인하기 위해 /etc/init.d/thin init 스크립트의 SCRIPT_NAME 줄 바로 뒤에 다음 줄을 추가합니다:

vi /etc/init.d/thin
[...]
DAEMON=/usr/bin/thin
SCRIPT_NAME=/etc/init.d/thin

test -e /var/run/thin || install -m 755 -o web1 -g client0 -d /var/run/thin
[...]

이제 thin을 시작합니다…

/etc/init.d/thin start

… 그리고 생성된 소켓(/var/run/thin/web1.0.sock)을 기록해 두세요 - nginx 구성에서 필요합니다:

root@server1:/etc/thin# /etc/init.d/thin start  
[start] /etc/thin1.9.1/web1.yml ...  
Starting server on /var/run/thin/web1.0.sock ...  
root@server1:/etc/thin#

Monit를 사용하는 경우 thin이 항상 실행되도록 하기 위해 /etc/monit/monitrc에 다음 줄을 추가할 수 있습니다:

vi /etc/monit/monitrc
[...]
check process thin with pidfile /var/run/thin/web1.0.pid
   start program = "/etc/init.d/thin start"
   stop  program = "/etc/init.d/thin stop"
[...]

그 후 Monit를 재시작합니다:

/etc/init.d/monit restart

4 nginx 구성하기

다음으로 Redmine에 접근하기 위해 nginx vhost를 구성해야 합니다. 다음 구성을 server {} 컨테이너(또는 ISPConfig를 사용하는 경우 nginx Directives 필드)에 붙여넣어야 합니다 - 올바른 thin 소켓을 사용해야 합니다:

client_max_body_size 100M;

location / {
    proxy_set_header X-Reak-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    if (-f $request_filename/index.html) {
      rewrite (.*) $1/index.html break;
    }

    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }

    if (!-f $request_filename) {
      proxy_pass http://unix:/var/run/thin/web1.0.sock;
      break;
    }
}

이제 끝났습니다! 웹사이트를 방문하면 Redmine을 사용할 수 있어야 합니다. 기본 사용자 이름은 admin이며, 비밀번호도 admin입니다.

4 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.