2種類の異なるアプリケーションを同一サーバー内で共存させる方法

開発/プログラミング

Next.jsとLaravelを1つのサーバー内に共存させたい

「Node.jsとRailsを共存させたいけど、80と443しか受け付けていないからポート番号が被って共存させられない」

このような複数のアプリケーションを同一サーバーに共存させたい悩みを解消するために、本記事ではWordpressとNext.jsを共存させる方法を紹介します。

本記事中では以下の意味で扱います。

サーバー:レンタルサーバーや物理的なサーバーのこと
アプリケーションサーバー:アプリケーションを用いて立ち上げて応答を受け付けられるサーバーのこと。例えばNext.jsサーバー、Wordpressサーバーのこと

前提

基本的な考えは1アプリケーション、1サーバーです。その方がシンプルでリソースやエラー監視などで保守・管理がしやすいからです。
また、本番で運用する際には考慮する点が多いので、その他の情報も参考にしてください。

ですが、知識自体を持っていることは必ず役に立ちます。

結論

さっそく結論を言うと、

リバースプロキシという仕組みを使います。

example.comはWordpressサーバーへ」、「example.com/toolsはNext.jsサーバーへ」アクセスを振り分けるということが実現可能です。

リバースプロキシとは

出典:https://www.gate02.ne.jp/media/it/column_107/

リバースプロキシとは簡単に説明すると、「インターネットとサーバーの間に立ってくれる良いヤツ」のことです。間に立ってくれることで負荷分散どのサーバーにアクセスさせるか(ルーティング)などを受け持ってくれます。

今回は「Apache」を使いますが、「Nginx」でもGCPの「Cloud Load Balancing」でも同様のことは実現可能です。

詳しく知りたい方は以下のサイト様が分かりやすいです。

プロキシサーバーとは?仕組みやメリット、使用上の注意点について解説 | 情シスマン
企業が安全なネットワーク環境を整えるにあたって、プロキシサーバーはとても役に立つものです。しかし、やみくもに運用すると、逆にリスクが高まってしまうケースもあります。導入を検討しているのであれば、具体的な役割を知っておく必要があります。本記事では、プロキシサーバーの仕組みやメリットを詳しく紹介します。使用上の注意点も解説...

本記事の構成の説明

Apacheでリクエストを受けているWordpressサーバーを建てている状況から、Next.jsを導入する方法を説明します。

GCPのGCE上で1サーバーを借りている状況です。

今回のルーティングは以下の通りになることを想定しています。

  • example.com … WordPressサーバー
  • exmaple.com/next 配下 … Next.jsサーバー

設定手順

1. Next.jsを導入する

このままでは外から3000番ポートにアクセスできないので、Apacheの設定を変えてアクセスできるようにします。

2. Apacheの設定

  • STEP1
    proxyの設定を追加

    /etc/apache2/sites-enabled/000-default.confに(適宜サーバーによって読み取ってください)以下の設定を追加します。

    /next と /next/がある理由は、/next と /next/ と /next/**/*をカバーするために入れています。

    Bash
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass /next/ http://localhost:3000/next/ keepalive=On
    ProxyPassReverse /next/ http://localhost:3000/next/
    ProxyPass /next http://localhost:3000/next keepalive=On
    ProxyPassReverse /next http://localhost:3000/next

    URLの構造は合わせた方がシンプルで考えやすいです。

    また、ProxyPassを有効にするためには、mod_proxyのApacheモジュールを読み込む必要があります。

  • STEP2
    再起動

    以下のコマンドでApacheを再起動します。

    Bash
    sudo systemctl reload apache2

エラーになる場合は

Webページにアクセスしてエラーが出る場合は、/var/log/apache2/error.logにエラー内容が書かれていることがあります。

また、sudo a2ensiteで有効にする必要があるかもしれません。

注意点

この構成を取る時の注意点やデメリットが以下の通りです。

自動起動の設定が必要

このままではサーバーを再起動したときに、Next.jsが自動起動しません。
それらの設定も必要になります。

少し複雑になる

1アプリケーション:1サーバーのような構成と比べて少し複雑になります。

そのため、

  • スケールの設定が大変
  • リソース管理の予測が難しい
  • エラーログの取得がしづらい
  • 両方起動してからアクセスを流す考慮

この辺りの設定が大変です。

起動時間が遅くなる

1サーバーに2種類のアプリケーションサーバーを入れているので、もちろん起動するのに時間がかかります。
自動スケール設定の場合起動時間が遅いと間に合わないことがあります。

まとめ

本記事ではリバースプロキシを用いて、異なるアプリケーションを動くようにしてみました。

本番では今回のようなアプリケーションが動いているサーバー内でルーティングを行わずに、前段にもう一つサーバーを用意するのが一般的かと思われます。

しかし、「費用をなるべく抑えたい」、「古くから稼働しているサーバーのため大きな変更を加えられない」など、用途によっては使いようがあるので、実現可能であることの知識として持っておくと損することはないと思います。

コメント

タイトルとURLをコピーしました