IT記事、時々ぼのぼの

ぼのぼのに毎日癒されつつ仕事しているエンジニアのブログです。


Nginxでのメンテナンスページ表示設定について

アクセスされるURLに関係なく、メンテナンス用のページを表示させるための設定を記載します。

前提知識

サイトのメンテナンス時にはステータスコード「503」で返すことが作法となりますので、以下のサイトを参考にご注意ください。
【事例】メンテナンス時はステータスコード503にしないとすごいことになる | Next Generation SEO

メンテナンス設定の有効化

Nginxのコンフィグファイルに以下の内容を記載し、ドキュメントルート下の[/usr/share/nginx/html/maintenance]にメンテナンス時に表示させたいページを配置します。(503.htmlがメンテ時に表示される。)

※メンテナンス用の設定部分のみ記載しております

server {

    listen       443;

    root /usr/share/nginx/html;

    #ここのスイッチを [true] or [false] でメンテの切り替え可能 
    set $go_maintenance "true";

    if ($uri ~ "^/maintenance/.*") {
        set $go_maintenance "false";
    }

    error_page 404 503 /maintenance/503.html;
    location /maintenance/ {}
    if ($go_maintenance = "true") { return 503; }

}

使い方

一番最初の [set $go_maintenance "true";] を"true"に変更し、Nginxをリロードします。

# service nginx reload

JODConverterのためのLibreOfficeのインストール/サービス登録手順

JavaでOfficeファイルをPDFに変換するための変換エンジンとしてLbreOfficeを使う場合のインストール手順、プロセスの自動起動設定をメモします。

注意事項

日本語のOfficeファイルを変換すると日本語が文字化けしてしまうので、日本語パッケージをあらかじめインストールしておいてください。

# yum groupinstall "Japanese Support"

LibreOfficeインストール

# wget http://download.documentfoundation.org/libreoffice/stable/4.2.4/rpm/x86_64/LibreOffice_4.2.4_Linux_x86-64_rpm.tar.gz
# tar -xzvf LibreOffice_4.2.4_Linux_x86-64_rpm.tar.gz
# cd LibreOffice_4.2.4.2_Linux_x86-64_rpm/RPMS/
# yum install --nogpgcheck lib*
# yum install libXinerama
# yum install cups-libs

自動起動設定

自動起動のためのShellを作ります。

# vi /etc/init.d/libreoffice-headless

#!/bin/sh
#
# libreoffice-headless - this script starts and stops the soffice daemon
#
# chkconfig:	345 20 80
# description:	init.d scruot for headless libreoffice
# processname: libreoffice-headless

# Source function library.
. /etc/rc.d/init.d/functions


libreoffice="/opt/libreoffice4.2/program/soffice.bin"
libreoffice_args='--accept="socket,host=127.0.0.1,port=8100;urp" --headless --nologo --norestore --nodefault --invisible'
prog=$(basename $libreoffice)

sysconfig="/etc/sysconfig/$prog"
lockfile="/var/lock/subsys/libreoffice-headless"
pidfile="/var/run/${prog}.pid"


start() {
    echo -n $"Starting $prog: "
    daemon "$libreoffice $libreoffice_args &"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    pidof soffice.bin > $pidfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
	rh_status_q || exit 0
        $1
        ;;
    status)
        rh_status || exit 0
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 2
esac

# chmod +x /etc/init.d/libreoffice-headless
# chkconfig --add libreoffice-headless

これで自動起動登録とserviceコマンドで制御可能となります。

ぼのぼの新刊発売!!

この頃、仕事がきついので、ぼのぼので癒されよう。
癒されたい方にぼのぼのはオススメです♪

Apache + Passenger 開発環境整備

Apache + Passenger の環境設定手順を記載します。

apacheインストール

# yum install httpd
# yum install httpd-devel

passenger インストール準備

# yum install gcc
# yum install gcc-c++
# yum install curl-devel
# yum install openssl-devel
# yum install zlib-devel
# yum install sqlite-devel

passenger インストール

# gem install passenger
# passenger-install-apache2-module
# vi /etc/httpd/conf.d/passenger.conf

 # Passengerの基本設定
 LoadModule passenger_module  /usr/lib64/ruby/gems/2.0.0/gems/passenger4.0.38/buildout/apache2/mod_passenger.so
 <IfModule mod_passenger.c>
 PassengerRoot /usr/lib64/ruby/gems/2.0.0/gems/passenger-4.0.38
 PassengerDefaultRuby /usr/bin/ruby
 </IfModule>

 # Passengerが追加するHTTPヘッダを削除するための設定
 Header always unset "X-Powered-By"
 Header always unset "X-Rack-Cache"
 Header always unset "X-Content-Digest"
 Header always unset "X-Runtime"

 # Passengerのチューニング
 PassengerMaxPoolSize 20
 PassengerMaxInstancesPerApp 4
 PassengerPoolIdleTime 3600
 PassengerHighPerformance on
 PassengerStatThrottleRate 10
 RailsSpawnMethod smart
 RailsAppSpawnerIdleTime 86400
 PassengerMaxPreloaderIdleTime 0

※環境により違いが出るので、「passenger-install-apache2-module --snippet」で確認

Apache 追加設定

<VirtualHost *:80>
ServerName xxxx.hogehoge.com
RailsEnv development
DocumentRoot /opt/rails/public
<Directory /opt/rails/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>

Railsインストール

# gem install rails
# gem install sqlite3
# gem install therubyracer

テスト

# mkdir /opt/
# cd /opt/
# rails new rails
# cd rails
# vi Gemfile

 gem 'therubyracer' ※追記

# bundle install


Apacheを起動し、http://xxxx.hogehoge.com/にアクセスして、正常に表示されればOKです。

Ruby 2.0 + unicorn 開発環境整備

Ruby 2.0 + Unicorn 開発環境の設定手順について記載します。
※Nginxのインストール/設定はまた後日

Rubyrpmパッケージ作成

下記サイトを参考に、Rubyrpmパッケージを作成します。
CentOS 6での Ruby 2.0.0 rpm 作成方法 - @naitohの日記

epelリポジトリ登録

# yum install wget
# wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
# rpm --import RPM-GPG-KEY-EPEL-6
# rm -f RPM-GPG-KEY-EPEL-6
# vi /etc/yum.repos.d/epel.repo

 [epel]
 name=EPEL RPM Repository for Red Hat Enterprise Linux
 baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/
 gpgcheck=1
 enabled=0

必要関連パッケージのインストール

# yum --enablerepo=epel install libyaml-devel
# yum install sqlite-devel
# yum install gcc-c++
# rpm -ivh ruby-2.0.0.xxxxxxxx.el6.x86_64.rpm #rpmパッケージを作ったバージョンを指定

unicorn/railsインストール

※先にやっておいた方がいいこと。
gemでのインストールはかなり時間がかかるので、デフォルトでドキュメントをインストールしないようにしておくことを推奨します。
RubyGemsでgemのインストール時に--no-ri --no-rdocをデフォルトにする - アインシュタインの電話番号

# gem update --system
# gem install rubygems-update
# gem install bundler --no-ri --no-rdoc
# gem install unicorn
# gem install rails

rbenvインストール/設定

複数バージョンのRubyを使い分けしたい場合は、rbenvをインストールしておく。
rbenvの使い方を簡単にまとめてみた - Axross.log

# yum install git
# cd /usr/local
# git clone git://github.com/sstephenson/rbenv.git rbenv
# git clone git://github.com/sstephenson/ruby-build.git rbenv/plugins/ruby-build
# vi /etc/profile.d/rbenv.sh

 export RBENV_ROOT="/usr/local/rbenv"
 export PATH="${RBENV_ROOT}/bin:${PATH}"
 eval "$(rbenv init -)"

# source /etc/profile.d/rbenv.sh

Tomcat7 メモリチューニング

簡単にTomcat7のメモリ設定箇所を記載します。
使用量の確認などは、jstatで確認するが、それはまた後日。
http://thinkit.co.jp/story/2011/03/25/2054/page/0/1

■参考
Javaパフォーマンス改善 - Full GCの原因とその解決方法について - Java入門

Tomcat7の場合、/etc/tomcat7/tomcat7.conf を変更して、以下の設定を有効とする。

JAVA_OPTS 環境変数を変更し、起動時のオプションとして以下を設定可能
基本的にはアプリケーションの使用メモリで設定することとなるが、
大まかな目安としては↓の値にしてみる。()

メモリ最大使用量(-Xmx)搭載メモリの半分程度。
メモリ初期使用量(-Xms)Xmxで指定した数値の半分位。

GCログの出力を有効にしておき、Full GCされたことは確認できるようにしておくことを推奨

例) JAVA_OPTS="-Xms2048m -Xmx4096m -verbose:gc"

-Xms ヒープ領域の初期値
-Xmx ヒープ領域の最大値。一般的に、-Xmsと同値にする
-Xmn NEW領域(Eden、From、To)の初期値
-XX:NewSize New 領域の初期値。同-Xmn
-XX:MaxNewSize New 領域の最大値。一般的に、-XX:NewSizeと同値にする
-XX:PermSize Permanent 領域の初期値
-XX:MaxPermSize Permanent 領域の最大値。一般的に、-XX:PermSizeと同値にする
-XX:NewRatio New 領域と Old 領域の比率
-XX:SurvivorRatio New 領域と Survivor 領域の比率。SurvivorRatio=Eden÷Survivor
-verbose:gc(-Xloggc:出力先) GCログ出力指定
-XX:+PrintGCTimeStamps GCログにタイムスタンプ(Java起動時からの経過時間)出力
-XX:+PrintGCDetails 詳細なGCログを出力
-XX:+PrintClassHistogram SIGQUITシグナル(kill -3 pid)受信時にヒープ統計情報を出力。-verbose:gc(-Xloggc:出力先)と併用必須
-XX:+HeapDumpOnOutOfMemoryError OutOfMemoryError発生時にヒープダンプを出力 (JDK1.5+)
-XX:+UseParallelGC マルチコアCPUまたは複数CPUの場合は、パラレルGCをマルチスレッドで実行を有効にする
※-XX:PermSize/-XX:MaxPermSize:-Xms/-Xmx範囲に含まれないことをご理解ください

ちょっと余談で、ログのタイムスタンプが日本時間にならない場合も軌道オプションを変更
JAVA_OPTSに追記で、日本時間で記載されるようになる。

  • Duser.timezone=Asia/Tokyo

Windows イベントログのCSVエクスポート

WindowsのイベントログをCSVでエクスポートする要件が出たので、PowerShellのGet-EventLogでエクスポートを考えていたのですが、Message部分に改行が含まれて、1イベントで1行になってくれないため、後々集計しづらくなってしまう。
それを避けるため、「PsTools」の「PsLogList.exe」を使って実現しました。

使い方

PsToolsをダウンロードし、解答すると以下のexeファイルが展開されるので、以下のように実行する。

PsLogList.exe system -s >> EventLog_System.csv

・オプション
-s:このスイッチを指定すると、PsLogList では、イベント ログのレコードを 1 行に 1 つずつ出力します (区切り記号にはコンマを使用します)。この形式は、文字列を検索する場合 (例、psloglist /i <文字列>、findstr /i <文字列>) や出力を Excel ブックにインポートする場合に便利です。

ダウンロード

PsLogList