[さくら][クラウド]一撃インストールシリーズ「RedMine」


■ 901_nginx.conf

前回のWordPressと違い、今回のRedMineでは、Nginxは単にリバースプロキシとして動作しますが、/home/vhosts/<IPアドレス>/public_html にもコンテンツを置けるようにし、http://<IPアドレス>/redmine でアクセスされたときにRedMine が見えるようにします。

user  nginx;
worker_processes  1;
worker_rlimit_nofile 100000;

#error_log   /var/log/nginx/error.log;
error_log   /home/logs/_IPADDR_/error.log;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    use epoll;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /home/logs/_IPADDR_/access.log  main;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    server_tokens   off;
    gzip            on;
    gzip_static     on;
    gzip_comp_level 5;
    gzip_min_length 1024;
    keepalive_timeout  65;
    limit_conn_zone   $binary_remote_addr  zone=addr:10m;

    # Load config files from the /etc/nginx/conf.d directory
    include /etc/nginx/conf.d/*.conf;

    upstream REDMINE {
        server 127.0.0.1:5001;
    }

    server {
        limit_conn addr 10;
        listen       80;
        server_name  _IPADDR_;
        root   /home/vhosts/_IPADDR_/public_html;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            index  index.html index.htm;
            try_files $uri $uri/ /index.php?$args;
        }

        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;
        }


        location = /favicon.ico {
             log_not_found off;
        }

        error_page  404              /404.html;

        location = /404.html {
            root   /usr/share/nginx/html;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

 

■ 910_redmine-init

RedMineの起動スクリプトはこちらを参考にさせていただきました。

#!/bin/sh

# REDMINE
# Maintainer: @umezawa
# Authors: tomoki.umezawa@gmo-gc.com, @umezawa

### 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/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 "$1" 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

 

結構長丁場だったかも知れませんが、これらテキストファイル(シェルスクリプト)を用意するだけで、一撃インストールを何台でも量産することができます。現場からは以上です。

[amazonjs asin="4774164283" locale="JP" title="チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)"]