ClojureのImmutantでWebサーバ起動時に外部からのアクセスを制限/解放するには?


ClojureのWebアプリケーションフレームワークLuminusでは、2.0からImmutantというサーバ関連のライブラリが使われています。

Immutantは、Webサーバの他に、スケジューラやメッセージングといったライブラリも含んだJBOSS関係のClojure向けライブラリです。

僕はWebサーバ、そしてバッチ処理用に使っています。

で、これが、アプリケーションをちょろっと書いてサーバ起動して、ローカルで見るとちゃんとHTMLが表示されるんですが、ローカルLAN内の他のPCからだと見ることができません。

不思議ですね。(よくあるWebアプリケーションフレームワークって、すぐにポート指定したら見れたりするでしょ)

原因はここを見ると書いてあります。

immutant.web

options can be a map or kwargs, with these valid keys [default]:

:host The interface bind address [“localhost”]
:port The port listening for requests [8080]
:path Maps the handler to a prefix of the url path [“/”]
:virtual-host Virtual host name[s] (a String or a List of Strings) [nil]
:dispatch? Invoke handlers in worker thread pool [true]
Note the web server only binds to the loopback interface, by default. To expose your handler to the network, set :host to an external IP address, or use “0.0.0.0” to bind it to all interfaces.

つまり、 Luminus上で、4000番ポート、他のPCからも接続可能な状態でホストを指定して起動するには、

(defn -main
  [& args]
  (.addShutdownHook (Runtime/getRuntime) (Thread. stop-server))
  (start-server (concat ["port" 4000 "host" "0.0.0.0"] args))
  (timbre/info "server started on port:" (:port @server)))

と指定すればいいことがわかりました。

ここ、最初ちょっとした詰まりポイントかもです。

Comments are closed.