RedmineをApacheのproxy_pass使って公開するまで


## 1. Redmineとは?
- [Redmine.JP](http://redmine.jp/)

「Webベースのプロジェクト管理ソフトウェア」です。

そのテのものは、ふつうにWebサービスとして公開されてそうなもんですが、
Ruby on railsで書かれたプロダクトとして公開されています。

つまり、ダウンロードして、自分のサーバーにデプロイして使う。
ちょっと珍しいケースですね。たぶん。

MovableTypeとかWordPressもそんな感じですが、
Railsの場合は置けば完了! とはいかないので、それなりの手間が必要です。

## 2. 環境と仕様

今回は、このRedmineを以下の環境にインストールします。

- さくらのVPS
- CentOS
- Apache

そして、Railsをapacheで公開する場合は、
Passengerという仕組みを使うことが多いのですが、

- この間授業で使って、いまひとつしっくりこなかった
- 他に公開しているnodeアプリケーションがproxy_pass使っているため、一貫性?

などの理由から、
localhostで起動して、それをapacheのproxy_passで公開する、
という手法を使ってみます。

そろそろ素直にnginxを使うべきだと、自分でも思います。

## 2. 教科書

- [Redmine 2.2をCentOS 6.3にインストールする手順 | Redmine.JP Blog](http://blog.redmine.jp/articles/2_2/installation_centos/)
  - redmine自体のインストールまでは、だいたいこれのとおりにやった。

## 3. インストールとトラブルシューティング
まぁともかく、Redmineをサーバー上で起動するところまで行きたい。
MySQLと繋いだり、bundle installを済ませたり。

しかし、Railsアプリの公開は、何かとトラブルが多いのでつらい。
今回もいろいろつっかかったので、それぞれの対処法をば。

### CentOSのversionがいくつだったかいつも忘れる
- [CentOSのバージョン確認 - yokococonの日記](http://d.hatena.ne.jp/yokococon/20070206)

```
$ cat /etc/redhat-release
CentOS release 6.2 (Final)
```
/etcはなんでも入ってますね。6.2でした。


### rvmが/usr/local/に入ってた
過去の自分ばかやろーう! めんどくさいんじゃー!! と思いつつ再インストール。

```
rvm seppuku
```

※あんまり詳しくは書きませんが、権限系の問題で↑だけでは終わらず、地味にめんどくさいです

### gem install mysql2 でこける
これもよくあるやつです。が、もう負けない!
mysql-develをインストールすることで回避できるそうです。

- [Rails3の bundle install で mysql.h が見つからないというエラー - じょにーさんのにっき](http://d.hatena.ne.jp/eisenbach/20111019/1319021855)

CentOSなので以下。

```
sudo yum install mysql-devel
```

なおdevelは、developingかなんかの略だったはず。
libxmlのインストールとかでも、このdevelでつっかかることあり。
何らかのインストール失敗時には、頭の隅に置いておきたいですね。

- [nobi nobi hoge hoge: 「libxml2がないよ!」エラー](http://blog.fnobi.com/2012/10/libxml2.html)

### 起動時の注意
手動起動するときに、環境変数付けるの忘れずに。
また、bundleに頼り切ったので、bundle execを使う方がいいみたい。

```
RAILS_ENV=production bundle exec rails server
```
長い。でも無事に起動できた。

## 4. unicornに乗ってみる

ようやく本題です。
このRedmineを、外部からアクセスできるように公開しましょう。

調べてみると、unicornというのを使うと、
デーモン化とかやってくれて、かつ速いらしい。

そんなわけで、nginxじゃないけどこれを読む。

- [Rails3アプリをnginx+unicornで動かしたら速すぎた - どっかのBlogの前身のような](http://parrot.hatenadiary.jp/entry/20110727/1311737955)


### Redmineにインストール
ただのgemらしいので、Gemfileに追加してbundle install。

```
cd redmine
vi Gemfile
```

```ruby:Gemfile
gem 'rails', '3.2.11'
gem "jquery-rails", "~> 2.0.2"
gem "i18n", "~> 0.6.0"
gem "coderay", "~> 1.0.6"
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
gem "builder", "3.0.0"

gem "unicorn" # 追加
```

```
bundle install
bundle exec unicorn_rails
```

動いた。えらーでてたけど、まだ設定途中らしいので気にしない。

### 設定ファイル
config/unicorn.rbというファイルを書くらしい。
起動時にオプションで場所を指定するので、他の場所に書いてもいいみたい。

こんなかんじで。

```ruby:config/unicorn.rb
# Minimal sample configuration file for Unicorn (not Rack) when used
# with daemonization (unicorn -D) started in your working directory.
#
# See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete
# documentation.
# See also http://unicorn.bogomips.org/examples/unicorn.conf.rb for
# a more verbose configuration using more features.

listen 2007 # by default Unicorn listens on port 8080
worker_processes 2 # this should be >= nr_cpus
pid "/var/www/redmine/log/unicorn.pid"
stderr_path "/var/www/redmine/log/unicorn.log"
stdout_path "/var/www/redmine/log/unicorn.log"
```

ポートは拾い物をパクって2007にした。これだけは覚えとく。

### 起動してみよう

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

-Dなくすとデーモンじゃなく起動します。

しかしながい……。ちゃんとした運用をするなら、
起動シェルスクリプトを書くのが懸命ですねーこれは。

ともかくこれで、放っておいてもlocalhost:2007でRedmineが動くようになりました。

## 5. apacheのproxy設定
さぁ仕上げ、apache通して外と繋ぎます。

ProxyPassの書き方は、nodeで他にもちょいちょいやってるので、
そちらをパクりながら。こんなかんじ。

```apache:httpd.conf
<VirtualHost *:80>
    ServerName "redmine.fnobi.com"
    DocumentRoot "/var/www/redmine/public"

    ProxyPass / http://localhost:2007/
    ProxyPassReverse / http://localhost:2007/

    ErrorLog /var/log/httpd/redmine-error.log
    LogLevel warn
    CustomLog /var/log/httpd/redmine-access.log combined
</VirtualHost>
```
そして再起動。

```
sudo /etc/init.d/httpd restart
```

ブラウザで確認、無事動きました。わーい!

## 6. まとめ

今回で慣れたので、Railsのアプリを公開するのもけっこう気軽にできそう。

しかしデーモン化とかやっぱり、nodeのforeverとかstart-stop-daemonとかの方が優秀だよなぁと思ったり。
(npm startみたいなのが使えないのも惜しい)

まぁともかく、身内系の方で、使いたい人は言って下さい。

- [http://redmine.fnobi.com](http://redmine.fnobi.com)