純規の暇人趣味ブログ

手を突っ込んで足を洗う

Ubuntu 16.04(またはRaspbian)にRedmineをインストールする

      2016/06/25    HimaJyun

前回はGitサーバ(Gitolite)をセットアップしました。

せっかく良いバージョン管理システムを入手したのですから、次に欲しくなってくるのはプロジェクト管理でしょう。

と、言う訳で、今度はプロジェクト管理ソフトウェアのRedmineをインストールしてみようと思います。

Redmine

RedmineはRuby on Railsで出来ているプロジェクト管理ソフトウェアです。

issueトラッカー(チケット)やWiki、ガントチャートにフォーラム、持て余すくらいの高機能さでGitHubとも引けを取りません。(当初はGitHubクローンのGitBucketを使う予定だったんですけどね、色々事情があってRedmineを採用しました)

もちろん、GitやSVNなどとの連携も可能です。(今回は取り扱いませんが……)

って……このページをご覧の方には説明なんて要りませんよね……、説明が必要な方はデモページをご覧頂くのが最速かと

前提条件

その「持て余すくらいの高機能さ」の代償として、やたらとインストールが面倒な事で有名です。(慣れればそうでもないのですが……)

流石に如何なる環境でも通用する構築方法を書こうと思うと無駄に分厚い本1冊分くらいになってしまうため、以下の様な状態であると仮定して話を進めます。

  • Ubuntu 16.04(またはRaspbian、aptが使えるディストリならだいたいそのまま行けるかと)
  • WebサーバにはApacheを使用
  • Railsの実行環境はPassenger(mod_passenger)を使用
  • データベースはMySQL(もしくはMariaDB)を使用
  • ImageMagicもきちんとインストールする
  • インストール先は「/var/www/redmine」
  • 本体(Redmine)以外(Rubyなど)はパッケージ(apt)でのインストールを優先

下ごしらえ

まず最初に、必要なパッケージをインストール……する所から既に面倒なんですよね……

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

とりあえず以下の物は必要ですのでインストールして下さい。

# Ruby系
sudo apt-get install ruby-dev ruby bundler
# Apache系
sudo apt-get install apache2 libapache2-mod-passenger
# ImageMagic系
sudo apt-get install imagemagick libmagick++-dev
# バージョン管理系
sudo apt-get install git subversion

次に、データベースサーバをインストールするのですが、インストールするデータベース(MySQL/MariaDB)によってインストールする物が変わります。

利用している方を選択して下さい(ちなみに、ナカノヒトはMariaDBを使用中です)

# MySQL
sudo apt-get install mysql-server libmysqlclient-dev
# MariaDB
sudo apt-get install mariadb-server libmariadb-client-lgpl-dev

きっと途中でパスワードを聞かれると思いますが、程よく強力な物を設定するべきだと思いますよ。

MySQLの設定変更

Redmineのデータベースの文字コードは「utf8mb4」を利用しようと思います。

そのためには多少の設定変更が必要ですが、後で可愛い彼女(そんなものはいない)に「カレシのRedmine、絵文字使えなくてさぁ~」なんて言われるよりかは数億万倍マシなので頑張って下さい。

/etc/mysql/conf.d/redmine.cnfを作成し、以下の内容を書き込んで下さい。

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
character-set-server = utf8mb4
skip-character-set-client-handshake
collation-server = utf8mb4_general_ci
init-connect = SET NAMES utf8mb4

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4

既にMySQLサーバが入っていて、何かのアプリケーションが稼働している場合には問題が起こるかも知れません。

その様な場合には慎重に設定変更して頂ければと思います。

設定変更が完了したら「sudo service mysql restart」でMySQLを再起動しましょう。

Redmine用データベースの作成

とりあえず「mysql -u root -p」でMySQLサーバにログインしましょう。

ログイン出来たら以下のSQLを実行してデータベースの作成とユーザの追加を行いましょう。(db、userは好みに合わせて設定して下さい)

CREATE DATABASE db CHARACTER SET utf8mb4;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'Redmine用ユーザのパスワード';
GRANT ALL PRIVILEGES ON db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

パスワードは程よく強力な物を……

Redmineのインストール

次は実際にRedmineを動かすための作業を行いましょう。

Redmineのダウンロード

次に、Redmine本体をダウンロードしますが、絶対的にSubversionでやった方が良いです、wgetとかでtar.gzをダウンロードして展開するやり方だとアプデの時に漏れなく苦労します。(svnだとディレクトリ内に入ってコマンド数個でちょちょいのちょいです。)

とりあえず、/var/www/redmineを作成して、所有者をwww-dataに変更しましょう。

sudo mkdir -p /var/www/redmine
sudo chown www-data:www-data /var/www/redmine

Subversion(svn)のcheckout(co)を利用してダウンロードします。

sudo -u www-data svn co http://svn.redmine.org/redmine/branches/3.2-stable /var/www/redmine

「3.2-stable」の部分は使いたいバージョンに合わせて設定して下さい(3.2.x.xの部分は必要ありません、3.2.x系なら3.2-stable、の様に)

Redmineの設定ファイルを作成

Redmineの設定ファイルを作成しましょう、まずはデータベースの設定から

「/var/www/redmine/config/database.yml」を作成して以下の内容を書き込みます。(ここまでの手順通りならディレクトリの所有者が「www-data」になっているはずなので、rootでないとファイルが作成出来ないと思われます)

production:
  adapter: mysql2
  host: localhost
# Redmine用のMySQLデータベース名 
  database: db
# Redmine用のMySQLユーザ名
  username: user
# Redmine用のMySQLパスワード
  password: your_db_password
  encoding: utf8mb4
  socket: /var/run/mysqld/mysqld.sock

次に「/var/www/redmine/config/configuration.yml」を作成して以下の内容を書き込みます。

production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: smtp.example.jp
      port: 25
      domain: redmine.example.jp
      enable_starttls_auto: false

メール通知は様々な方法があり、色々と面倒なので「メール通知のためのconfiguration.ymlの設定」をご覧下さい。

厳密には設定では無いのですが、MySQLをutf8mb4で利用するにあたって1つ、ファイルを追加する必要があります。

「/var/www/redmine/config/initializers/utf8mb4.rb」を作成して、以下の内容をコピペして下さい。

ActiveSupport.on_load :active_record do
  module ActiveRecord::ConnectionAdapters

    class AbstractMysqlAdapter
      def create_table_with_innodb_row_format(table_name, options = {})
        table_options = options.merge(:options => 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC')
        create_table_without_innodb_row_format(table_name, table_options) do |td|
          yield td if block_given?
        end
      end
      alias_method_chain :create_table, :innodb_row_format
    end

  end
end

Redmineの初期設定

もう少しです、頑張って!!

まずはRedmineをインストールしたディレクトリに移動しましょう

cd /var/www/redmine/

今の段階だとwww-dataとrootのファイルが混在しているので、全てwww-dataの物にしてしまいましょう。

find | sudo xargs chown www-data:www-data

次に、Redmineが必要とする依存ライブラリを取得します。

以下のコマンドを実行して、赤文字が出なければおkです。(手順通りに進んでいたら出ないはず)

sudo -u www-data bundle install -j$(nproc) --without development test postgresql sqlite --path vendor/bundle

次に、シークレットトークンを作成して、テーブルを作成して、デフォルトのデータを読み込みましょう。

sudo -u www-data bundle exec rake generate_secret_token
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

実行中に特にエラーなどが出なければOKです。(warning: key "inodot" is duplicated and overwritten on line ...は正常(?)な動作なので無視して構いません)

さぁ、これでRedmineを実行する準備が整いました……Apache以外はね。

Apacheの設定

さて、ここまで上手く行ったのであればWebから見るためにApacheの設定を行いましょう。

大丈夫です、mod_passengerのおかげでそう大して難しくはありませんから。

Passengerの設定

パフォーマンスチューニングの方はまた別として、とりあえず「PassengerPreStart」の設定はおススメです。

Redmine(と言うか、Passengerで動くもの)はアクセスされた時に初めて起動されます、初回起動時に色々読み込んだりアレしたりコレしたりと、応答がかなり遅いです。

そこで「PassengerPreStart」を指定すると、Apacheが起動した段階で自動的に自分自身にリクエストを送ってRedmineを起動しておくことが出来ます。

「/etc/apache2/mods-available/passenger.conf」をエディタで開いて、以下の設定を追記しましょう。

PassengerPreStart http://redmineのアドレス/

Webサイトの設定(ルートに設置する場合)

もし、RedmineをWebサイトのrootに設置(http://redmine.example.jp/ で見られるように)する場合は以下の様な設定になります。

<VirtualHost *:80>
	ServerName redmine.example.jp

	ServerAdmin redmine@example.jp
#	public/ディレクトリを指定する事に注意
	DocumentRoot /var/www/redmine/public

#	他のモジュールとの互換性を犠牲にPassengerの性能を底上げするオプションです。
#	Directoryの中に移動させるとなぜか404になります。
	PassengerHighPerformance on
	<Directory /var/www/redmine/public>
#		アクセス制限を掛けておくと安全!!
		Require ip ::1 127. 192.168.
#		.htaccessなどは利用しない方が(ほんの少しだけ)高性能になります。
		AllowOverride None
		Options None
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

設定が終わったら「sudo service apache2 restart」で再起動してやりましょう。

Webサイトの設定(サブディレクトリに設置する場合)

Redmineをサブディレクトリに設置(http://example.jp/redmine/ で見られるように)する場合は少し準備が必要です。

現在のルートは「/var/www/html」にあると仮定します。

まず最初に、Redmineをインストールしたディレクトリへのシンボリックリンクを張ってやる必要があります。

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

でもって、以下の様に設定します。

<VirtualHost *:80>
	ServerName example.jp

	ServerAdmin webmaster@example.jp
#	public/ディレクトリを指定する事に注意
	DocumentRoot /var/www/html

#	これを指定する事でRedmineの場所が異なっていてもPassengerが正常に起動します。
	RackBaseURI /redmine
	<Directory /var/www/html/redmine>
#		アクセス制限を掛けておくと安全!!
		Require ip ::1 127. 192.168.
#		.htaccessなどは利用しない方が(ほんの少しだけ)高性能になります。
		AllowOverride None
		Options None
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

設定が終わったら「sudo service apache2 restart」で再起動してやりましょう。

出来上がり

どうでしょう?、正常に起動しましたでしょうか?、初期ユーザはユーザ名「admin」パスワード「admin」でログイン出来ますよ(ルータみたい)

Redmineのインストールは色々と面倒な所がありますが、インストールさえ出来てしまえばプラグインなどもあり、とても幅広く便利に使いこなす事が出来ます。

インストールもコツを掴んでしまえば簡単ですし、少なくとも僕はこの手法で出来ています、頑張って!!

 - サーバ運営 , ,