daybreaksnow's diary

私を私と呼びたい

[Linux]さくらVPSのCentOSにRedmineをインストール

前回の続き
[Linux]さくらVPSのCentOSにApacheをインストール - daybreaksnow's diary


Redmineの公式サイトを参考にした。

Redmine 2.4をCentOS 6.4にインストールする手順 | Redmine.JP Blog

SELinuxを無効にする

セキュリティ管理用のモジュールらしい。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280414/

無効にしないでもインストールできるらしい(http://h2np.net/docs/redmine-selinux.html)が、さくらのデフォルトでdisabledになっていたので修正なし

EPELパッケージのインストール

EPEL:エンタープライズ Linux 用の拡張パッケージ

以下から最新のパッケージのパスを確認
http://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/epel-release.html

最新のパッケージのパス
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

インストール

#rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

さくらのデフォルトではインストール済みだった。

開発ツール(Cコンパイラ等)のインストール
yum groupinstall "Development Tools"

以下のメッセージが出た。メッセージを見る限り引数が不正なようだが、このまま進んでも問題なかった。

Warning: Group development does not have any packages.
No packages in any requested group available to install or update

※2014/8/29追記
日本語化している(/etc/sysconfig/i18nでLANG=ja_JP.UTF-8としている)場合、「開発ツール」としなければならない。

RubyとPassengerのビルドに必要なヘッダファイルなどをインストール
yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel

Is this ok?と聞かれるので、y。
再度にComplete!と出て完了。

MySQLとヘッダファイルのインストール
yum install mysql-server mysql-devel
Apacheとヘッダファイルのインストール
yum install httpd httpd-devel
ImageMagickとヘッダファイル・日本語フォントのインストール

これは任意だが、ImageMagickは添付ファイルのサムネイル表示に使うということなので、入れておく。

yum install ImageMagick ImageMagick-devel
yum install ipa-pgothic-fonts

ipa-pgothic-fontsはデフォルトで入っているようだ。

Package ipa-pgothic-fonts-003.02-4.1.el6.noarch already installed and latest version
Nothing to do

Rubyのインストール

最新のtarballを落とす
http://www.ruby-lang.org/ja/downloads/

前世代の安定版: Ruby 2.0.0-p353 を落とした。
http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz

ビルド、インストール
tar zxvf ruby-2.0.0-p353.tar.gz 
cd ruby-2.0.0-p353
./configure --disable-install-doc
make
sudo make install
バージョン確認
$ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]
bundlerのインストール

bundlerとは:RubyGemの依存関係管理ツール
RubyGemとは:Rubyのライブラリ

#gem install bundler --no-rdoc --no-ri
Fetching: bundler-1.5.2.gem (100%)
Successfully installed bundler-1.5.2
1 gem installed

MySQLの設定

デフォルトキャラクタセットをutf8に設定
  • 編集対象
/etc/my.cnf
  • 修正内容
[mysqld]
default-character-set=utf8

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

MySQLを起動、自動起動ON

service mysqld start
chkconfig mysqld on

ここでmsqldの起動でエラーとなった。

ログを見てみる

  • コマンド
less /var/log/mysqld.log
  • 中身
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

上記エラーメッセージでググってみると、mysql_install_dbコマンドを実行すればよいらしい。
root権限で実行、再度mysqldをstartすると、今度は起動に成功した。

rootにパスワード設定

このままだとmysql -u rootでパスワードなしでログインできてしまう。
rootにパスワードを設定する。

sudo mysqladmin -u root password [パスワード]

エンコード確認

mysqlにログイン後、以下のコマンドを実行

show variables like 'character_set%';

以下のように全てUTF-8になっていればOK。

+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

不要なユーザを除去

  • ユーザ確認SQL
use mysql;
select user from user;
  • 実行結果

以下のように名前なしユーザが二人いた。

mysql> select user from user;
+------+
| user |
+------+
| root |
|      |
| root |
|      |
| root |
+------+
5 rows in set (0.00 sec)

匿名のユーザを削除する。

delete from user where user = '';

Redmine用データベースとユーザーの作成

create database db_redmine default character set utf8;
grant all on db_redmine.* to user_redmine identified by 'パスワード';
flush privileges;

Redmineのインストール

以下からRedmineのtarballをダウンロード
http://www.redmine.org/projects/redmine/wiki/Download

解凍したらRedmineの配置先に移動する。

mv redmine-2.4.3 /var/lib/redmine

データベースへの接続設定

/var/lib/redmine/config/database.ymlを作成。
database.yml.sampleをコピーして、以下を修正した。

production:
  database: db_redmine
  username: user_redmine
  password: パスワード (Redmine用データベースとユーザーの作成で設定したもの)

configuration.ymlの設定

/var/lib/redmine/config/configuration.ymlを作成。
configuration.yml.sampleをコピーして、以下を修正した。

production:
    smtp_settings:
      address: "localhost"
      domain: 'サーバのIPアドレス'

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

ここで:の後の半角スペースがないと、後でrake db:migrateの実行時にエラーとなるので注意。

サーバのIPアドレスと書いたところは、サーバのFQDNとなっているが、ドメインを取っていないのでIPアドレスにした。これでいいかは不明。
SMTPの設定なので、メール通知を使わないなら適当でもOK?

Gemパッケージのインストール

redmineが必要とするライブラリを入れる。
redmineのインストールディレクトリ(/var/lib/redmine)で以下を実行

# bundle install --without development test

実行後、以下のメッセージが出た
rubyのバージョンは2.0.0のため、nothing to doに当てはまり、追加のインストールは必要ない。

Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!

Redmineの初期設定とデータベースのテーブル作成

セッションデータ改竄防止用鍵の生成とテーブル作成

Redmineのインストールディレクトリで以下のコマンドを実行

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

RAILS_ENV=productionは単に環境変数にproductionを入れるだけ。
rubyではこの環境変数でdevelopment、test、productionなどのモードを切り替えるとのこと。

rakeはrubyのビルドツール。Ant的なものか?

db:migrateはその名前の通りDBのマイグレーションを行う。あらかじめ定義したDDLを実行する感じか?

bundle execと、直接rakeを呼ぶのでは、以下のような違いがある。

rake:Railsの共通のライブラリ保存場所から読みだす
bundle exec:プロジェクトのライブラリ保存場所から読み出す

参考:http://ka-zoo.net/2013/07/difference-of-rake-xxx-and-bundle-exec-rake-xxx/

Passengerのインストール

Passengerとは:apacherubyアプリを動かすためのapacheモジュール

gem install passenger --no-rdoc --no-ri
passenger-install-apache2-module

rdocとはJavaDoc的なものか。


文字化けが出たがそのままエンターで進んだ。

  • 出力結果
   LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37
     PassengerDefaultRuby /usr/local/bin/ruby
   </IfModule>

Passengerの設定

  • 作成ファイル
/etc/httpd/conf.d/passenger.conf
  • 記述内容
# Passengerの基本設定。
# passenger-install-apache2-module --snippet を実行して表示される設定を使用。
#
 LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37
     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"

# Passengerのチューニング。
# TODO 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
RailsFrameworkSpawnerIdleTime 0

apacheredmineを触れるようにする

chown -R apache:apache /var/lib/redmine

apacheは上記の通りapacheというユーザで操作するらしい。

Redmineを公開する(サブディレクトリでRedmineを実行)

redmineのインストールディレクトリへのシンボリックリンクを作成

ln -s /var/lib/redmine/public /var/www/html/redmine

/etc/httpd/conf.d/passenger.confに以下を追記。

RackBaseURI /redmine

apacheを再起動。

service httpd graceful

restartはhttpd プロセスを完全に停止してから再起動する。
gracefulは httpd プロセスの通信が終わるのを待って、順次新しい設定を反映した httpd を起動させる。