blog.鶯梭庵

二〇一五年 霜月 廿三日 月曜日

CentOS 7 に Nginx と Node.jsをインストール [/links]

この記事は書かれてから1年以上経過しています。内容が古くなっている可能性があります。コメントの受付は終了しました。

前回の記事で、CentOS 7 に Nginx をインストールする方法を書いた。そこでは、semanage をインストールするのは面倒だと書いたけれど、Nginx のバックエンドで Node.js を動かすなら、semanage が必要だ。semanage は policycoreutils-python パッケージに含まれているので、次のコマンドでインストールできる。

yum -y install policycoreutils-python

Nginx をインストールして起動し、80 番ポートを開けるまでは、前回の記事に書いた。

semanage を使うなら、ファイル転送のためのユーザーは普通に作ってよい。ユーザー名を www とするなら、

useradd www

passwd www

となる。次に、

chmod 755 /home/www

でアクセス権を設定するが、それだけではウェブサーバーが /home/www 以下のファイルにアクセスできない。/home/www/html 以下にウェブリソースを置く場合、

semanage fcontext -a -t httpd_sys_content_t "/home/www/html(/.*)?"

でコンテキストを設定して、

restorecon -R /home/www/html/

で設定を反映する。

Nginx の設定は、基本的にはこんな感じ。

server {

listen 80;

root /home/www/html;

location / {

try_files $uri @nodejs;

}

location @nodejs {

proxy_pass http://localhost:3000;

}

}

server {

listen 80;

server_name blog.ousaan.com;

location / {

proxy_pass http://localhost:3001;

}

}

server {

listen 80;

server_name origami.ousaan.com;

location / {

proxy_pass http://localhost:3002;

}

}

最初の server がデフォルトのサーバーになる。この設定では、blog.ousaan.com と origami.ousaan.com へのリクエストは無条件に Node.js に渡して、そのほかのリクエストについては、URI に対応するファイルがあればそれを返し、なければ Node.js に処理を移す。

Node.js のインストール方法は Node.js のウェブページにある。日本語のウェブページを検索すると古い情報ばかり出てくるので注意。

Node.js を素のまま使うのは辛いので、私は、CoffeeScript をグローバルにインストールし、Express.jsJade をローカルにインストールした。Node.js に npm が付いているので、インストールは簡単。インストール方法はそれぞれのウェブページを参照のこと。

Node.js の設定は、以前の記事に書いたのと同じ。ただし、それだけでは 502 Bad Gateway のエラーが出る。SELinux のポリシーにより、3000 〜 3002 番ポートに HTTP でアクセスできないため。次のコマンドでアクセスできるようになる。ポートを外に向かって開く必要はないので、ファイアウォールの設定はいらない。

semanage port -a -t http_port_t -p tcp 3000-3002

最後に、Node.js アプリをデーモン化する。そのためには forever を使うことが多いようだけれど、CentOS 7 なら systemd を使ったほうがよい。アプリケーションが /home/www/app/index.coffee だとして、それを nodejs という名前のサービスにするなら、/etc/systemd/system/nodejs.service というファイルを作って、以下のように記述する(参考にしたのは Deploying Node.js with systemd とか How To Deploy Node.js Applications Using Systemd and Nginx とか)。

[Service]

ExecStart=/usr/bin/coffee /home/www/app/index.coffee

Restart=always

User=www

Group=www

[Install]

WantedBy=multi-user.target

すると、

systemctl start nodejs

でサービスを開始できる。システムが再起動したとき自動的に起動させるには、

systemctl enable nodejs

とするだけでよい。

[このカテゴリをまとめて読む。] [最新の記事を読む。]

RSS feed

カテゴリ

[/language] (98)
[/links] (254)
[/mac] (114)
[/music] (36)
[/origami] (406)
[/this_blog/ajax] (7)
[/this_blog/blosxom] (4)
[/this_blog/history] (12)
[/this_blog/perl] (9)

最新記事

パスワードについてのあなたの常識はもはや非常識かもしれない・その1 [/links]
ニューラルネットワークとディープラーニングで翻訳はどうなる・その5 [/language]
ニューラルネットワークとディープラーニングで翻訳はどうなる・その4 [/language]
HTTPS 対応 [/links]
ひらがな・カタカナ学習ウェブアプリ [/links]
日本語の「た」と英語の過去形 [/language]
ORI-REVO で回転楕円体を折る・その2 [/origami]
ORI-REVO で回転楕円体を折る・その1 [/origami]
折り紙建築 [/origami]
折鶴に松図小柄 [/origami]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その6 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その5 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その4 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その3 [/links]
改訂版・たぶん、ほとんどの人は viewport meta タグの指定をまちがえてる・その2 [/links]

羽鳥 公士郎