rbenv,CentOS6.5で作るredmine環境

Qiita初投稿！こんにちはこんにちは！

動機
=====
リアルで引越がしたくなり、タスク管理する必要に駆られて何使うかなぁと思い、
咄嗟にRedmineを使いたくなったので、衝動で持て余していたVPSに入れることにした。

環境
=====
## さくらのVPS(2G)
[legnoh.jp](http://legnoh.jp) のサブドメイン [rm.legnoh.jp](http://rm.legnoh.jp) で入れる。

## CentOS 6.5 x86_64
OS放置してて何入ってるか思い出せないので再インスコした。
VPSのカスタムOS再インスコ時に出るはずのVNCコンソールが、Java6でないと動かないとかぬかすので、
入れ直したけど動きませんでしたふぁっく(´・ω・`)

結局以前入れていたものをそのまま入れなおすだけで妥協。

## Redmine 2.4.3
はい最新版。

## Ruby 2.1.0 with rbenv
正直Rubyすら触ったことないのでアレなのだけど、とりあえず最新入れときゃ動くだろ的発想。

## MySQLとかApacheとかわらわら
  - 基本epelから引っ張ってる。

戦闘開始
=====

## 前哨戦
ログインできるのを確認し、手元の公開鍵を ~/.ssh/authorized_keys に放り込んだ後、

```bash
$ ssh root@legnoh.jp
$ mkdir .ssh
$ touch ~/.ssh/authorized_keys
...(セキュリティ上、SCPせずに手打ちでコピペする)
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
```

SSHの設定を変えて鍵オンリーに。

- [CentOSをサーバーとして活用するための基本的な設定 - さくらインターネット創業日記](http://tanaka.sakura.ad.jp/archives/001065.html)
  - 未だによく見てる。

```bash
$ vim /etc/ssh/sshd_config
```

```pl:/etc/ssh/sshd_config
Port 10022
PermitRootLogin without-password
PasswordAuthentication no
...
```

再起して適用。

```bash
$ service sshd restart
```

手元のMacにも、ホスト用の設定おいてログインを簡略化。

```bash
$ vim .ssh/config
```

```pl:~/.ssh/config
Host legnoh
    User root
    HostName legnoh.jp
    Port 10022
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes
```

SELinuxはさくらVPSだと元々止まってるし、epelも最新版が入ってたので作業の必要がなかった。
iptablesはプロトコルをまだ調べてなかったので、あとから設定でも良いかと思いスキップ。
以上前哨戦。

## ベースパッケージのインスコ

- [Redmine 2.4をCentOS 6.4にインストールする手順 | Redmine.JP Blog](http://blog.redmine.jp/articles/2_4/installation_centos/)

Redmine本家のインスコ手順に沿って、必要なパッケージをひとまずバコンバコンと。

```bash
$ yum install -y openssl-devel readline-devel zlib-devel curl-devel libyaml-devel
$ yum install -y mysql-server mysql-devel
$ yum install -y httpd httpd-devel
$ yum install -y ImageMagick ImageMagick-devel
$ yum install -y ipa-pgothic-fonts
```

## rbenv

- [sstephenson/rbenv](https://github.com/sstephenson/rbenv)

基本は、本家の手順そのまんま。途中抜けるのがめんどいので、.bash_profileはさくっとリロード。
ruby-buildもさっくり入れてやれ。

```bash
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ type rbenv
#=> "rbenv is a function"
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

いよいよRuby本体にかかる。

```bash
$ rbenv install -l
...
 2.0.0-p195
 2.0.0-rc2
 2.1.0
 2.1.0-dev
 2.1.0-preview1
 2.1.0-preview2
 2.1.0-rc1
...
```

安定版が2.1.0 と本家でもアナウンスされていたのでこっちでいいでしょ。
インスコ打って待つ。コンパイル終わり次第バージョン指定。

```bash
$ rbenv install 2.1.0
$ rbenv rehash
```

apacheからの実行になるので、rbenv配下に実行権限を与えておく。

```bash
chmod o+x /root/.rbenv/
```

ruby完了。

## bundler

- [Rails開発環境の構築（rbenvでRuby導入からBundler、Rails導入まで） - Qiita](http://qiita.com/emadurandal/items/a60886152a4c99ce1017)

すんげー詳しく書いてた人がいたので参考にした。特に以下。

- [gemのインストール先の判断（Ruby環境下 or bundlerでのローカルインストール）について](http://qiita.com/emadurandal/items/a60886152a4c99ce1017#2-10)

> 基本的には、そのプロジェクトでのみ使いたいgemであれば、bundlerで
> ```bundle install --path vendor/bundle```して、プロジェクトに閉じた形で
> gemをローカルインストールし、```bundle exec ~```で実行する形を取るのがよい。
> ただし、```bundler```や```pry```など、
>
> - どのプロジェクトでも共通して使いたい。
> - 複数のバージョンを使い分ける必要性が基本的になく、常に最新バージョンであればよい。
> 
> という性質のgemであれば、bundlerでローカルインストールするのでなく、
> ```rbenv exec gem install ~```としてRuby環境に直接インストールしてしまった方が利便性が高い。
> gemの特性と自分の利用シーンに合わせて、gemのインストール場所は使い分けよう。

あい、そうします。

```bash
$ rbenv exec gem install bundler --no-rdoc --no-ri
$ rbenv rehash
```

## MySQL
ここでまた[Redmine本家](http://blog.redmine.jp/articles/2_4/installation_centos/) の手順に戻る。

```bash
$ vim /etc/my.cnf
```

```pl:/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

character-set-server=utf8

# 任意設定
innodb_file_per_table
query-cache-size=16M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
default-character-set=utf8
```

起動とスタート設定もやっておく。

```bash
$ service mysqld start
$ chkconfig mysqld on
```

MySQLにログインして、全部の文字コードがUTf8になってるか確認し、rootパスワード設定、匿名ユーザ追放、Redmine用のDBを作成し、user_redmineに権限付与して反映、終了。

```bash
$ mysql -uroot
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> use mysql;
mysql> update user set password=password('********') where user = 'root';
mysql> delete from user where user = '';
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to user_redmine identified by '†††††††††';
mysql> flush privileges;
mysql> exit;
```

## Redmine
tarballをDLして展開、そのフォルダを配置場所で移動する。

```bash
$ wget http://www.redmine.org/releases/redmine-2.4.3.tar.gz
$ tar zxf redmine-2.4.3.tar.gz
$ mv redmine-2.4.3 /var/lib/redmine
```

次に設定ファイルを２つ、それぞれ先ほどのパスワードを用いる。

```bash
$ vim /var/lib/redmine/config/database.yml
```

```yaml:database.yml
production:
  adapter: mysql2
  database: db_redmine
  host: localhost
  username: user_redmine
  password: †††††††††
  encoding: utf8
```

```bash
$ vim /var/lib/redmine/config/configuration.yml
```

```yaml:configuration.yml
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: 'rm.legnoh.jp'

  rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
```

## Gem

Redmineのみで必要になるパッケージを入れる。こちらはRuby環境を汚さないように直接Redmine側に入れる。
また、Redmineで使うRubyのバージョンも指定しておく。

```bash
$ cd /var/lib/redmine
$ rbenv local 2.1.0
$ rbenv rehash
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
$ bundle install --without development test
$ bundle exec rake generate_secret_token
$ RAILS_ENV=production bundle exec rake db:migrate
```

## Passenger

これはどちらかというとPF系？な匂いがしたので、Ruby環境に入れる。

```bash
$ rbenv exec gem install passenger --no-rdoc --no-ri
$ rbenv rehash
$ passenger-install-apache2-module
(Enter連打)
$ passenger-install-apache2-module --snippet
```

で、出てきたスニペットをそのままApacheの設定にぶちこむ。

```bash
$ vim /etc/httpd/conf.d/passenger.conf
```

```apache:/etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/passenger-4.0.37
  PassengerDefaultRuby /root/.rbenv/versions/2.1.0/bin/ruby
</IfModule>

# Passengerが追加するHTTPヘッダを削除するための設定（任意）。
#
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 必要に応じてPassengerのチューニングのための設定を追加（任意）。
# 詳しくはPhusion Passenger users guide(http://www.modrails.com/documentation/Users%20guide%20Apache.html)をご覧ください。
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
RailsAppSpawnerIdleTime 86400
PassengerMaxPreloaderIdleTime 0
```

一番下の行については、古いと言われたのでこちらで新規設定に変えた。
そしてApache起動、自動設定。Redmineディレクトリの権限変更。

```bash
$ service httpd configtest
$ service httpd start
$ chkconfig httpd on
$ chown -R apache:apache /var/lib/redmine
```

## バーチャルホスト

httpd.conf の最下端にあったバーチャルホスト設定をコメントアウトし、
サブドメインで分けられるようにした。

```apache:/etc/httpd/conf/httpd.conf
NameVirtualHost *:80

<VirtualHost *:80>
   ServerName legnoh.jp
   DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
   ServerName rm.legnoh.jp
   DocumentRoot /var/lib/redmine/public
</VirtualHost>
```

次にゾーン情報。
私の場合、さくらのドメインでドメイン取ってたので、[さくらインターネット　会員メニュー - ドメイン名一覧](https://secure.sakura.ad.jp/menu/domain/) から、

```
rm	 A	 (IPアドレス)
```

で追加。約15分ほどでDNSに反映され、サブドメインが有効になった。

```bash
$ service httpd configtest
$ service httpd start
```


# 締め

これで本体にはアクセス可能に。-> [rm.legnoh.jp](http://rm.legnoh.jp/)
後は、気に入らないところを変えるための施策を打つ。

### admin変更
- [adminユーザのパスワードの変更 — Redmine.JP](http://redmine.jp/tech_note/first-step/admin/admin-user-password/)

### デフォルトデータのロード

- [デフォルトデータのロード — Redmine.JP](http://redmine.jp/tech_note/first-step/admin/load_default_data/)

### RedmineでMarkdown
- [redmineでGitHubのMarkdown記法を利用する - Qiita](http://qiita.com/mountcedar/items/9d313a6a0a8f86f1d962)

```bash
$ rbenv exec gem install redcarpet
$ rbenv rehash
$ git clone https://github.com/alminium/redmine_redcarpet_formatter.git /var/lib/redmine/plugins/redmine_redcarpet_formatter
$ cd redmine_redcarpet_formatter
$ git checkout v2.0.1
$ service httpd restart
```

[管理]->[設定]->[全般]->[テキストの書式]->[Markdown]が選べるのでこれに設定。

### Githubライクなテーマに
- [makotokw/redmine-theme-gitmike](https://github.com/makotokw/redmine-theme-gitmike)

```bash
$ git clone git://github.com/makotokw/redmine-theme-gitmike.git /var/lib/redmine/gitmike
$ service httpd restart
```

[管理]->[設定]->[表示]->[テーマ]->[Gitmike]が選べるのでこれに設定。

これだけ。あとは好みに応じて好き勝手しましょう。お疲れ様でした。

# 参考

- [【CentOS】Ruby と Ruby on rails すら無い状態から Redmine をインストールする！ | oki2a24](http://oki2a24.com/2014/02/08/try-to-install-ruby-and-redmine/)
  - 同じ日に同じことやろうとしてたので親近感わいた。正直触発されてこの記事書いた。

## Github 連携

本家Githubに連携手順が書いてあったのでそれに従う。

[管理]->[設定]->[リポジトリ]->[リポジトリ管理用のWebサービスを有効にする]にチェックを入れ、
下の「キーの生成」を押す。
![ 2014-02-09 12.36.19.png](https://qiita-image-store.s3.amazonaws.com/0/6529/c2ff3f81-e977-1ea9-f55d-3eb2840387d9.png)

Githubの対象リポジトリを、Redmineサーバのローカル上にcloneする。
今回はこちら。[legnoh/rm_gh](https://github.com/legnoh/rm_gh)

```bash
$ mkdir ~/code
$ git clone https://github.com/legnoh/rm_gh.git ~/code
```

Redmineのプロジェクトごとの[設定]->[リポジトリ]->[新しいリポジトリ]で、先ほどcloneしたパスを設定する。
![ 2014-02-09 12.47.32.png](https://qiita-image-store.s3.amazonaws.com/0/6529/e1eea32a-3d48-e4bc-e335-8537bdfaae3d.png)
この時点では、まだリポジトリにコミットが存在しない扱いになってしまう。

Github側のリポジトリ設定->[Service Hooks]->[Redmine] を選び、
そこにRedmineのURL、プロジェクト名、先ほど取得したAPIキーを入力する。
![ 2014-02-09 12.52.56.png](https://qiita-image-store.s3.amazonaws.com/0/6529/77575629-fc49-e161-6fc7-344b9a6298ff.png)

はい。