torutkのブログ

ソフトウェア・エンジニアのブログ

[CentOS][Redmine]CentOS 6, 7にRedmineとUnicornとNginxをインストール

CentOS 6上にRedmine 2.5.1とUnicornとNginxとをセットアップしたときの記録を次のWikiに書きました。
RedmineをCentOS 6上で動かすーUnicornとNginx編 - ソフトウェアエンジニアリング - Torutk

よくRedmineのセットアップ記事にはSELinuxは無効にすると書かれていますが、UnicornとNginxではSELinuxが有効の状態で稼動しました。

そうこうしていたら、CentOS 7のリリースがありました。
KVM仮想ゲストにCentOS 7をインストールしたことを以下に書きました。
CentOS 7のリリースとKVMゲストインストール - torutkの日記

その後に、Redmine 2.5.2とUnicornとNginxをセットアップした記録を次のWikiに書きました。
RedmineをCentOS 7上で動かすーUnicornとNginx編 - ソフトウェアエンジニアリング - Torutk

CentOS 7では、それまでとネットワークの設定、サービス(デーモン)の起動、ファイアウォールの設定などが大きく変わっていたので、セットアップに時間を取られてしまいました。

ネットワーク設定の方法はいくつかありますが、設定ファイルを直接編集する方法であればCentOS 6と同じままです。違いは、

  • インタフェース名の命名(ethXではなくなった)
  • ネットワークの確認コマンド(ifconfigはなくなった、ipコマンドを使う)
  • ホスト名の設定(/etc/sysconfig/networkではなくなった、/etc/hostnameに記述)

サービス(デーモン)の起動は、serviceコマンド、chkconfigコマンドと/etc/rd.d以下のデーモン起動・停止スクリプト群という仕組みからガラッと変わって、systemctlコマンドとUnit定義ファイルになりました。この仕組みは、後述のスライドが分かりやすいです。

ファイアウォールの設定は、iptablesコマンドではなくfirewall-cmdコマンドを使うようになりました。ポートを開くといったレベルであればはるかに簡単になりました。
この仕組みは、後述のスライドが参考になりました。

UnicornとNginxの設定では、大きなはまりは事項が2つありました。

  • 今回、CentOS 7用のNginx RPMをインストールしました。そのNginxのサービス起動設定ファイルでPrivateTmp=trueが設定されているため、他のプロセス(Unicorn)と/tmp下(/var/tmpも)のファイルが共有できない、というはまり。
  • 上記の問題を回避するため、UnicornとNginxの通信用UNIXドメインソケットファイルを/tmpからUnicornディレクトリに移動しました。その結果、SELinuxUNIXドメインソケットファイルへのアクセスが排除されてしまった、というはまり。

CentOS 7(RHEL 7)のサービス起動、ファイアウォールは次のスライドが分かりやすかったです。

Ruby 2.1.2とRails 3.2(Redmine 2.5.x)

CentOS 6.5のKVMホスト上にCentOS 6.5のKVMゲストを乗せ、ruby 2.1.2をいれ、UnicornRedmine 2.5.2を動かしている環境において、たまにハングアップ(無応答)状態となることがあります。無応答後unicornのマスターにQUITシグナルを送ってもなかなか終了せず、結構待って終了したらunicornのエラーログにエラーが吐かれます。内容は、http_responseでソケットにwriteしているところでEHOSTUNREACHエラーが発生しているというものです。ホストのNICなのかKVMのブリッジなのかゲストの仮想ネットワークドライバかRubyUnicornか何が原因かはまだ判明していません。