Git+Redmine3+nginxの環境構築①

layout.png

開発をする際に必要になってくる、バージョン管理やプロジェクト(タスク)管理の環境を構築してみます。

今回構築する環境の特徴は、

  • バージョン管理にはGitを採用
  • プロジェクト(タスク)管理にはRedmine3.xを採用
  • Gitのアクセス権(ユーザ)はRedmineと共有できるようにする
  • RedmineからGitのファイルを参照できるようにする
  • RedmineからGitリポジトリを作成できるようにする
  • ついでにGitと同様にSVNを使用可能にする
  • Redmineからメール通知可能にする
  • Webサーバには最近良く聞くnginxを採用
  • Gitサーバーは認証関連の都合上、apacheで動作させる
  • サーバはCentOS6.x(さくらのVPS1G)
  • 使用するモジュールはできるだけ最新のものを使用する

では、構築してきます。

サーバ関連(nginx,apache)プロセスの起動ユーザの作成

サーバ関連(nginx,apache)プロセスの起動ユーザを統一したいので、httpというユーザを作成しておきます。

# useradd -s /sbin/nologin http


各種モジュールのインストールと設定

まずは、環境に必要な各種モジュールをインストールします。

  • ImageMagickと日本語フォントのインストール
    # yum install ImageMagick ImageMagick-devel ipa-pgothic-fonts

Redmine3.xのインストール

#2016/03時点の最新は3.2.0です。

Redmineモジュールのダウンロードと配置

モジュールをダウンロード&解凍し、配置します。

# wget http://www.redmine.org/releases/redmine-3.2.0.tar.gz
# tar zxvf redmine-3.2.0.tar.gz
# mv redmine-3.2.0 /var/lib/redmine


Redmine用のDB設定

RedmineのDB設定ファイルを作成します。

# vim /var/lib/redmine/config/database.yml
production:
  adapter:  mysql2
  database: redmine
  host:     localhost
  username: redmine
  password: password  ←もちろん、パスワードは自分できめてくださいw
  encoding: utf8

設定した内容に従って、DBを作成します。

# mysql -uroot -p
mysql> create database redmine default character set utf8;
mysql> grant all on redmine.* to redmine@localhost identified by 'password';
mysql> flush privileges;
mysql> exit;


メール送信設定とフォントの設定

設定ファイルを作成します。

# vim /var/lib/redmine/config/configuration.yml
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: 'hoge.jp'

  rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf


Gemパッケージのインストール

インストールするGemパッケージの追加。

# vim /var/lib/redmine/Gemfile.local
gem 'unicorn'
gem 'rails-observers'

Gemパッケージのインストール。(たぶん数分かかります)

# cd /var/lib/redmine/
# bundle install --without development test


Redmineの初期設定

下記を順に実行するだけ。

# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate
# RAILS_ENV=production bundle exec rake db:migrate:plugin
# bundle exec rake tmp:cache:clear
# bundle exec rake tmp:sessions:clear

あと、オーナーをhttpユーザにしておく。

# chown -R http:http /var/lib/redmine/


unicornの設定

下記設定を編集。

# vim /var/lib/redmine/config.ru
require ::File.expand_path('../config/environment',  __FILE__)
if ENV['RAILS_RELATIVE_URL_ROOT']
  map ENV['RAILS_RELATIVE_URL_ROOT'] do
    run RedmineApp::Application
  end
else
  run RedmineApp::Application
end

下記設定ファイルを作成。

# vim /var/lib/redmine/config/unicorn.rb
worker_processes 3
user "http","http"
working_directory "/var/lib/redmine"
listen "/var/lib/redmine/tmp/sockets/unicorn.sock", :backlog => 64
listen 8080, :tcp_nopush => true
timeout 30
pid "/var/lib/redmine/tmp/pids/unicorn.pid"
stderr_path "/var/lib/redmine/log/unicorn.stderr.log"
stdout_path "/var/lib/redmine/log/unicorn.stdout.log"
preload_app true
check_client_connection false
run_once = true
before_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
  if run_once
    run_once = false
  end
end
after_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end


Redmineのサービス化

起動スクリプトを作成。

# vim /etc/init.d/redmine
#!/bin/sh
### BEGIN INIT INFO
# Provides:          redmine
# Required-Start:    $local_fs $remote_fs $network $syslog redis-server
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Redmine
# Description:       Redmine
# chkconfig: - 75 25
### END INIT INFO
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

APP_NAME=redmine
APP_ROOT="/var/lib/$APP_NAME"
APP_PATH="/redmine"
CONFIGS="$APP_ROOT/config/unicorn.rb"
PID="$APP_ROOT/tmp/pids/unicorn.pid"
ENV=production
PORT=5001

UNICORN_OPTS="-D -E $ENV -c $CONFIGS --path $APP_PATH -p $PORT"

start()
{
  if [ -e $PID ]; then
    echo "$APP_NAME already started";
    exit 1;
  fi
  echo "start $APP_NAME";
  cd $APP_ROOT
  bundle exec unicorn_rails $UNICORN_OPTS
}

stop()
{
  if [ ! -e $PID ]; then
    echo "$APP_NAME not started";
    exit 1;
  fi
  echo "stop $APP_NAME";
  kill -QUIT `cat ${PID}`
  rm -f $PID
}

force_stop()
{
  if [ ! -e $PID ]; then
    echo "$APP_NAME not started";
    exit 1;
  fi
  echo "stop $APP_NAME";
  kill -TERM `cat ${PID}`
  rm -f $PID
}

reload()
{
  if [ ! -e $PID ]; then
    echo "$APP_NAME not started";
    start
    exit 0;
  fi
  echo "reload $APP_NAME";
  kill -HUP `cat ${PID}`
}

restart()
{
  stop
  start
}

case "" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  force-stop)
    force_stop
    ;;
  reload)
    reload
    ;;
  restart)
    restart
    ;;
  *)
    echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
    ;;
esac

exit

権限の付与と、自動起動に登録。

# chmod 755 /etc/init.d/redmine
# chkconfig --add redmine
# chkconfig redmine on
# chkconfig --list redmine


nginxにRedmineのロケーションを追加

# vim /etc/nginx/conf.d/default.conf
upstream redmine {
  server unix:/var/lib/redmine/tmp/sockets/unicorn.sock fail_timeout=0;
}

server {
    # redmine
    location ~ /redmine {
        root /var/lib/redmine/public;
        if (-f $request_filename) {
            break;
        }

        proxy_read_timeout 300; # Some requests take more than 30 seconds.
        proxy_connect_timeout 300; # Some requests take more than 30 seconds.
        proxy_redirect     off;

        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   Host $host;

        proxy_pass         http://redmine;

        access_log  /var/log/nginx/redmine_access.log;
        error_log   /var/log/nginx/redmine_error.log;
    }
}

ここまでで、Redmineが稼働できるようになっていますので、一度表示してみます。

# service redmine start
# service nginx restart

ブラウザから/redmineにアクセスしてみます。Redmineが表示されればOKです。


Git+Redmine3+nginxの環境構築②