ArchLinuxにRedmineを導入する手順・構築編

ArchLinuxにRedmineを構築したのでメモ

とりあえずRedmine自体の構築のみ
本番環境とSSL/TLSを利用する場合の設定は別に書きます

必要なもの

  • データベース
    • mysql(mariadb)とかsqliteとかperaconaとかお好みで選べるらしい
    • 今回はmariadbを使用する。
    • $ sudo pacman -S mariadb
  • webサーバ(Apache)
    • 今回はApacheを使用します。
    • $ sudo pacman -S apache
  • ImageMagick
    • 画像を表示させたりするやつ
    • $ sudo pacman -S imagemagick
  • git
    • Redmineと連携

リリースパッケージのダウンロードと展開

Redmineのサイトからダウンロード。
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz.md5

md5でハッシュを確認しておく

$ md5sum redmine-3.0.3.tar.gz
> 493463.... 
$ cat redmine-3.0.3.tar.gz.md5
> 493463....

tarをお好みの場所に展開する。
自分は/srvに展開しました。
$ sudo tar fvxz redmine-3.0.3.tar.gz -C /srv/

データベースの用意

コマンドがmysqlとなっているが、あくまでmariadbはmysqlの実装なのでmysqlのコマンドが使える。

データベースの初期設定

デフォルトのテーブルのインストール

自分の環境だとこれをやらないと後でmysqld.serviceが起動できなくなってしまった。
ArchWikiのトラブルシューティングの項目に載っていた

# cd /usr
# mysql_install_db --user=mysql --ldata=/var/lib/mysql/

を実行

mysqlの起動

systemdでmysqlを起動してみる。
$ sudo systemctl start mysqld
うまく起動できたら起動時に実行されるようにしておく
$ sudo systemctl enable mysqld

データベースの初期化

セットアップスクリプトの実行
$ sudo mysql_secure_installation

rootのpassを聞かれるが、まだパスワードを設定していないのでそのままEnter
> Enter current password for root (enter for none) :
新しいrootのパスワードを設定するか聞かれるので"y"
> Set root password? [Y/n] : y
> New password: 設定したいパスワードを入力
> Re-enter new password: 設定したいパスワードを再入力
匿名ユーザーを削除する
> Remove anonymous users? [Y/n] : Enter
リモートからのrootログインを拒否
> Disallow root login remotely? [Y/n] : Enter
testテーブルを削除する。
testテーブルは誰でもアクセスできてしまう。セキュリティ的に消したほうがいいらしいので消す
> Remove test database and access to it? [Y/n] : Enter
権限テーブルをリロードする
> Reload privilege tables now? [Y/n] : Enter
設定は以上で終わり

データベースの文字コード

文字コードをUTF-8に変更します。
ArchWikiに載っていた方法だとうまく変更できなかったので他のサイトで見つけてきた方法で変更します。
ちなみに、RedmineはUTF-8に設定しておけば文字化けはしないそうです。

とりあえず先に現在の文字コードを確認
$ mysql -uroot -p
mysql> show variables like "chara%";

Variable_name Value
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

mysqlの設定ファイルを編集し、[client]と[mysqld]に次の行を追加
$ sudo vim /etc/mysql/my.cnf

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

他の設定項目を見ると、アンダーバーとハイフンの2通りの設定項目がありますが、mysqlの設定ファイルの場合、どちらでも問題は無いようです。
ちなみに、default-character-set=utf8character-set-server=utf8は同じ意味だそうです。
詳しくはここ

もう一度確認してみます。
mysql> show variables like "chara%";

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/

データベースユーザの作成

Redmineが使用するMySQLのユーザを作成します。

MySQLにログインし、次の3行を入力

CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY '[パスワード]';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

データベースの設定

"production"環境用のデータベース設定をする。
Railsではproduction、development、testなどの本番環境や開発環境で環境をわけれるらしい?
productionが本番環境用で、developmentは開発環境
違いはdevelopmentはある程度のエラーは許容するみたい

ここでは、一旦Redmineのデータベースの設定を行います。
実際のテーブルとかは後で作成します。

config/database.ymlの作成

Redmineの展開ディレクトリに移動して
$ sudo cp config/database.yml.example config/database.yml 設定ファイルの編集

# vim config/database.yml
    production:
        adapter: mysql2
        database: redmine
        host: localhost
        username: redmine
        password: "[パスワード]"
        encoding: utf8

bundlerのインストール

インストール

$ sudo gem install --no-user-install bundler
ArchLinuxでは、デフォルトではgemはシステム全体ではなく、個別にインストールされるようになっている。
--no-user-installオプションを追加することで、システム全体(/usr/lib/ruby/gems/)にインストールされる

gemのインストール

Redmineの展開したディレクトリの中で
$ bundle install --without development test postgresql sqlite
$ sudo -uhttp bundle install --without development test postgresql sqlite
今回はMySQLを使用するので、postgresqlとsqliteのgemを省略します。
ImageMagickをインストールしていない場合は--withoutオプションにrmagickを追加します。
インストールしている場合、エラーが出ることがあるそうです。
その場合はこことかが参考になりそうです

bundleコマンドは基本的にはsudoを使用しなくて問題ないみたいです。
sudoでbundleを使用したら怒られました
root権限が必要なときはその時にパスワードを求めてくるそうです。

セッションストア秘密鍵の生成

Redmineの展開ディレクトリで下記コマンドを実行
$ sudo rake generate_secret_token

データベース上にテーブルを作成

Redmineの展開ディレクトリに移動

データベースにテーブルを作成

テーブルとRedmineの管理者アカウントが作成される
$ RAILS_ENV=production rake db:migrate

デフォルトデータをデータベースに登録

デフォルトのロール、トラッカー、ステータス、ワークフロー、列挙項目がロードされる 使用言語を聞かれるのでjaと解答
$ RAILS_ENV=production rake redmine:load_default_data

パーミッションの設定

Redmineの展開ディレクトリ内で、
$ sudo mkdir tmp public/plugin_assets
$ sudo chown -R http:http [Redmine全体]
$ sudo chmod -R 755 files log tmp public/plugin_assets

ちなみにRedmine Guideによると、

Railsアプリケーションのディレクトリ($RAILS_ROOT)および$RAILS_ROOT以下のファイル・ディレクトリのオーナーは、root以外としてください。 Passengerでは、root権限でRailsアプリケーションを動かすことはできません。Railsアプリケーションが動作するユーザーは$RAILS_ROOT/config/environment.rbのオーナーとなりますが、environment.rbがrootの場合はnobodyユーザーで動作します。このとき、オーナーがrootである$RAILS_ROOT/logディレクトリや$RAILS_ROOT/tmpディレクトリに書き込みができず、アプリケーションが動作しないことがあります。

rootだとダメみたいです。

構築できたか確認

うまく構築できたか一度確認します。
$ sudo ruby script/rails server webrick -e production
script/railsは無いとか怒られたんでbin/railsを使用します。
$ sudo ruby bin/rails server webrick -e production
外部のVPSなどで起動する場合、そのVPSのIPをオプションで設定してあげる必要があります。
$ sudo ruby bin/rails server webrick -e production -b 157.7.53.36

WEBrickを起動して、http://[ホスト名]:3000/ にアクセスするとRedmineが開けるはずです。
(ポートの開け忘れに注意!)

WEBrickはRedmine Guideによると、

注意: Webrickは通常は開発時に使用すものであり、通常の運用には適していません。動作確認以外には使用しないでください。本番運用においてはPassenger (mod_rails)、FCGI、またはRackサーバ(Unicorn, Thin, Puma, hellipなど)の利用を検討してください。

とのことなので、本番環境を何で動かしゃいいのかググった結果、 ArchWikiに本番環境はApacheにPassengerを導入したものでいいみたいなことが書いてあったので、そうしたいと思います。

本番環境の構築と、設定などは次の記事で書きたいと思います。

ちなみにWEBrickでも login: admin password: admin でログインして設定変更とかは出来ます。

[参考サイト]

MySQL