オンプレIISなんて1億と2000年前のロストテクノロジーなのだけど、やっぱり強いられるケースは8000年に1回ぐらいはあって。
でIISなんかほぼ全く触ったことなかったとこからNodeをホストにするのに苦労したから、その備忘録。
IISでNode.jsを立ち上げると言っても、サーバー自体はそれぞれ別で起動する。
IISが指定してくるポート番号でNode.jsを立ち上げて、IISにアクセスがあればIISがポートフォワーディングしてNode.jsのページを返す。
その結果、IISでホストしてるWebでNode.jsのページが見れる、みたいなかんじ。
IISの触り方からなにから0からやってみたけど、1回できてしまえばなんてことない。
1.まずふつーにIISをインストールする。
2.HttpPlatformHandlerをインストールする。
こいつがフォワーディングしてくれる。
3.Node.jsをインストールする。
LTSでいいんじゃないかな。
これで環境構築は終わり、あとはページを作っていく。
例えばこんなNodeのコード。
const express = require('express'); const app = express(); const http = require('http').Server(app); app.get('/', (req, res) => { res.send('node page'); }); http.listen(process.env.PORT || 3000);
で、大事なのはこの一文。
指定がなければ3000だけど、指定があればその番号のポートでhttpを実行するよ。
ここにIISが投げてきたポート番号が入る予定。
http.listen(process.env.PORT || 3000);
つぎにIISにホストする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="node.exe" arguments="./server.js"> <environmentVariables> <environmentVariable name="PORT" value="%HTTP_PLATFORM_PORT%" /> </environmentVariables> </httpPlatform> </system.webServer> </configuration>
大事なのはここ
handlersでhttpPlatformHandlerつかうよって追加して、その挙動をしたのhttpPlatformに書くかんじ。
argumentのserver.jsをprocessPathのnode.exeで実行するよ。
その時の環境変数がこう。
<environmentVariables> <environmentVariable name="PORT" value="%HTTP_PLATFORM_PORT%" /> </environmentVariables>
HTTP_PLATFORM_PORTはお決まりの構文らしく、ここにIISが指定してきたポートが入る。
入ってきたポートをPORTって名前で定義して、実行する。
で、そのPORTが、Node.jsのここに入ってくる。
http.listen(process.env.PORT || 3000);
公開フォルダにコードを置いたら、
npm install -y
でパッケージをインストールする。
最終のファイル構成がこんなかんじ。
あとはIISマネージャから、Webサイトの追加。
今回は6000番ポートでホストする。
最後にアクセスしてみると、node pageが表示された!
次の8000年後には絶対忘れてる自信しかないから、ちゃんと書いておいた。
まぁでも、素直にWebAppsとか使おうよ。