Nginx + Unicorn で Redmine をインストールする

Redmineのバージョンは2.5です。

Ruby, MySQL, Nginxのインストール

http://kzy52.com/entry/2013/05/03/022925

Rubyのバージョンは2.0にすること

ImageMagickをインストールする

$ sudo yum -y install ImageMagick ImageMagick-devel

ソースコードを取得する

  • ディレクトリの所有者は適宜変更してください。
$ sudo mkdir -p /var/www/virtualhost/
$ cd /var/www/virtualhost/
$ sudo svn checkout http://svn.redmine.org/redmine/trunk/ redmine
$ sudo chown -R redmine:redmine redmine
$ cd redmine
$ cp config/database.yml.example config/database.yml

gem をインストールする

$ rbenv local [インストールしたRubyのバージョン]
$ gem install bundler
$ rbenv rehash
$ bundle install --path vendor/bundle

セッション暗号化用鍵の生成

$ bundle exec rake generate_secret_token

データベースの作成

  • パスワードは適宜変更してください。
$ mysql -u root -p
mysql> CREATE DATABASE `redmine` DEFAULT CHARACTER SET `utf8`;
mysql> create user redmine@localhost identified by 'パスワード';
mysql> grant all on redmine.* to redmine@localhost;
mysql> exit

使用するデータベースの設定をする

  • パスワードは適宜変更してください。
# config/database.yml

production:
   adapter: mysql2
   database: redmine
   host: localhost
   username: redmine
   password: "パスワード"
   encoding: utf8

データベースの初期化

$ bundle exec rake db:migrate RAILS_ENV=production
$ bundle exec rake redmine:load_default_data RAILS_ENV=production

Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ja

「ja」と入力してEnter

メール送信の設定

$ cp config/configuration.yml.example config/configuration.yml
# config/configuration.yml

default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: localhost
      port: 25
      domain: redmine.example.com # Redmineを実行するサーバのFQDNに変更すること

unicorn をインストールする

# Gemfile.local
gem "unicorn"
$ bundle install
# config/unicorn.rb

worker_processes 2

app_path = "/var/www/virtualhost/redmine"

listen  File.expand_path('tmp/unicorn.sock', app_path)
pid File.expand_path('tmp/unicorn.pid', app_path)
stderr_path File.expand_path('log/unicorn.stderr.log', app_path)
stdout_path File.expand_path('log/unicorn.stdout.log', app_path)

preload_app true

timeout 30

if GC.respond_to?(:copy_on_write_friendly=)
  GC.copy_on_write_friendly = true
end

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

  old_pid = "#{server.config[:pid]}.oldbin"
  if old_pid != server.pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end

unicorn を起動する

$ bundle exec unicorn -c config/unicorn.rb -E production -D

Basic認証を設定する

$ sudo htpasswd -cb /var/www/virtualhost/redmine/.htpasswd redmine [パスワード]

証明書を作成する

$ sudo mkdir -p cd /usr/local/nginx/conf
$ cd /usr/local/nginx/conf

秘密鍵の作成

$ sudo openssl genrsa -out ca.key 2048

証明書署名要求の作成

$ sudo openssl req -new -key ca.key -out ca.csr

証明書作成

$ sudo openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

ポートを開放する

# /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443   -j ACCEPT
$ sudo /etc/rc.d/init.d/iptables restart

Nginx の設定

# /etc/nginx/conf.d/redmine.conf

upstream redmine {
  server unix:/var/www/virtualhost/redmine/tmp/unicorn.sock;
}

server {
  listen          80;
  server_name redmine.example.com;
  rewrite ^/(.*) https://redmine.example.com/$1 permanent;
}
server {
  listen 443 ssl;
  server_name redmine.example.com;

  root /var/www/virtualhost/redmine/public;

  proxy_connect_timeout 60;
  proxy_read_timeout    60;
  proxy_send_timeout    60;

  # Basic Authentication
  auth_basic "members only";
  auth_basic_user_file  '/var/www/virtualhost/redmine/.htpasswd';

  # SSL
  ssl on;
  ssl_certificate /usr/local/nginx/conf/ca.crt;
  ssl_certificate_key /usr/local/nginx/conf/ca.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!ADH:!MD5;

  location / {
    if (-f $request_filename) {
      break;
    }

    proxy_pass http://redmine;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
  }
}

Nginx を再起動する

$ sudo /etc/init.d/nginx restart

ログインする

ログイン: admin
パスワード: admin

パスワードを変更する

[個人設定] -> [パスワード変更]

その他の設定をする

[管理] -> [設定] -> [表示]

  • 既定の言語: Japanese (日本語)

[管理] -> [設定] -> [表示]

  • 認証が必要: チェックする
  • ユーザーによるアカウント登録: 無効
  • ユーザーによるアカウント削除を許可: チェックを外す

参考

http://wiki.centos.org/HowTos/Https

変更履歴

SSL 3.0の脆弱性「Poodle」の対応で ssl_protocols の設定を変更しました。