atelier:mitsuba

i love UI/UX, Blend, XAML, Behavior, P5, oF, Web, Tangible Bits and Physical computing. なにかあればお気軽にご連絡ください。atelier@c-mitsuba.com

オンプレIISでNode.jsのexpressを立ち上げる。

オンプレIISなんて1億と2000年前のロストテクノロジーなのだけど、やっぱり強いられるケースは8000年に1回ぐらいはあって。
IISなんかほぼ全く触ったことなかったとこからNodeをホストにするのに苦労したから、その備忘録。


IISでNode.jsを立ち上げると言っても、サーバー自体はそれぞれ別で起動する。
IISが指定してくるポート番号でNode.jsを立ち上げて、IISにアクセスがあればIISがポートフォワーディングしてNode.jsのページを返す。
その結果、IISでホストしてるWebでNode.jsのページが見れる、みたいなかんじ。


f:id:c-mitsuba:20210518131847p:plain


IISの触り方からなにから0からやってみたけど、1回できてしまえばなんてことない。


1.まずふつーにIISをインストールする。


f:id:c-mitsuba:20210518124119p:plain


2.HttpPlatformHandlerをインストールする。


www.iis.net


こいつがフォワーディングしてくれる。


docs.microsoft.com


3.Node.jsをインストールする。
LTSでいいんじゃないかな。


nodejs.org


これで環境構築は終わり、あとはページを作っていく。




例えばこんな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


でパッケージをインストールする。



最終のファイル構成がこんなかんじ。


f:id:c-mitsuba:20210518130031p:plain



あとはIISマネージャから、Webサイトの追加。
今回は6000番ポートでホストする。
f:id:c-mitsuba:20210518130534p:plain

最後にアクセスしてみると、node pageが表示された!

f:id:c-mitsuba:20210518131110p:plain


次の8000年後には絶対忘れてる自信しかないから、ちゃんと書いておいた。

まぁでも、素直にWebAppsとか使おうよ。