やりたかったこと
宗教上の理由から、以下の環境でredmineを動かしたかった
- CentOS7 (インストールはここでは割愛)
- Apache2 (インストールはここでは割愛)
- MariaDB (インストールはここでは割愛)
- rbenv-ruby2.5.1 (インストールはここでは割愛)
- unicorn
- relative_url
https://~~/redmine
- relative_url
- redmine 3.4.6
srcコードを取ってきて展開
redmine公式からリリースバージョンのコードを取ってきて、/opt/redmineとして展開する。
ついでに、必要なconfigファイルを二つ作成。
- configuration.yml
- とりあえずコピーしているが、smtp周りは必要に応じて適宜設定
- database.yml
- 今回は同一サーバ上のmariadbを使うので、ソケット指定。
- 別のdbサーバを使うなら、適宜設定のこと。
wget http://www.redmine.org/releases/redmine-3.4.6.tar.gz -O /usr/local/src/redmine-3.4.6.tar.gz
tar zxvf /usr/local/src/redmine-3.4.6.tar.gz -C /opt/
mv /opt/redmine-3.4.6 /opt/redmine
cp -p /opt/redmine/config/configuration.yml.example /opt/redmine/config/configuration.yml
echo '2.5.1' > /opt/redmine/.ruby-version
# Default setup is given for MySQL with ruby1.9.
# Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end.
# Line indentation must be 2 spaces (no tabs).
default: &default
adapter: mysql2
encoding: utf8
pool: 10
username: redmine
password: 'database_no_password'
socket: /var/lib/mysql/mysql.sock
production:
<<: *default
database: redmine
unicornで動かす準備
redmineはredmineで動かしたいので、unicornも合わせてインストールする。
別にpumaでも問題なく、そちらの方が(公式含め)マニュアル等情報が多いのだが、そこは宗教上の理由からunicornを選択。
unicorn.rbは、何と言うか、適当。とりあえずアクセスはApache proxyを通して行うので、Listenはローカルホストに絞っている。
echo 'gem "unicorn"' >> /opt/redmine/Gemfile
rails_root = File.expand_path('../../', __FILE__)
ENV['BUNDLE_GEMFILE'] = rails_root + '/Gemfile'
worker_processes 1
working_directory rails_root
timeout 30
stderr_path File.expand_path('../../log/unicorn_stderr.log', __FILE__)
stdout_path File.expand_path('../../log/unicorn_stdout.log', __FILE__)
pid File.expand_path('../../tmp/pids/unicorn.pid', __FILE__)
listen "127.0.0.1:8280"
preload_app true
before_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
end
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end"
relative_url(/redmine)で動かす準備
https://~~/redmine
でアクセスがきた場合にredmineに動かしたい。
方法は何種類かあるが、一番手早い上、今回は別段他のアクセス方法を準備する必要はなかったので、relative_urlを使って対応。
とは言いつつ、一応URLは環境変数に逃して、汎用的に使えるようにしている。
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
if ENV['RAILS_RELATIVE_URL_ROOT'] then
map ENV['RAILS_RELATIVE_URL_ROOT'] do
run RedmineApp::Application
end
else
run RedmineApp::Application
end
いざ、インストール
secret.ymlを作成して、インストール開始。
bundle install --no-deployment --path="vendor/bundle"
RAILS_ENV=production bundle exec rake secret
production:
secret_key_base: sakki_no_secret_token
RAILS_ENV=production bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
proxyなど使ってとりあえず一発アクセス試してみたいなら
RAILS_ENV=production RAILS_RELATIVE_URL_ROOT=/redmine bundle exec unicorn_rails -c config/unicorn.rb -E production --path /redmine
で起動する。
systemdへの登録などはさておき、とりあえず起動したいだけば、-D
オプションをつけてデーモン起動してやると楽かもしれない。
systemd経由でredmine(unicorn)を起動する
systemdファイルはこんな感じ。
[Unit]
Description=Redmine Unicorn Server
After=mariadb.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/redmine/
Environment=RAILS_ENV=production
Environment=RAILS_RELATIVE_URL_ROOT=/redmine
SyslogIdentifier=redmine-unicorn
PIDFile=/opt/redmine/tmp/pids/unicorn.pid
ExecStart=/opt/rbenv/shims/bundle exec "unicorn_rails -c config/unicorn.rb -E production --path /redmine"
ExecStop=/usr/bin/kill -QUIT $MAINPID
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start redmine
Apacheのconfigにプロキシ設定追加
# redmine
ProxyPass /redmine http://localhost:8280/redmine/
ProxyPassReverse /redmine http://localhost:8280/redmine/
あとはhttps://~~/redmine
にアクセスしてみて、動くことを確認。
ちょこちょこ設定手抜きしているので、適宜config類は編集してほしい。
蛇足
そんなに特殊な環境ではないと思っていたが、
- unicornを使う
- relative_urlでアクセスする
あたりは意外と情報がなかったりしたの書き留めようと思い立ち、
まとめるのが面倒臭くなっている間にredmine4が出ようとしていたので放置していた。
が、未だ出そうにないので、MEMOのままではあるが、滑り込み投稿してみた。
人生、勢いって大事。