środa, 17 kwietnia 2013

Node.js + IIS

Konsola jest niezłym urozmaiceniem w czasach, w których przyzwyczailiśmy się, że wszystko ma graficzny interfejs. Jednak w codziennym użytkowaniu wygodniej jest, jeśli nasz serwer jest uruchamiany w postaci usługi. Ten post poświęcę kwestii hostowania node.js na platformie Windows ze szczególnym uwzględnieniem integracji z IIS.

Mamy różne sposoby uruchamiania aplikacji node.js w postaci usługi Windows:

Niewątpliwie bardzo interesującą opcją - choć dla niektórych trochę kontrowersyjną - jest hostowanie node.js na serwerze IIS. Służy temu projekt iisnode, który jest również dzieckiem Tomasza Janczuka. Na jego blogu można znaleźć wiele postów poświęconych temu zagadnieniu. Tutaj dokonam tylko krótkiego podsumowania najbardziej istotnych informacji:

iisnode

Instalacja

Nie sprawiła żadnego problemu. Wcześniej doinstalowałem moduł IIS do przepisywania adresów URL. Instalacja przykładów wg. wskazówek również bezproblemowa. Node.js wspierany w wersji 0.8.22 x86, co jest zgodne z projektem edge.js i sterownikiem do MS SQL Server. Aha, na systemach x64 w ustawieniach puli ASP.NET dla aplikacji node.js nie zezwalamy na uruchamianie aplikacji 32-bitowych (domyślnie tak właśnie jest, ale jak ktoś ma to włączone to niech wyłączy lub stworzy dedykowaną pulę).

Zmiany

Tutaj po krótce, co zmieniałem w przykładzie prezentowanym we wcześniejszych postach.

sn11

Port

W pliku server.ts (server.js) zmieniałem port na zmienną środowiskową process.env.PORT.

Konfiguracja

Zgodnie z zaleceniami do katalogu z aplikacją node.js dodałem plik Web.config

image

W handlerach informuję IIS by plik server.js nie traktował w sposób domyślny jako statyczną zawartość dla przeglądarki, tylko jego obsługę przekazał modułowi iisnode. To podstawa wszystkiego. W opcjonalnej sekcji <rewrite> konfiguruję adresy dla aplikacji, by nie zawierały słowa “server.js”. O adresach więcej w następnej sekcji.

Adresy

Po umieszczeniu aplikacji w folderze nodejs-app na IIS, zmieniłem w niej adresy endpointów tzn. np “/api/products” na “/nodejs-app/api/products”. Podobną praktykę zaobserwowałem w dostarczonych przykładach. Umieszczanie nazwy folderu IIS w kodzie aplikacji nie wydaje mi się najlepsze, ale to tylko demo. Z pewnością da się to zrobić lepiej…

Uprawnienia

Po zhostowaniu aplikacji w IIS przestał mi działać dostęp do SQL Server’a i do COM-a Outlook. Przykładowo w przypadku SQL trzeba było dodać do jego loginów konto ‘IIS APPPOOL\DefaultAppPool’. Czyli rzeczy znane z codziennej pracy pod IIS –;)

Podsumowanie

Niektóre funkcjonalności i moduły node.js częściowo dublują IIS. Ze względów wydajnościowych z reguły lepiej używać natywnych mechanizmów.  IIS czasem wprowadza ograniczenia, coś narzuca. W każdym razie w zestawieniu IIS + node.js chodzi o udaną symbiozę, tak by wziąć to, co najlepsze z obu serwerów. Node.js daje łatwe pisanie serwera w JavaScript i zakłada asynchroniczność każdej operacji przy jednym wątku (asynchroniczne handlery w ASP.NET były od zawsze możliwe do pisania, ale dopiero ostatnio się popularyzują z uwagi na znaczne uproszczenia wprowadzone przez TPL i async). IIS dodaje m.in mechanizmy bezpieczeństwa, dzielenie portów, kompresję, cachowanie, szybkie udostępnianie statycznej zawartości.

I jeszcze jedno. Konfiguracja node.js + IIS jest używana przez:

image

Brak komentarzy: