LoginSignup
4
3

More than 1 year has passed since last update.

Next.jsアプリケーションをIISにデプロイしたかったのでIIS上でホストしてみた

Last updated at Posted at 2022-02-16

Next.jsをデプロイするならVercelが推奨されているけど、
どうしてもIISでやりたいっていう人向け。

IIS拡張モジュール「HttpPlatformHandler」を使うと、
IISからnode.exeを起動してHTTP要求をNodeプロセスに処理させることができます。
下記サイトを参考にさせていただきました。
https://nodejs.keicode.com/nodejs/using-platformhandler-to-host-nodejs-on-iis.php

事前準備

IIS拡張モジュールが必要なのでインストールします。
https://www.iis.net/downloads/microsoft/httpplatformhandler

あとは、Next.jsアプリを普通に作成して、ビルドまで済ませておきます。
私はcreate-next-appで作りました。

IISのWebアプリケーションで
http://localhost/nextapp
というURLでアクセスできるようにしたいので、
next.config.jsにbasePathの指定を入れておきました。

next.config,js
module.exports = {
  basePath: '/nextapp',
}

IISの設定

Webアプリケーション「nextapp」を作成し、
アプリケーションルートにweb.configファイルを作成します。

web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add 
                name="httpPlatformHandler" 
                path="*" 
                verb="*" 
                modules="httpPlatformHandler"
                resourceType="Unspecified" />
        </handlers>
        <httpPlatform 
            processPath="C:\Program Files\nodejs\node.exe"
            arguments="C:\nextapp\node_modules\next\dist\bin\next start C:\nextapp">
            <environmentVariables>
                <environmentVariable name="PORT" value="%HTTP_PLATFORM_PORT%" />
            </environmentVariables>
        </httpPlatform>
    </system.webServer>
</configuration>

これだけ!

実行確認

ブラウザで、下記にアクセス。
http://localhost/nextapp

Next.jsの画面が表示されれば成功です!

タスクマネージャを見ると、ちゃんとnode.exeが起動していました。
しかも複数セッションから接続してもexeは増えないので、この辺りはIISモジュールがやってくれてそう。

さいごに

けっこう検索しても出てこなくて苦労したので、
誰かの助けになったら幸いです。

にしても、Next.jsをサーバ側で動かすには、
ソースとかnode_modulesとか全部一式サーバに置かなきゃいけないのかな?
もともとReactでやろうとしてたけどSSRしたくてNext.jsってことになったので、
ReactみたいにビルドしたモジュールだけIISのアプリケーションルートに置けば動くと思ってた。
もっと良い方法があればぜひ教えてください。

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3