CentOS6へのredmineオフラインインストール


---

オフライン（インターネットに接続できない）のサーバにredmineをインストールしなければいけない場合の手順メモ。

セキュリティの厳しい企業などでは、インターネットに接続できないサーバセグメントを使うところも（たまに）あります。
テクノロジとしてruby、python、nodejs系など合わないということはおいておいて、redmineとかはチーム開発に役に立つのでせめて使いたいなぁ。
みたいなときに。

事前にインターネットに接続できる環境でいくつかリソースを作っておくことを前提とします。
（ともかく、5-b-iをなんとかできればいけます）

---

# 環境

| 項目 | 内容 ruby2.0系 | 内容 ruby1.9系 |
|:--|:---|:---|
| Cent OS | 6.5 | 同左 |
| redmine | 2.5.2.stable | 同左 |
| ruby | 2.0.0-p481 | 1.9.3-p547 |
| gem | 2.4.1 | 同左 |
| rails | 3.2.19 | 同左 |
| environment | production | 同左 |
| database adapter | mysql2 | 同左 |
| アプリディレクトリ | /usr/local/apl/redmine-2.5.2 | 同左 |
| 作業用ディレクトリ | /usr/local/src | 同左 |
| httpdサブディレクトリ | /var/www/html/redmine ※シンボリックリンク| 同左 |
| URL | http://[hostname]/redmine | 同左 |

---

# <a name ="準備">事前準備</a>

1. インターネットに接続できる環境で、下記「[インストール手順](#インストール手順)」の1〜5.1までを実施

2. redmine配置先に移動

    ```
    # cd /usr/local/apl/redmine-2.5.2
    ```

3. database.ymlを作成

    ```yaml:./config/database.yml
    production:
      adapter: mysql2
      database: db_redmine
      host: localhost
      username: user_redmine
      password: "********"
      encoding: utf8
    ```

4. bundleインストール（インターネット上の最新リソースを参照）

    ```
    "vendor/bundle"にgemパッケージ等をインストールする
    対象はproduction環境のみ、rmagickも除く
    # bundle install --without development test rmagick --path ./vendor/bundle
 
    bundleインストールしたリソースのキャッシュを作成
    # bundle package
    ```

5. 上記で作成されたもの（redmine配置先の以下のファイル）をバックアップ

* **Gemfile.lock**
使用するgemパッケージのバージョンが記述されているファイル。

* **config/database.yml**
database接続情報が記述されているファイル（mysqlアダプタ指定）。

* **vendor/cache**
使用するgemパッケージがキャッシュされているディレクトリ。圧縮しておく。（bundle_cache.tar.gz）


---

# <a name ="インストール手順">インストール手順</a>

## 0. ネットワーク関連
iptables、ip6tables、selinuxなどは必要に応じて設定。


## 1. yumパッケージ

```
CD-ROMからインストール
# mkdir /media/cdrom
# mount -r -t iso9660 /dev/cdrom /media/cdrom/

※メディアのみの場合は"--disablerepo=\* --enablerepo=c6-media"を付与
# yum install gcc gcc-c++
# yum install httpd httpd-devel
# yum install mysql-server mysql-devel
# yum install openssl-devel readline-devel zlib-devel curl-devel 

```

## 2.  libyaml

```
以下からlibyaml, libyaml-develをダウンロード
http://dl.fedoraproject.org/pub/epel/6/x86_64/

# rpm -ivh libyaml-0.1.6-1.el6.x86_64.rpm libyaml-devel-0.1.6-1.el6.x86_64.rpm
```

## 3. ruby

### 3.1. rubyインストール
```
以下からrubyソースパッケージをダウンロード
https://www.ruby-lang.org/ja/downloads/

解凍＆展開
・ruby2.0系
# tar zxvf ruby-2.0.0-p481.tar.gz 
# cd ruby-2.0.0-p481
・ruby1.9系
# tar zxvf ruby-1.9.3-p547.tar.gz 
# cd ruby-1.9.3-p547

ビルド＆インストール
# ./configure --disable-install-doc
# make
# make install

確認
・ruby2.0系
# ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]

・ruby1.9系
# ruby -v
ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux]

```

### 3.2. gemパッケージインストール
```
オフラインの場合は以下から対象のgemパッケージを検索して
ダウンロードし、ファイル名指定でインストールする
https://rubygems.org/


■gemを最新版に更新
・オンライン
# gem update --system --no-rdoc --no-ri

・オフライン
# gem install rubygems-update-2.4.1.gem
# update_rubygems

gemバージョン確認
# gem -v
2.4.1


■bundlerインストール
# gem install bundler --no-rdoc --no-ri

■passenger関連gemインストール
# gem install daemon_controller rack passenger --no-rdoc --no-ri


■確認
・1.9系
# gem list
bigdecimal (1.1.0)
bundler (1.6.5)
daemon_controller (1.2.0)
io-console (0.3)
json (1.5.5)
minitest (2.5.1)
passenger (4.0.48)
rack (1.5.2)
rake (0.9.2.2)
rdoc (3.9.5)
rubygems-update (2.4.1)

・2.0系
# gem list
bigdecimal (1.2.0)
bundler (1.6.5)
daemon_controller (1.2.0)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
passenger (4.0.48)
psych (2.0.0)
rack (1.5.2)
rake (0.9.6)
rdoc (4.0.0)
rubygems-update (2.4.1)
test-unit (2.0.0.0)
```

## 4. mysql

### 4.1. my.cnfにutf8の設定を追加
```/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

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

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

### 4.2. mysqlサービス設定
```
起動
# service mysqld start

自動起動設定
# chkconfig mysqld on

セキュリティ設定（rootパスワード他）
# mysql_secure_installation

DB、ユーザー作成
# mysql -u root -p
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to user_redmine@localhost identified by '********';
mysql> flush privileges;
mysql> exit
```

## 5. redmine

### 5.1. redmineリソース配置
```
以下から最新のredmineを取得する
http://www.redmine.org/projects/redmine/wiki/Download
redmine-2.5.2.tar.gz

配置する
# mkdir /usr/local/apl
# tar zxvf redmine-2.5.2.tar.gz
# mv ./redmine-2.5.2 /usr/local/apl/
```

### 5.2. redmineビルド（bundlerを使用）
#### 5.2.1. 事前に作成したリソースの配置（※1 作成方法は「[事前準備](#事前準備)」）
```
Gemfile.lockの配置
# cp [Gemfile.lockファイル] /usr/local/apl/redmine-2.5.2/

database.ymlの配置
# cp [database.ymlファイル] /usr/local/apl/redmine-2.5.2/config/

キャッシュの配置
# tar zxvf bundle_cache.tar.gz
# mv  [解凍したディレクトリ] /usr/local/apl/redmine-2.5.2/vendor/
```

#### 5.2.2. bundlerでredmineをビルド
```
redmine配置先に移動
# cd /usr/local/apl/redmine-2.5.2

bundleインストール（ローカルのキャッシュ参照）
# bundle install --without development test rmagick --path vendor/bundle --local

redmineのビルド
# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate
```


## 6. passengerとhttpdの設定

### 6.1. httpdモジュールインストール
```
インストール
# passenger-install-apache2-module
-> 実行後、以下の部分を6-bに記載する
    LoadModule・・・
      <IfModule mod_passenger.c> 〜 </IfModule>
```

### 6.2. passenger用conf設定
```/etc/httpd/conf.d/passenger.conf
・2.0系
LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.48/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.48
     PassengerDefaultRuby /usr/local/bin/ruby
   </IfModule>

・1.9系
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-4.0.48/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-4.0.48
     PassengerDefaultRuby /usr/local/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"

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
RailsAppSpawnerIdleTime 86400
PassengerMaxPreloaderIdleTime 0

# DocumentRootのサブディレクトリで実行する設定
RackBaseURI /redmine
```

### 6.3. シンボリックリンク作成
```
# ln -s /usr/local/apl/redmine-2.5.2/public /var/www/html/redmine
```

### 6.4. 権限設定
```
# chown -R apache:apache /var/www/html/redmine
# chown -R apache:apache /usr/local/apl/redmine-2.5.2
```

### 6.5. httpdサービス起動 or 再起動
```
httpdサービス自動起動有効化
# chkconfig httpd on

httpdサービス起動
# service httpd configtest
# service httpd start

またはhttpdサービスの再起動
# service httpd configtest
# service httpd graceful
```