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の指定を入れておきました。
module.exports = {
basePath: '/nextapp',
}
IISの設定
Webアプリケーション「nextapp」を作成し、
アプリケーションルートに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のアプリケーションルートに置けば動くと思ってた。
もっと良い方法があればぜひ教えてください。