2021/02/20作成, 2020/02/19更新

redmine + nginx

SSL周りでnginxを使いたかったのでその時のメモ。FreeBSDでredmineを使う場合はパッケージからインストールできる。パッケージからインストールする場合は依存関係の都合上mariadbではなくmysqlを使うことになるので注意。

# redmineのバージョンも確認
% pkg search redmine
redmine-3.4.11_2               Flexible project management web application
redmine4-4.0.5_4               Flexible project management web application
# mysqlはいくつかのバージョンを選択できるので利用可能なバージョンを調べる
% pkg search mysql | grep -e "mysql[0-9]*-server"
mysql55-server-5.5.62_3        Multithreaded SQL database (server)
mysql56-server-5.6.47          Multithreaded SQL database (server)
mysql57-server-5.7.29          Multithreaded SQL database (server)
mysql80-server-8.0.19          Multithreaded SQL database (server)
# とりあえずredmine4とmysql57-serverにしてみる
% pkg install redmine4 mysql mysql57-server

mysqlの設定

はmysqlを起動する

serviceコマンドを使って起動。初回はDBの初期化が入るので多少時間がかかる。

% service mysql enable
% service mysql start
# いろいろと聞かれるがとりあえず全部デフォルトのままでOK
# mysqlのルートパスワードを確認しておく
% cat ~/.mysql_secret

DBを初期化する

DB_REDMINE、USER_REDMINEとなっているところはredmineで使用するデータベースの名前を入れる。mysqlをredmine専用にするらなら redmine とかでOK。

# mysql_secretに書かれているパスワードでログインできる
% 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;

redmineの設定

デフォルトでは /usr/local/www/redmine に一式がインストールされているのでカレントディレクトをこのディレクトリに移動して作業する。

% cd /usr/local/www/redmine
% ee config/database.yml

データベースの設定

先ほど作成したデータベース名と、ユーザー名&パスワードを記載する。

/usr/local/www/redmine/config/database.yml

production:
  adapter: mysql2
  database: DB_REDMINE
  host: localhost
  username: USER_REDMINE
  password: "パスワード"
  encoding: utf8

redmineの初期化

# 必要なソフトウェアのインストール
% bundle install --without development test --path vendor/bundle
# 秘密鍵を作成
% bundle exec rake generate_secret_token
# データベースを初期化する
% setenv RAILS_ENV production
% bundle exec rake db:migrate
% bundle exec rake redmine:load_default_data
# デフォルトの言語を聞かれるのjaやenなど設定したい言語を入力する

デーモン化せずに直接起動してみる

bundle コマンドで thin(というソフトウェア) を起動すればよい。起動したらブラウザでアクセスしてみる。確認出来たら Ctrl+Cで終了。

% bundle exec thin start -e production

redmineをサービスとして起動する

serviceとして起動し、ブラウザからアクセスできるか確認する。

% service redmine onestart
# redmineが問題なく動いているようなら自動起動するようにしておく
% service redmine enable

nginxからリバースプロキシでアクセスする

% pkg install nginx

一般的なリバースプロキシの設定でよい。redmineにプロキシ経由で動かしていることを伝えるために proxy_set_header で X-Real-IP, X-Forwarded-For, Host を設定する必要がある。

etc/nginx/nginx.conf

server { 
    listen       80; 
    server_name  localhost; 
 
    proxy_connect_timeout  60;
    proxy_read_timeout  60;
    proxy_send_timeout  60;
 
    location / {
        root  /var/lib/redmine/public;
        index  index.html index.htm;
 
        if (-f $request_filename) {
          break;
        }
 
        proxy_pass  http://redmineのアドレス:redmineのポート;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
    }
}

redmine をサブディレクリで動かす

nginxを使ってredmineをサブディレクトリ化します。ここでは試しに redminesubdir というサブディレクトリ(サブURI)の下で動かしてみる。

server { 
    listen       80; 
    server_name  localhost; 
 
    proxy_connect_timeout  60;
    proxy_read_timeout  60;
    proxy_send_timeout  60;
 
    location /redminesubdir {
        root  /var/lib/redmine/public;
        index  index.html index.htm;
 
        if (-f $request_filename) {
          break;
        }
 
        proxy_pass  http://redmineのアドレス:redmineのポート;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
    }
}

thinに --prefix オプションを渡す。

/etc/rc.conf

redmine_flags="-a 0.0.0.0 -p 30001 -e production --prefix /redminesubdir"

また、これだけだとスタイルシートなどのパスが変わらないので、$REDMINE/config/environment.rbに相対パスのルートを設定する。

$REDMINE/config/environment.rb

# おそらくRails.application.initialize! という行が一番最後にあるはずなのでその下に追記 
Redmine::Utils::relative_url_root = "/redminesubdir"

トラブルシュート

サービスとして起動するとログが見えなかったりするので、bundleコマンドで直接実行して起動時のログを見る。

% bundle exec thin start -e production

Could not find XXXXX-V.V.V inany of the sources

以下のようなメッセージが出た場合、対応するバンドルをインストールする。

Could not find addressable-2.6.0 in any of the sources
Run `bundle install` to install missing gems.
# bundle install を行えばよい
% bundle install

bundle install でエラー

バージョンが違う的なエラーが出た場合、bundle update を行う。

% bundle install
Fetching addressable 2.6.0
Downloading addressable-2.6.0 revealed dependencies not in the API or the lockfile (public_suffix (>= 2.0.2, < 4.0)).
Either installing with `--full-index` or running `bundle update addressable` should fix the problem.
# bundle update で対象となるgemを更新する
% bundle update addressable

プラグイン

個別にテーマを変更できるようにする

% cd $REDMINE
% git clone --depth 1 \
  https://github.com/haru/redmine_theme_changer \
  ./plugins/redmine_theme_changer
% bundle exec rake redmine:plugins:migrate RAILS_ENV=production
INTEL 小型ベアボーン BOXNUC8I5BEH
共有だけじゃなくていろいろとサーバーに仕事をさせたいならまずは場所を取らない小型PCを使ってみるのをお勧め。
Amazon.comのページを別ウィンドウで開きます
Synology DiskStation DS918+
ホットスワップ4ベイのNAS。RAIDも使えるし運用も簡単なのでおすすめ。
Amazon.comのページを別ウィンドウで開きます