VagrantでRedmineの環境を構築する（Ubuntu 14.04+nginx 1.6+MySQL 5.6+Ruby 2.1+Rails 3.2+Unicorn 4.8+Redmine 2.6）

備忘録です。この構成の記事はたくさんあると思いますが、なるべく簡単に構築できることを目的としています。

# 仮想Linux環境の構築

ローカルPCに仮想Linux環境を構築します。

## VirtualBox+Vagrantのインストール

https://www.virtualbox.org/wiki/Downloads
VirtualBoxを先にインストールします。

http://www.vagrantup.com/downloads.html
次にVagrantをインストールします。

# Ubuntuのインストール

ローカルマシンに適当なフォルダを作成し、そこで作業します。

Vagrant Cloud (https://vagrantcloud.com/) からUbuntuの入ったBoxをインストールします。現時点での最新版は14.04 LTS(trusty64)です。

```
vagrant init ubuntu/trusty64
```

フォルダ内にVagrantfileが生成されますので、テキストエディタで開いて以下の行のコメントを外します。

```
config.vm.network "private_network", ip: "192.168.33.10"
```

これでIP 192.168.33.10で仮想マシンにアクセス出来るようになります。

```
vagrant up
```

1回目の起動はBoxをダウンロードしてくるので時間がかかります。
VMが起動したら、SSHでログインします。

```
vagrant ssh
```

ユーザーvagrantでログインしていますが、面倒なのでルートで作業します。

```
sudo su -
```

## パッケージを最新にする

```
apt update
apt upgrade
```

updateでパッケージリストを最新にし、upgradeで最新のパッケージをインストールします。

# nginxのインストール

PPAから最新バージョンをインストールします。

```
add-apt-repository -y ppa:nginx/stable
apt update
apt install -y nginx-extras
```

ブラウザで http://192.168.33.10/ を開いてnginxのウェルカムメッセージが表示されれば成功です。

# MySQLのインストール

公式サイトの5.6安定版のパッケージからインストールします。

```
wget http://dev.mysql.com/get/mysql-apt-config_0.3.2-1ubuntu14.04_all.deb
dpkg -i mysql-apt-config_0.3.2-1ubuntu14.04_all.deb
rm mysql-apt-config_0.3.2-1ubuntu14.04_all.deb
apt update
apt install -y mysql-server
```

dpkgコマンドの途中で選択画面が出ますが、何もせず「Apply」を選びます。

パッケージインストール中にも選択画面が表示されますが、全てEnterでOKです（rootパスワード無し、testデータベースを作らない）。

# Rubyのインストール

RedmineはRuby on Rails製なので、まず新しめのRubyをインストールします。一番新しいの(2.2)はダメでした。

```
add-apt-repository -y ppa:brightbox/ruby-ng
apt update
apt install -y ruby2.1
```

# Redmineのインストール

## データベースの作成

まず、Redmineで使うデータベースredmineを作成します。

```
mysql -uroot -e "create database redmine"
```

## 必要なパッケージのインストール

Redmineを動かすのに必要なパッケージをインストールします。

```
apt install -y ruby2.1-dev imagemagick libmagickwand-dev libmysqld-dev
```

## Redmineのダウンロード

設置場所は /var/lib/redmine にします。

```
cd /var/lib/
wget http://www.redmine.org/releases/redmine-2.6.0.tar.gz
tar xf redmine-2.6.0.tar.gz
rm redmine-2.6.0.tar.gz
mv redmine-2.6.0 redmine
cd redmine
```

## database.yml編集

exampleをコピーします。

```
cp config/database.yml.example config/database.yml
```

## Unicorn用のbundleを追加

```
echo "gem 'unicorn'" > Gemfile.local
```

## bundle install

先にbundlerをインストールしておきます。

```
gem install bundler
```

bundlerで不要なものは除きインストールします。

```
bundle install --without development test postgresql sqlite
```

## 暗号化鍵を生成する

```
bundle exec rake generate_secret_token
```

## テーブルを生成する

```
RAILS_ENV=production bundle exec rake db:migrate
```

## WEBrickで動作確認する

```
bundle exec rails s -e production
```

ブラウザで http://192.168.33.10:3000/ を開きRedmineが動くか確認してみます。

# nginxとUnicornの設定

## Unicornの設定

config/unicorn.rb を以下の内容で作成します。

```rb
@dir = "/var/lib/redmine"
working_directory @dir
pid "#{@dir}/tmp/pids/unicorn.pid"
stderr_path "#{@dir}/log/unicorn.log"
stdout_path "#{@dir}/log/unicorn.log"
listen "/tmp/unicorn.sock"
worker_processes 2
timeout 30
```

## nginxの設定

/etc/nginx/sites-available/default を開いて内容を全て消して以下の内容を書き込みます。

```
upstream unicorn {
  server unix:/tmp/unicorn.sock fail_timeout=0;
}
server {
  root /var/lib/redmine/public;
  server_name _;
  try_files $uri @unicorn;
  location @unicorn {
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
  }
}
```

## 動作確認

まずUnicronをdaemonモードを起動しておき、

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

nginxをリロードします。

```
nginx -s reload
```

ブラウザで http://192.168.33.10/ を開いてRedmineが起動するか確認してください。確認できたらUnicronを止めます。

```
kill -QUIT `cat tmp/pids/unicorn.pid`
```

# Unicornの自動起動設定

最後に、マシン起動時にUnicornも自動起動するように設定します。
/etc/init/redmine.conf を以下の内容で作成します。

```
description "Redmine"

start on runlevel [2345]
stop on runlevel [016]

env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

chdir /var/lib/redmine
exec bundle exec unicorn -c /var/lib/redmine/config/unicorn.rb -E production
```

Upstartという仕組みを使っているので、```start/stop/restart redmine```コマンドで簡単にunicornの起動・停止・再起動ができます。

# 注意点

Redmineのインストールは名前が示す通り地雷がとても多いので踏まないように。

* brightbox/ruby-ng で入るRubyの現在の最新版は2.2ですが、DBのマイグレーションでコケます。
* Redmineの最新版を https://github.com/redmine/redmine のリポジトリからクローンしてくるとRails4が入って嬉しいのですが、プラグインが全然入らなくて死にます。

他にも大量に地雷がありましたが忘れました・・・