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ディレクトリに移動しました。その結果、SELinuxでUNIXドメインソケットファイルへのアクセスが排除されてしまった、というはまり。
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をいれ、UnicornでRedmine 2.5.2を動かしている環境において、たまにハングアップ(無応答)状態となることがあります。無応答後unicornのマスターにQUITシグナルを送ってもなかなか終了せず、結構待って終了したらunicornのエラーログにエラーが吐かれます。内容は、http_responseでソケットにwriteしているところでEHOSTUNREACHエラーが発生しているというものです。ホストのNICなのかKVMのブリッジなのかゲストの仮想ネットワークドライバかRubyかUnicornか何が原因かはまだ判明していません。