nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

カゴヤのVPSにRedmine, Unicorn, Nginxをインストールしたメモ

Redmine のインストール

http://redmine.jp/guide/RedmineInstall/ を参考にがんばる

config/database.yml.example を database.yml にリネーム
database.yml の mysql を mysql2 に変更
gem の mysql2 のために mysql-server, client, devel などのパッケージをインストール
gem の rmagick のために imagemagick, libmagick++-dev などのパッケージのインストール
bundle install --without development test postgresql sqlite で依存 gem のインストール
rake db:migrate でテーブル作成
rails s でウェブサーバー立ち上げ

Unicorn のインストール

http://d.hatena.ne.jp/milk1000cc/20100804/1280893810 を参考にした

Gemfile に gem "unicorn" の追加
bundle install でインストール
vi config/unicorn.rb で設定作成

# ワーカーの数
worker_processes 2

# capistrano 用に RAILS_ROOT を指定
working_directory "/path/to/redmine-2.2.1"

# ソケット
listen '/path/to/redmine-2.2.1/tmp/sockets/unicorn.sock'

# ログ
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])

# ダウンタイムなくす
preload_app true

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

  old_pid = "#{ server.config[:pid] }.oldbin"
  unless old_pid == server.pid
    begin
      # SIGTTOU だと worker_processes が多いときおかしい気がする
      Process.kill :QUIT, 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_rails -c config/unicorn.rb -D で起動

Nginx のインストール

Unicorn と同じページを参考にした
sudo aptitude install nginx
sudo vi /etc/nginx/sites-available/redmine で設定作成

upstream redmine {
    server unix:/path/to/redmine-2.2.1/tmp/sockets/unicorn.sock;
}

server {
    listen 8000;

    root /path/to/redmine-2.2.1/public;
    error_log /path/to/redmine-2.2.1/log/error.log;

    location / {
        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;
        proxy_redirect off;
        if (!-f $request_filename) { proxy_pass http://redmine; }
    }

    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
        expires 1y;
        add_header Cache-Control public;

        # http://guides.rubyonrails.org/asset_pipeline.html#server-configuration
        # add_header Last-Modified "";
        # add_header ETag "";
        log_not_found off;
    }

    # for Rails3.1
    location ~ ^/assets|system/ {
        expires 1y;
        add_header Cache-Control public;

        # add_header Last-Modified "";
        # add_header ETag "";
        log_not_found off;
    }
}

sudo ln -s /etc/nginx/sites-available/redmine /etc/nginx/sites-enabled/redmine で設定の有効化
sudo /etc/init.d/nginx start で起動
http://IP_ADDRESS:8000/ で動作確認