web-dev-qa-db-ja.com

php / Apacheサーバーにnodejsアプリをデプロイする方法は?

現在実行している専用サーバーがあります4 PHP Webサイト。サーバーはApache + nginxで構成されています。phpWebサイトをホストするときはいつでもpublic_htmlフォルダーにファイルを置きます。実行中ですが、nodejsアプリケーションをインストールしたいと思います。server.jsファイルの処理方法と実行を維持する方法について混乱しています。ubuntuホストで永久に実行し続けるには、pm2またはforeverを使用する必要があります。 example.comのようなドメイン名でウェブサイトを実行する

11
John

NodeJSでは、Expressのような既存のものを使用するか、基本的に独自のWebサーバーをロールすることができます。

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(3000);

サーバー上でサービスを実行し続けたい場合は、ForeverとPM2から始めるのが最適です。 ForeverはPM2よりも長い間使用されてきましたが、PM2はForeverよりも機能が豊富であると思います(永遠に使用するのが少し簡単です)。

Apacheまたはnginxに関しては、それらを使用してリクエストをノードプロセスに転送できます。 httpはデフォルトでポート80で実行されますが、ポート80はすでにApacheプロセスで使用されています。私がお勧めするのは、nodejsアプリケーションを別のポート(たとえば3000)で実行し、既存のWebサーバー(Apache、ligtthpd、nginxなど)をリバースプロキシとして使用することです。以下にセットアップ例を示します。

Apache

<VirtualHost example.com:*>
    ProxyPreserveHost On

    ProxyPass /api http://localhost:3000/
    ProxyPassReverse /api http://localhost:3000/

    ServerName localhost
</VirtualHost>

lighttpd

$HTTP["Host"] == "example.com" {
    server.document-root = "/var/www/example.com"
    $HTTP["url"] =~ "(^\/api\/)" {
       proxy.server = (
            "" => (
                (
                    "Host" => "127.0.0.1",
                    "port" => "3000"
                )
            )
        )
    }
}

nginx

http {

    ...

    server {

        listen 80;
        server_name example.com;

        ...

        location /api {

            proxy_set_header Host $Host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Scheme $scheme;

            rewrite ^/api/?(.*) /$1 break;
            proxy_pass http://localhost:3000;
        }

        ...
    }
}

上記の例では、 http://example.com/api へのリクエストは、ポート3000で実行されているノードプロセスにリダイレクトされます。

ここでの考え方は、静的ファイル(cssなど)を提供するためにWebサーバーを使用し、アプリケーションを提供するためにノードプロセスを使用するというものです。

14
Kinetic