Redmine 4.0 を 爆速Nginx先輩で動かす
どもども、みなさんお疲れ様です。
ピン村でございます。
ここ最近一段と寒くなりましたが、体調とか壊していませんか?
私は、"バカは風邪をひかない" を体現するが如くまったく風邪気味になりません....
おかげで、プロジェクト演習で組んでいたプロジェクトメンバーと喧嘩し少々不仲になりましたが、致し方がありませんでしたね(だって、バカは風邪ひかないし頭悪いししょうがない)
ということで、じゃんじゃか記事書いて行くわけですが、弊学のプロジェクト演習及びゼミナールABと呼ばれる授業ではRedmine というプロジェクト管理パッケージが使われるのは情報システム学科の生徒なら存じ上げていると思います。
しかし、学校側で組み上げられたRedmineだとUIもダサいし、プラグイン入れられねぇし、Gitとかでソースコード管理も出来ねぇしということでいろいろ不満があるわけです。
そんな悩みをズバッと解決すべく、私非常に面倒ではありましたがNginx + Redmineのコラボを実現し爆速かつ柔軟性にとんだトータルパッケージを組みました。
ぜひ、皆さんにも使ってもらいたく構築方法を記述しようと思った次第です。
ぜひぜひ、ご利用ください!!
では行きますよぉ~
Contents
CentOS7.6 インストール時の注意点
ということですが、つまりRedmineを導入するうえでRubyなるものを使用します。
その際、Rubyの導入時にgem install や bundle exec などのコマンドを使用するのですがIPv6だとリクエストを弾かれてしまう事象があります。
よって、CentOS7.6インストール時にIPv6を無効化しIPv4でのみ通信させるようにする必要があります。
これが、最大の注意点です。気を付けるようにしましょう。
あとは、いつも通りCentOS7.6をインストールすればOKです。
rootログイン後の諸々設定
再起動し、rootでログインした後は SELinux を disabled , firewalld を disable に設定します。
これらを設定した後、次はMariadbとnginx のリポジトリ登録を行います。
b6p31079@localhost ~# sudo vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
b6p31079@localhost ~# sudo vi /etc/yum.repos.d/nginx.repo
# MariaDB 10.3 CentOS repository list - created 2018-12-28 04:45 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Rubyをビルドさせるための開発ツールを導入します。
b6p31079@localhost ~# sudo yum -y groupinstall "Development Tools" && sudo yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel mariadb-devel ImageMagick ImageMagick-devel MariaDB-server MariaDB-client nginx MariaDB-shared
上記のyum installでは、開発者ツールとnginx , mariadbのインストールまで全部コミコミでやってしまっていますのでめっちゃ長くなっています。
また、インストールまでにお茶飲めるぐらい時間かかるのでyum打つ前にコーヒーかお茶の準備をしましょう。
yum終了後、自動起動設定をオンにする。
root@localhost ~# systemctl enbale mariadb nginx
次に、Ruby をインストールします。
rbenvを使って、Rubyのバージョン指定をし、インストールします。
b6p31079@localhost ~# git clone https://github.com/rbenv/rbenv.git ~/.rbenv
b6p31079@localhost ~# cd ~/.rbenv
b6p31079@localhost ~# src/configure && make -C src
b6p31079@localhost ~# sudo vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH="$PATH:$HOME/bin"
PATH="$PATH:$HOME/.rbenv/bin" ← この行を追記
export PATH
b6p31079@localhost ~# ~/.rbenv/bin/rbenv init
b6p31079@localhost ~# sudo vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH="$PATH:$HOME/bin"
PATH="$PATH:$HOME/.rbenv/bin"
export PATH
eval "$(rbenv init -)" ← この行を追記
ここまでの作業で変更点 SELinux , firewalld , bash_profileなどを反映させるためいったん再起動をかけます。
再起動後、下記コマンドを入力して内容が表示されるか確認してください。
b6p31079@localhost ~# type rbenv
rbenv ()
{
local command;
command="${1:-}";
if [ "$#" -gt 0 ]; then
shift;
fi;
case "$command" in
rehash | shell)
eval "$(rbenv "sh-$command" "$@")"
;;
*)
command rbenv "$command" "$@"
;;
esac
}
次に、Ruby on Railsをインストールするためgithubからruby-buildを引っ張ってきます。
また、Ruby 2.6をインストールするときも約10分ほど時間かかるのでお茶でも飲んでじっくり待ちましょう...
b6p31079@localhost ~# git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
b6p31079@localhost ~# rbenv install -l ← 実行後、2.6.0 とかいてあるものをインストールする。(2.6.0-rc1などは別)
b6p31079@localhost ~# rbenv install 2.6.0
b6p31079@localhost ~# rbenv global 2.6.0
b6p31079@localhost ~# ruby -v
次にRuby on Railsのインストールに移ります。
Railsは gemでインストール可能なのでgemで入れちゃいます。
root@localhost ~# gem list '^rails$' -ra
実行結果
*** REMOTE GEMS ***
rails (5.2.2, 5.2.1.1, 5.2.1, 5.2.0, 5.1.6.1, 5.1.6, 5.1.5, 5.1.4, 5.1.3, 5.1.2, 5.1.1, 5.1.0, 5.0.7.1, 5.0.7, 5.0.6, 5.0.5, 5.0.4, 5.0.3, 5.0.2, 5.0.1, 5.0.0.1, 5.0.0, 4.2.11, 4.2.10, 4.2.9, 4.2.8, 4.2.7.1, 4.2.7, 4.2.6, 4.2.5.2, 4.2.5.1, 4.2.5, 4.2.4, 4.2.3, 4.2.2, 4.2.1, 4.2.0, 4.1.16, 4.1.15, 4.1.14.2, 4.1.14.1, 4.1.14, 4.1.13, 4.1.12, 4.1.11, 4.1.10, 4.1.9, 4.1.8, 4.1.7.1, 4.1.7, 4.1.6, 4.1.5, 4.1.4, 4.1.3, 4.1.2, 4.1.1, 4.1.0, 4.0.13, 4.0.12, 4.0.11.1, 4.0.11, 4.0.10, 4.0.9, 4.0.8, 4.0.7, 4.0.6, 4.0.5, 4.0.4, 4.0.3, 4.0.2, 4.0.1, 4.0.0, 3.2.22.5, 3.2.22.4, 3.2.22.3, 3.2.22.2, 3.2.22.1, 3.2.22, 3.2.21, 3.2.20, 3.2.19, 3.2.18, 3.2.17, 3.2.16, 3.2.15, 3.2.14, 3.2.13, 3.2.12, 3.2.11, 3.2.10, 3.2.9, 3.2.8, 3.2.7, 3.2.6, 3.2.5, 3.2.4, 3.2.3, 3.2.2, 3.2.1, 3.2.0, 3.1.12, 3.1.11, 3.1.10, 3.1.9, 3.1.8, 3.1.7, 3.1.6, 3.1.5, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.20, 3.0.19, 3.0.18, 3.0.17, 3.0.16, 3.0.15, 3.0.14, 3.0.13, 3.0.12, 3.0.11, 3.0.10, 3.0.9, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.3.18, 2.3.17, 2.3.16, 2.3.15, 2.3.14, 2.3.12, 2.3.11, 2.3.10, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.2.3, 2.2.2, 2.1.2, 2.1.1, 2.1.0, 2.0.5, 2.0.4, 2.0.2, 2.0.1, 2.0.0, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.14.4, 0.14.3, 0.14.2, 0.14.1, 0.13.1, 0.13.0, 0.12.1, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.5, 0.9.4.1, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.5, 0.8.0)
大量の文字列がドバァーッと出てきますので、Railsバージョンが最新の5.2.2を選択します。
root@localhost ~# gem install rails --version "~>5.2.2"
とりあえず、上手くいくとこんな感じ
一番最後の行 ↓
Done installing documentation for concurrent-ruby, i18n, thread_safe, tzinfo, activesupport, rack, rack-test, mini_portile2, nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, builder, erubi, actionview, actionpack, activemodel, arel, activerecord, globalid, activejob, mini_mime, mail, actionmailer, nio4r, websocket-extensions, websocket-driver, actioncable, mimemagic, marcel, activestorage, thor, method_source, railties, sprockets, sprockets-rails, rails after 52 seconds
38 gems installed
いよいよ、Redmine 4.0用のデータベースを作ります。
root@localhost~# mysql -u root
MariaDB [(none)]>CREATE DATABASE redmine CHARACTER SET utf8;
MariaDB [(none)]>CREATE USER 'redmine'@'localhost';
MariaDB [(none)]>GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
Ctrl + C キー打ち込むとSQLコマンドから出られる。
Redmine 4.0導入
Redmine 4.0のコアファイルを入れるとき、rootだと何かやばそう(語彙力の欠如)なのでredmine ユーザを作りその中にRedmine4.0のコアファイルを置きたいと思いいます。
root@localhost ~# useradd redmine
root@localhost ~# su - redmine
redmine@localhost ~# mkdir ~/src
redmine@localhost ~# cd ~/src
redmine@localhost ~# curl -LO http://www.redmine.org/releases/redmine-4.0.0.tar.gz
redmine@localhost ~# tar xzvf redmine-4.0.0.tar.gz
redmine@localhost ~# exit
rubyをrootのほうにインストールしているので実はrootと一般ユーザをまたぐファイルのコピーはsudo or suが必要なんですよね...
なので、passwd redmineでパスワードを変更します。
root@localhost ~# vi /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
redmine ALL=(ALL) ALL ←追記事項
root@localhost ~# passwd redmine
ユーザー redmine のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは 8 未満の文字列です。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
次に、Redmineのディレクトリを移動させます。
redmine@localhost ~# sudo cp -r /home/redmine/src/redmine-4.0.0 /var/lib/redmine
redmine@localhost ~# sudo chown -R redmine:redmine /var/lib/redmine
redmine@localhost ~# sudo chmod -R 777 /var/lib/redmine
redmine@localhost ~# sudo cp /var/lib/redmine/config/database.yml.example /var/lib/redmine/config/database.yml
redmine@localhost ~# sudo vi /var/lib/redmine/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).
production:
adapter: mysql2
database: redmine
host: localhost
username: root ←redmineへ変更
password: ""
encoding: utf8
Redmine の WebUIでアップロードされたファイルの保存先ディレクトリを作成します。
root@localhost ~# mkdir -p /var/redmine/files
root@localhost ~# chown redmine:redmine /var/redmine/files
root@localhost ~# su - redmine
次に、Redmineが使用するgem をインストールします。
root@localhost ~# cd /var/lib/redmine
root@localhost ~# bundle install --without development test rmagick
root@localhost ~# bundle exec rake generate_secret_token
Redmineで使用するデータベースを更新します。
root@localhost ~# cd /var/lib/redmine
root@localhost ~# bundle exec rake db:migrate RAILS_ENV=production
いよいよ大詰めに差し掛かりました。!!
あともうちょっとです頑張って!
Unicornのインストール
[b6p31079@localhost redmine]$ cat << EOF > Gemfile.local
> gem "unicorn"
> EOF
[b6p31079@localhost redmine]$
bundleでruby系統の依存パッケージをインストールします。
root@localhost ~# bundle install --without development test
アプリケーションサーバの動作確認を行います。 (Unicorn)
root@localhost ~# bundle exec unicorn_rails -l 3000 -E production
こんな感じです↓
[b6p31079@localhost redmine]$ bundle exec unicorn_rails -l 3000 -E production
I, [2018-12-29T22:03:56.709342 #31205] INFO -- : listening on addr=0.0.0.0:3000 fd=7
I, [2018-12-29T22:03:56.709498 #31205] INFO -- : worker=0 spawning...
I, [2018-12-29T22:03:56.710308 #31205] INFO -- : master process ready
I, [2018-12-29T22:03:56.710802 #31218] INFO -- : worker=0 spawned pid=31218
I, [2018-12-29T22:03:56.711059 #31218] INFO -- : Refreshing Gem list
I, [2018-12-29T22:03:59.211901 #31218] INFO -- : worker=0 ready
エラー出てなければ基本大丈夫です。
先ほど、実行したUnicornをもっと簡単に呼び出すため、デーモンプロセス化することで、systemctl で呼び出せるようにします。
root@localhst ~# vi /var/lib/redmine/config/unicorn.rb
worker_processes 2
app_path = "/var/lib/redmine"
listen 3000
#listen File.expand_path('tmp/unicorn.sock', app_path)
pid File.expand_path('tmp/unicorn.pid', app_path)
stderr_path File.expand_path('log/unicorn.stderr.log', app_path)
stdout_path File.expand_path('log/unicorn.stdout.log', app_path)
preload_app true
timeout 30
if GC.respond_to?(:copy_on_write_friendly=)
GC.copy_on_write_friendly = true
end
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
SECRET_KEY_BASE の値なるものを取得します。 次のコマンドで取得可能です。
[b6p31079@localhost redmine]$ bundle exec rake secret
45shiko45shiko19iku19iku810yazyu ←こんな感じ
systemctlコマンドで指定するサービス名でファイルを作成します。
サービス起動順序の依存関係として、MariaDBが起動してからアプリケーションサーバーを起動するよう指定します。
[b6p31079@localhost redmine]$ sudo vi /etc/systemd/system/unicorn-redmine.service
[Unit]
Description=redmine
Wants=mariadb.service
After=mariadb.service
[Service]
User=b6p31079(学籍番号入れてください)
WorkingDirectory=/var/lib/redmine
Environment=RAILS_ENV=production
Environment=RAILS_SERVE_STATIC_FILES=1
Environment=SECRET_KEY_BASE=e9594cfcda81a28cccbbc725a9003afc1724110a217f593ef54a581c4a4d9cdbfc1bbc18768489bdabec3641381830557c51e232e9ad9dcf982ee96bb89ad90b
SyslogIdentifier=unicorn-redmine
PIDFile=/var/lib/redmine/tmp/unicorn.pid
ExecStart=/home/b6p31079/.rbenv/shims/bundle exec "unicorn_rails -D -c /var/lib/redmine/config/unicorn.rb -E production"
[Install]
WantedBy=multi-user.target
起動が確認できたら、nginx の設定ファイルをいじくります。
[b6p31079@localhost redmine]$ sudo vi /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name redmine.example.com;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /var/lib/redmine/public;
index index.html index.htm;
if (-f $request_filename) {
break;
}
proxy_pass http://127.0.0.1:3000;
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;
}
}
上記そのままコピーしてください。
念のため、コピーし終わったら文法チェックを行ってください。
[b6p31079@localhost redmine]$ sudo nginx -t
では、最後におまじない的に下記コマンドを打ちます。
[b6p31079@localhost redmine]$ sudo systemctl enable nginx mariadb unicorn-redmine
[b6p31079@localhost redmine]$ sudo reboot
動作確認
ローカルネットワーク内で動作するドメインを付けておりますのでサーバ側、Windows or Mac OS側でそれぞれ設定をします。
[b6p31079@localhost redmine]$ sudo vi /etc/hosts
192.168.1.47(今回のサーバIP) redmine.example.com ←追記
Windows側
Windowsキー + R で %SystemRoot%\System32\drivers\etc\hostsのファイルを参照
管理者権限が必要になります。
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 view-localhost # view localhost server
192.168.1.47 redmine.example.com ←追記
以上でサーバを再起動させ、http://redmine.example.comでアクセスすると下図のような画面が表示されます。
右上のログインを押下し、ユーザ名 : admin パスワード : adminで入ってください。
そのあと、パスワードの変更を求められますので指示に従って新しいパスワードを打てば完了です。
以上で完了です。
大変お疲れ様でした。!!
弊学のプロジェクト演習ですが、インフラ関係であれば出来る限りお手伝いできればと思います。
プログラミング系は申し訳ないですが、皆さんの方が詳しいですので....(マジで...)
ではでは、年の瀬ギリギリの投稿でしたがよいお年をお迎えください。
では、私はC95に行って参りますので....
もしかすると、https://yukiafronia.comでコミケの情報は出すかもしれませんので....
では、よいお年を~