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
serviceコマンドを使って起動。初回はDBの初期化が入るので多少時間がかかる。
% service mysql enable
% service mysql start
# いろいろと聞かれるがとりあえず全部デフォルトのままでOK
# mysqlのルートパスワードを確認しておく
% cat ~/.mysql_secret
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;
デフォルトでは /usr/local/www/redmine に一式がインストールされているのでカレントディレクトをこのディレクトリに移動して作業する。
% cd /usr/local/www/redmine
% ee config/database.yml
先ほど作成したデータベース名と、ユーザー名&パスワードを記載する。
production:
adapter: mysql2
database: DB_REDMINE
host: localhost
username: USER_REDMINE
password: "パスワード"
encoding: utf8
# 必要なソフトウェアのインストール
% 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
serviceとして起動し、ブラウザからアクセスできるか確認する。
% service redmine onestart
# redmineが問題なく動いているようなら自動起動するようにしておく
% service redmine enable
% pkg install nginx
一般的なリバースプロキシの設定でよい。redmineにプロキシ経由で動かしていることを伝えるために proxy_set_header で X-Real-IP, X-Forwarded-For, Host を設定する必要がある。
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;
}
}
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 オプションを渡す。
redmine_flags="-a 0.0.0.0 -p 30001 -e production --prefix /redminesubdir"
また、これだけだとスタイルシートなどのパスが変わらないので、$REDMINE/config/environment.rbに相対パスのルートを設定する。
# おそらくRails.application.initialize! という行が一番最後にあるはずなのでその下に追記
Redmine::Utils::relative_url_root = "/redminesubdir"
サービスとして起動するとログが見えなかったりするので、bundleコマンドで直接実行して起動時のログを見る。
% bundle exec thin start -e production
以下のようなメッセージが出た場合、対応するバンドルをインストールする。
Could not find addressable-2.6.0 in any of the sources
Run `bundle install` to install missing gems.
# 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