変更履歴
- 2016/06/08 Redmineの動作確認項目コマンドでは正常にWEBrickが起動しないため、コマンドを修正
- 2016/06/15 SendGridでのメール送信設定の追加
- 2016/06/18 ssl設定の追加
自宅で遊ぶために立てたRedmineのインストール周りの備忘録
https化は後でする予定・・・
前提条件
- CentOS7
- nginx
- unicorn
- ruby 2.2.5
- Redmine 3.2
- postgresql9.2
- ssh接続設定済み
- sendgridのアカウント取得済み(gmailを利用する場合は無視)
- SELinux停止済み
- Firewalld設定済み
- メール配送はgmailから行う。 ※あとからsendgridへ移行
参考にしたWebページ
- http://blog.redmine.jp/articles/3_2/install/centos/
- http://www.torutk.com/projects/swe/wiki/Redmine%E3%82%92CentOS_7%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%83%BCUnicorn%E3%81%A8Nginx%E7%B7%A8
- http://www.torutk.com/projects/swe/wiki/Redmine%E3%82%92CentOS_6%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%83%BCUnicorn%E3%81%A8Nginx%E7%B7%A8#Unicorn%E3%81%AE%E8%A8%AD%E5%AE%9A
前準備
Redmineに必要なパッケージのインストール
開発ツール(Cコンパイラ等)のインストール
yum -y groupinstall "Development Tools"
RubyとPassengerのビルドに必要なヘッダファイルなどのインストール
yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
PostgreSQLとヘッダファイルのインストール
yum -y install postgresql-server postgresql-devel
ImageMagickとヘッダファイル・日本語フォントのインストール
yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
Nginxのインストール
Nginxインストール用のリポジトリ追加
yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
リポジトリのupdate
yum -y update nginx-release-centos
nginxのインストール
yum -y --enablerepo=nginx install nginx
Rubyのインストール
Ruby本体
ダウンロード
curl -O https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.5.tar.gz
ダウンロードファイルの解凍
tar xvf ruby-2.2.5.tar.gz
解凍ディレクトリへ移動
cd ruby-2.2.5
make準備
./configure --disable-install-doc
コンパイル
make
インストール
make install
bundlerインストール
gem install bundler --no-rdoc --no-ri
rubyバージョン確認
ruby -v
PostgreSQLの初期設定
データベースクラスタの新規作成
postgresql-setup initdb
RedmineからPostgreSQLに接続するための設定を追加
※ 設定は参考webページ1に記載されている通り
※ 適宜読み替えて設定を行うこと。
vi /var/lib/pgsql/data/pg_hba.conf
ファイルの最終行に書きを追加
# TYPE DATABASE USER ADDRESS METHOD
host redmine redmine 127.0.0.1/32 md5
host redmine redmine ::1/128 md5
postgresqlの実行
systemctl start postgresql
postgresqlの自動実行設定
systemctl enable postgresql
Redmine用のユーザ作成
sudo -u postgres createuser -P redmine
Redmine用のデータベース作成
sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
Redmineのインストール
本体のインストール
ダウンロード
※インストールフォルダは適宜読み替えること。
svn co http://svn.redmine.org/redmine/branches/3.2-stable /var/lib/redmine
configの編集
データベースへの接続設定
※ database.yml.exampleをコピーし下記ファイルを作成
※ 必要ない部分はコメントアウトか削除しています。
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "********"
encoding: utf8
email設定
Gmailの場合
※ configuration.yml.exampleをコピーし下記ファイルを作成
email_delivery:
delivery_method: :smtp
smtp_settings:
enable_starttls_auto: true
address: "smtp.gmail.com"
port: 587
domain: "smtp.gmail.com"
authentication: :plain
user_name: "自分のgmailアドレス"
password: "上記アドレスのパスワード"
!!注意!!
2016/05/21現在、上記設定でGmailへメール連携設定を行っても「ログイン試行をブロックしました」というメールが該当アドレスへ送信され、メールが送れません。
下記設定をGmailで行うことで回避できますが、セキュリティ的に心配な場合は別の方法をとってください。
Gmailのメール配送ブロック解除方法
※2016/05/21時点の情報の為、古い情報の場合は適宜読み替え必須
- Gmailへログインする
- 右記URLへアクセス
https://accounts.google.com/DisplayUnlockCaptcha - 「Google アカウントへのアクセスを許可」画面で次へをクリック
- 右記URLへアクセス
https://myaccount.google.com/security - 一番下までスクロールし、「安全性の低いアプリの許可」を有効にする
※上記手法が嫌な場合、別の方法を利用してください。
SendGridの場合
※SendGridのSMTPを利用した送信方法です。
※アカウントはすでに取得済みとして進めます。
※ configuration.yml.exampleをコピーし下記ファイルを作成
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.sendgrid.net"
port: 587
authentication: login
domain: "Your Redmine Domain"
user_name: "Sendgrid User ID"
password: "Sendgrid User Password"
※ domain:
の部分は何が正解かちょっとわかっていません。
私の場合は上記設定で動いてます程度の理解です・・・
日本語フォントの設定
rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
インストールフォルダへ移動
cd /var/lib/redmine
gemパッケージのインストール
bundle install --without development test --path vendor/bundle
初期データの登録と設定
セッション改ざん防止用秘密鍵の作成
bundle exec rake generate_secret_token
データベースのテーブル作成
RAILS_ENV=production bundle exec rake db:migrate
defaultデータの登録
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
動作確認
WEBrickを実行し動作確認
WEBrick動作確認のためファイアウォールでポート3000を一時的に許可しておきます。
ruby bin/rails server webrick -e production
下記URLへアクセスし、動作していることを確認
http://ホストのIPアドレス:3000
WEBrickは「ctrl + C」で停止できます。
Unicornのインストール
※ 参考WEBページ 2 が大変勉強になりました。
インストール用の設定
redmineのインストールディレクトリへファイルを追加
gem "unicorn"
インストール
インストールディレクトリで下記を実行
※今回は/var/lib/redmine
bundle update
動作確認
※ WEBrickの動作確認で利用したポート3000を一時的に利用
bundle exec unicorn_rails -l 3000 -E production
Redmine用Unicorn設定
設定ファイルの作成
※こちらも参考Webページ2をほぼ流用です・・・
# -*- coding: utf-8 -*-
# Unicorn設定ファイル
# 次のURLのサンプルをベースにしている。
# http://unicorn.bogomips.org/examples/unicorn.conf.rb
# 専用サーバーであればコアにつき1個以上を指定する。
worker_processes 2
# リクエスト待ち受け口、TCPとUNIXドメインとが指定可能。
listen "/var/lib/redmine/tmp/sockets/redmine.sock", :backlog => 32
# listen 8282, :tcp_nopush => true
# タイムアウト秒数
timeout 30
# 稼働中のプロセスのPIDを書いておくファイル。
pid "/var/lib/redmine/tmp/pids/redmine.pid"
# デーモンで起動すると標準出力/標準エラー出力が/dev/nullになるので、
# それぞれログファイルに出力する。
# /var/logで一元管理する場合はフルパスで記載、その場合は/var/log配下にunicornディレクトリを作っておく。
# stderr_path '/var/log/unicorn/unicorn.stderr.log'
# stdout_path '/var/log/unicorn/unicorn.stdout.log'
stderr_path 'log/unicorn.stderr.log'
stdout_path 'log/unicorn.stdout.log'
# マスタープロセス起動時にアプリケーションをロードする(true時)。
# ワーカープロセス側でロードをしないのでメモリ消費、応答性良好になる。
# ただし、ソケットはfork後に開きなおす必要あり。
# HUPシグナルでアプリケーションはロードされない。
preload_app true
# unicornと同一ホスト上のクライアントとのコネクション限定で、維持されているかを
# アプリケーションを呼ぶ前にチェックする。
check_client_connection false
before_fork do |server, worker|
# Railsでpreload_appをtrueにしているときは強く推奨
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
# Railsでpreload_appをtrueにしているときは必須
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
begin
uid, gid = Process.euid, Process.egid
# user, group = "redmine", "redmine"
# ENV["HOME"] = "/home/redmine"
target_uid = Etc.getpwnam(user).uid
target_gid = Etc.getgrnam(group).gid
worker.tmp.chown(target_uid, target_gid)
if uid != target_uid or gid != target.gid
Process.initgroups(user, target_gid)
Process::GID.change_privilege(target_gid)
Process::UID.change_privilege(target_uid)
end
rescue
if RAILS_ENV = "development"
STDERR.puts "could not change user, oh well"
else
STDERR.puts "could not change user, oh well"
raise e
end
end
end
※ 参考WEBページ 3 からかなり流用させていただきました。
※ ディレクトリ周り以外はほぼ流用です・・・
unicornのサービス化
下記ディレクトリにserviceファイルを作成
/usr/lib/systemd/system/redmine.service
[Unit]
Description=Redmine Unicorn Server
[Service]
WorkingDirectory=/var/lib/redmine
Environment=RAILS_ENV=production
SyslogIdentifier=redmine
PIDFile=/var/lib/redmine/tmp/pids/unicorn.pid
ExecStart=/usr/local/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"
ExecStop=/usr/bin/kill -QUIT $MAINPID
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
サービス起動確認
systemctl start redmine
サービスが正常に動いているかを確認
systemctl status redmine
こんな感じになっていればOK
● redmine.service - Redmine Unicorn Server
Loaded: loaded (/usr/lib/systemd/system/redmine.service; disabled; vendor preset: disabled)
Active: active (running) since 金 2016-05-27 02:34:07 JST; 3 days ago
Main PID: 11375 (ruby)
CGroup: /system.slice/redmine.service
├─11375 unicorn_rails master -c config/unicorn.rb -E production
├─11405 unicorn_rails worker[0] -c config/unicorn.rb -E production
└─11407 unicorn_rails worker[1] -c config/unicorn.rb -E production
Nginxの設定
nginxとunicronの連携設定です。
下記設定ファイルを作成します。
/ete/nginx/conf.d/redmine.conf
httpで運用する場合
upstream redmine {
server unix:/var/lib/redmine/tmp/sockets/redmine.sock;
}
server {
listen 80;
server_name youdomainname.com;
root /var/lib/redmine/public;
client_max_body_size 1G;
location / {
try_files $uri/index.html $uri.html $uri @app;
}
location @app {
proxy_redirect off;
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;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 600;
proxy_pass http://redmine;
}
error_page 500 502 503 504 /500.html;
}
httpsで運用する場合
Let's Encryptでsslを実現しています。
証明書取得方法などは下記を参照してください。
https://letsencrypt.jp
※なんでこの設定かはまだ調べきれていないので後々何がどうなってるのか調べます・・・
なお、設定を下記サイトで計測した結果A+頂きました。
https://www.ssllabs.com/ssltest/
upstream redmine {
server unix:/var/lib/redmine/tmp/sockets/redmine.sock;
}
server {
listen 80;
server_name youredmine.domain;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name youredmine.domain;
root /var/lib/redmine/public;
ssl on;
ssl_certificate /etc/letsencrypt/live/youredmine.domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/youredmine.domain/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/youredmine.domain/fullchain.pem;
resolver 8.8.8.8;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
client_max_body_size 1G;
access_log /var/log/nginx/redmine.access.log;
error_log /var/log/nginx/redmine.error.log;
location / {
try_files $uri/index.html $uri.html $uri @app;
}
location @app {
proxy_redirect off;
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;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 600;
proxy_pass http://redmine;
}
error_page 500 502 503 504 /500.html;
}
nginxを起動する
systemctl start nginx
正常に起動したら設定しているURLへアクセスし、画面が表示されることを確認します
あとは好きなプラグインやテーマを入れて運用しましょう。
私の入れた(入れたい)プラグイン
Redmine Theme Changer plugin
ユーザごとにテーマを変更できるようにするプラグイン
テーマは管理者が入れる必要があるが、ユーザごとに好きにテーマが入れられるので利用意欲が湧くかも?
マイグレーションが必要
Sidebar Hide Plugin
チケット画面等でフィルターやウォッチユーザを表示しているサイドバーを隠せるようにするプラグイン
巷では「View customize plugin」を入れ、自分でjsを書くようですが私はこのプラグインで十分でした。
マイグレーションの必要はありません
Good Job plugin
入れたいプラグインその1
チケットが閉まると背景が「Good job!」な感じになるみたい。
チケット閉めるたび心がほんわかしそう。
Redmine Backlogs plugin
入れてみたいプラグインその2
スクラム開発で使うバックログ機能をredmine上で提供するプラグイン
まだ自分用のredmineなので必要ないかな・・・?
もうちょっと開発手法などを勉強してから試したい
私の入れたテーマ
A1
http://redminecrm.com/pages/a1-theme
黒っぽい画面が好きなので入れてみました。
かっこいい
Axiom
https://github.com/hulihanapplications/axiom
こちらも黒っぽい画面のテーマ。
ギークな感じがいい感じ。
ただ画面がでかいPCのだと描画範囲が狭く感じるかも?
gitmike theme
https://github.com/makotokw/redmine-theme-gitmike
Githubっぽく見えるテーマ。
入れてみたけどあんまり使ってないかも・・・