1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

redmine3.4.6をcentos7+apache+mariadb+rbenv+unicornで起動した手順MEMO

Posted at

やりたかったこと

宗教上の理由から、以下の環境でredmineを動かしたかった

  • CentOS7 (インストールはここでは割愛)
  • Apache2 (インストールはここでは割愛)
  • MariaDB (インストールはここでは割愛)
  • rbenv-ruby2.5.1 (インストールはここでは割愛)
  • unicorn
    • relative_url https://~~/redmine
  • redmine 3.4.6

srcコードを取ってきて展開

redmine公式からリリースバージョンのコードを取ってきて、/opt/redmineとして展開する。
ついでに、必要なconfigファイルを二つ作成。

  • configuration.yml
    • とりあえずコピーしているが、smtp周りは必要に応じて適宜設定
  • database.yml
    • 今回は同一サーバ上のmariadbを使うので、ソケット指定。
    • 別のdbサーバを使うなら、適宜設定のこと。
bash
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
config/database.yml
# 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はローカルホストに絞っている。

bash
echo 'gem "unicorn"' >> /opt/redmine/Gemfile
config/unicorn.rb
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は環境変数に逃して、汎用的に使えるようにしている。

config.ru
# 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を作成して、インストール開始。

bash
bundle install --no-deployment --path="vendor/bundle"
RAILS_ENV=production bundle exec rake secret
config/secrets.yml
production:
    secret_key_base: sakki_no_secret_token
bash
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など使ってとりあえず一発アクセス試してみたいなら

bash
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ファイルはこんな感じ。

/etc/systemd/system/redmine.service
[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
bash
systemctl daemon-reload
systemctl start redmine

Apacheのconfigにプロキシ設定追加

httpd.conf
    # redmine
    ProxyPass /redmine http://localhost:8280/redmine/
    ProxyPassReverse /redmine http://localhost:8280/redmine/

あとはhttps://~~/redmineにアクセスしてみて、動くことを確認。
ちょこちょこ設定手抜きしているので、適宜config類は編集してほしい。

蛇足

そんなに特殊な環境ではないと思っていたが、

  • unicornを使う
  • relative_urlでアクセスする

あたりは意外と情報がなかったりしたの書き留めようと思い立ち、
まとめるのが面倒臭くなっている間にredmine4が出ようとしていたので放置していた。
が、未だ出そうにないので、MEMOのままではあるが、滑り込み投稿してみた。

人生、勢いって大事。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?