More than 1 year has passed since last update.

変更履歴

  1. 2016/06/08 Redmineの動作確認項目コマンドでは正常にWEBrickが起動しないため、コマンドを修正
  2. 2016/06/15 SendGridでのメール送信設定の追加
  3. 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ページ

  1. http://blog.redmine.jp/articles/3_2/install/centos/
  2. 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
  3. 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をコピーし下記ファイルを作成
※ 必要ない部分はコメントアウトか削除しています。

/var/lib/redmine/config/database.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "********"
  encoding: utf8

email設定

Gmailの場合

※ configuration.yml.exampleをコピーし下記ファイルを作成

/var/lib/redmine/config/configuration.yml
  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時点の情報の為、古い情報の場合は適宜読み替え必須

  1. Gmailへログインする
  2. 右記URLへアクセス https://accounts.google.com/DisplayUnlockCaptcha
  3. 「Google アカウントへのアクセスを許可」画面で次へをクリック
  4. 右記URLへアクセス https://myaccount.google.com/security
  5. 一番下までスクロールし、「安全性の低いアプリの許可」を有効にする

※上記手法が嫌な場合、別の方法を利用してください。

SendGridの場合

※SendGridのSMTPを利用した送信方法です。
※アカウントはすでに取得済みとして進めます。
※ configuration.yml.exampleをコピーし下記ファイルを作成

/var/lib/redmine/config/configuration.yml
  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:の部分は何が正解かちょっとわかっていません。
 私の場合は上記設定で動いてます程度の理解です・・・

日本語フォントの設定

/var/lib/redmine/config/configuration.yml
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のインストールディレクトリへファイルを追加

/var/lib/redmine/Gemfile.local
gem "unicorn"

インストール

インストールディレクトリで下記を実行
※今回は/var/lib/redmine

bundle update

動作確認

※ WEBrickの動作確認で利用したポート3000を一時的に利用

bundle exec unicorn_rails -l 3000 -E production

Redmine用Unicorn設定

設定ファイルの作成
※こちらも参考Webページ2をほぼ流用です・・・

/var/lib/redmine/config/unicorn.rb
# -*- 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

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で運用する場合

redmine.conf
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/

redmine.conf

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っぽく見えるテーマ。
入れてみたけどあんまり使ってないかも・・・