Raspberry Pi で Redmine 環境構築

業務ではよく Redmine(レッドマイン)を使います。
Redmine は、主にプロジェクト管理に利用するソフトウェアですが、BTS(バグトラッキングシステム)として使われることもあります。
(BTSはその名の通りバグなどの不具合を一括管理する仕組みです)。

その Redmine を自分管理の一環として自宅環境用に導入することにしました。

base on Redmineとは — Redmine.JP

Redmineはプロジェクト管理ができるオープンソースソフトウェアです。
例えば、チームでシステム開発を進める場合に誰がいつまでに何をやるのか、現在どのくらい進んでいるのかをRedmineに記録することで進捗状況を明らかにし計画通りに進むよう支援します。

目次

テーマ

自宅での運用前提なので簡単導入がテーマです。
導入工数削減のため、DBは SQLite を使うことにしました。

SQLite は非常にシンプルな RDBMS で、SQLite は複数同時の書込パフォーマンスがあまり良くありません。
そのため一人、あるいは複数人で使うけれども書込む人が少ない場合に限られるでしょう。
※同時書込人数が少なければ問題ありません。

環境

単独運用前提で Raspberry Pi を使うことにしました。
NanoPi NEO でも良かったのですが、RAM が 512MBと少なかったので Raspberry Pi にしました。
(Raspberry Pi 3 Model B は 1GB)。

プラットフォーム 概要
ハードウェア Raspberry Pi 3 Model B
OS Raspbian Stretch Lite
Webサーバ Apache 2
DB SQLite 3

また、Redmine の運用前提なので OS には GUI なしの Raspbian Stretch Lite を導入します。

base on Download Raspbian for Raspberry Pi

Raspbian Stretch Lite
Minimal image based on Debian Stretch

導入

必要パッケージ

主な導入パッケージは4種類です。
(後は依存関係で引っ張ってもらいます)。

  • Bundler
  • ImageMagick
  • Passenger
  • Redmine

base on Redmineのインストール - Redmineガイド

  • Passenger(mod_rails)
  • RedmineはRubyGemの依存関係を管理するために Bundler を使用します。
  • ImageMagick(ガントチャートのPNG形式でのエクスポートとサムネイル生成に使用)

導入手順

OS インストール

ダウンロードしたイメージを Etcher などを使って microSDカードに書き込みます。
書き込んだカードを Raspberry Pi に挿入後、電源投入すると DHCP から IP を取得して起動します。

設定

OS(Raspbian)導入してから、必要に応じて SSH を有効にします。
その後、OS を最新の状態にアップデートします。

$ sudo systemctl start ssh
$ sudo systemctl enable ssh

$ sudo rpi-update
$ sudo apt update
$ sudo apt upgrade

$ reboot

Redmine 導入

今回はバックエンドに SQLite を利用するので redmine-sqlite を導入します。

$ sudo apt install redmine-sqlite

The following NEW packages will be installed:
  dbconfig-common dbconfig-sqlite3 fontconfig-config fonts-dejavu-core fonts-droid-fallback
  fonts-lato fonts-noto-mono ghostscript gsfonts imagemagick-6-common javascript-common
  libavahi-client3 libc-ares2 libcups2 libcupsfilters1 libcupsimage2 libfftw3-double3 libfontconfig1
  libgs9 libgs9-common libhttp-parser2.8 libijs-0.35 libjbig0 libjbig2dec0 libjs-coffeescript
  libjs-jquery libjs-source-map libjs-uglify liblcms2-2 liblqr-1-0 libltdl7 libmagickcore-6.q16-3
  libmagickwand-6.q16-3 libopenjp2-7 libpaper-utils libpaper1 libruby2.3 libtiff5 libuv1 libxslt1.1
  libyaml-0-2 nodejs nodejs-doc passenger poppler-data rake redmine redmine-sqlite ruby
  ruby-actionmailer ruby-actionpack ruby-actionpack-action-caching ruby-actionpack-xml-parser
  ruby-actionview ruby-activejob ruby-activemodel ruby-activerecord ruby-activesupport
  ruby-addressable ruby-arel ruby-atomic ruby-binding-of-caller ruby-blankslate ruby-builder
  ruby-bundler ruby-byebug ruby-coderay ruby-coffee-rails ruby-coffee-script
  ruby-coffee-script-source ruby-columnize ruby-concurrent ruby-css-parser ruby-debug-inspector
  ruby-did-you-mean ruby-erubis ruby-execjs ruby-ffi ruby-globalid ruby-hike ruby-hmac
  ruby-htmlentities ruby-i18n ruby-jbuilder ruby-jquery-rails ruby-json ruby-listen ruby-loofah
  ruby-mail ruby-mime-types ruby-mimemagic ruby-minitest ruby-molinillo ruby-multi-json
  ruby-net-http-persistent ruby-net-ldap ruby-net-telnet ruby-nokogiri ruby-oj ruby-openid
  ruby-pkg-config ruby-polyglot ruby-power-assert ruby-protected-attributes ruby-rack
  ruby-rack-openid ruby-rack-test ruby-rails ruby-rails-deprecated-sanitizer ruby-rails-dom-testing
  ruby-rails-html-sanitizer ruby-rails-observers ruby-railties ruby-rb-inotify ruby-rbpdf
  ruby-rbpdf-font ruby-redcarpet ruby-request-store ruby-rmagick ruby-roadie ruby-roadie-rails
  ruby-sass ruby-sass-rails ruby-sdoc ruby-spring ruby-sprockets ruby-sprockets-rails ruby-sqlite3
  ruby-test-unit ruby-thor ruby-thread-safe ruby-tilt ruby-treetop ruby-turbolinks ruby-tzinfo
  ruby-uglifier ruby-web-console ruby2.3 rubygems-integration sqlite3 zip
0 upgraded, 141 newly installed, 0 to remove and 0 not upgraded.

途中、DB 設定を促されるので Yes(はい)を選択します。

 ┌─────────────────────────────────────┤ Configuring redmine ├
│ The redmine/instances/default package must have a database installed and configured before it   │
│ can be used. This can be optionally handled with dbconfig-common.                               │
│                                                                                                 │
│ If you are an advanced database administrator and know that you want to perform this            │
│ configuration manually, or if your database has already been installed and configured, you      │
│ should refuse this option. Details on what needs to be done should most likely be provided in   │
│ /usr/share/doc/redmine/instances/default.                                                       │
│                                                                                                 │
│ Otherwise, you should probably choose this option.                                              │
│                                                                                                 │
│ Configure database for redmine/instances/default with dbconfig-common?                          │
│                                                                                                 │
│                            <Yes>                               <No>                             │
│                                                                                                 │
 └───────────────────────────────────────────────── ─

その他のパッケージをまとめて導入します。

$ sudo apt install apache2 libapache2-mod-passenger bundler libmagick++-dev

The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils autotools-dev bundler bzip2-doc fontconfig
  gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-glib-2.0 gir1.2-rsvg-2.0 gnome-icon-theme
  gtk-update-icon-cache hicolor-icon-theme icu-devtools libapache2-mod-passenger libapr1 libaprutil1
  libaprutil1-dbd-sqlite3 libaprutil1-ldap libatk1.0-0 libatk1.0-data libbz2-dev libcairo-gobject2
  libcairo-script-interpreter2 libcairo2 libcairo2-dev libcdt5 libcgraph6 libcroco3 libdatrie1
  libdjvulibre-dev libdjvulibre-text libdjvulibre21 libexif-dev libexif12 libexpat1-dev
  libfontconfig1-dev libgail-common libgail18 libgd3 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common
  libgdk-pixbuf2.0-dev libgirepository-1.0-1 libglib2.0-bin libglib2.0-dev libgmp-dev libgmpxx4ldbl
  libgraphite2-3 libgraphviz-dev libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libgts-0.7-5 libgts-bin
  libgvc6 libgvc6-plugins-gtk libgvpr2 libharfbuzz0b libice-dev libice6 libicu-dev libilmbase-dev
  libilmbase12 libjbig-dev libjpeg-dev libjpeg62-turbo-dev libjxr-tools libjxr0 liblcms2-dev
  liblqr-1-0-dev libltdl-dev liblua5.2-0 liblzma-dev liblzo2-2 libmagick++-6-headers
  libmagick++-6.q16-7 libmagick++-6.q16-dev libmagick++-dev libmagickcore-6-arch-config
  libmagickcore-6-headers libmagickcore-6.q16-3-extra libmagickcore-6.q16-dev
  libmagickwand-6-headers libmagickwand-6.q16-dev libopenexr-dev libopenexr22 libopenjp2-7-dev
  libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpathplan4 libpcre16-3 libpcre3-dev
  libpcre32-3 libpcrecpp0v5 libpixman-1-0 libpixman-1-dev libpthread-stubs0-dev librsvg2-2
  librsvg2-common librsvg2-dev libsm-dev libsm6 libthai-data libthai0 libtiff5-dev libtiffxx5
  libtool libwebp6 libwmf-dev libwmf0.2-7 libx11-dev libx11-doc libxau-dev libxcb-render0
  libxcb-render0-dev libxcb-shm0 libxcb-shm0-dev libxcb1-dev libxcomposite1 libxcursor1 libxdamage1
  libxdmcp-dev libxdot4 libxext-dev libxfixes3 libxi6 libxinerama1 libxml2-dev libxpm4 libxrandr2
  libxrender-dev libxrender1 libxt-dev libxt6 ruby-dev ruby2.3-dev ssl-cert x11-common
  x11proto-core-dev x11proto-input-dev x11proto-kb-dev x11proto-render-dev x11proto-xext-dev
  xorg-sgml-doctools xtrans-dev
0 upgraded, 149 newly installed, 0 to remove and 0 not upgraded.

設定

パッケージ導入後に設定を追記します。

以下、追記例です。

Apache

$ diff -u /etc/apache2/sites-available/000-default.conf_org /etc/apache2/sites-available/000-default.conf
--- /etc/apache2/sites-available/000-default.conf_org   2019-02-22 13:47:48.215741367 +0000
+++ /etc/apache2/sites-available/000-default.conf   2019-02-22 13:54:54.814818079 +0000
@@ -9,7 +9,12 @@
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
-   DocumentRoot /var/www/html
+   DocumentRoot /usr/share/redmine/public
+        PassengerHighPerformance on
+   <Directory /usr/share/redmine/public>
+       AllowOverride None
+       Options None
+   </Directory>

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.

Passenger

$ diff -u /etc/apache2/mods-available/passenger.conf_org /etc/apache2/mods-available/passenger.conf
--- /etc/apache2/mods-available/passenger.conf_org      2019-02-22 13:51:12.685800822 +0000
+++ /etc/apache2/mods-available/passenger.conf  2019-02-22 13:51:35.655772114 +0000
@@ -1,4 +1,6 @@
 <IfModule mod_passenger.c>
   PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
   PassengerDefaultRuby /usr/bin/ruby
+  PassengerDefaultUser www-data
+  RailsBaseURI /redmine
 </IfModule>

アクセス

今回、ポート番号を変更していない(80番)なので、サーバIPをブラウザに入力すれば Redmine へ接続できます。

id・パスワードは以下参照。

base on ログイン — Redmine.JP

Redmineをインストールした直後であればユーザー名、パスワードともに"admin"でログインできます。