HugoをWebサーバとして使う

 Hugoは静的サイトジェネレータでありつつも、Webサーバ機能を併せ持っています。この点について、公式では以下のように説明されています。

Hugo provides its own webserver which builds and serves the site. While hugo server is high performance, it is a webserver with limited options. Many run it in production, but the standard behavior is for people to use it in development and use a more full featured server such as Nginx or Caddy.

Hugo - hugo server
 ざっくり訳すと、

Hugoはサイトをビルドして提供する独自のWebサーバを持っている。Hugoサーバは高性能であるが、限定的なオプションのWebサーバである。本番環境(production)でも多く利用されているが、多くの人は開発環境として利用し、NginxやCaddyのような、より機能性の高いサーバーを利用するのが普通である。

 といった感じの説明がされています。

 また、ディスカッションボードでも、hugo開発者のspf13氏は以下の発言をしています。

A lot of people are using hugo as a production server. Performance is about the same as Apache.

Hugo Server for Production - tips & tricks - Hugo Discussion
 ということで、Apacheと同等のパフォーマンスで利用可能だと主張されています。

 Webサーバとしてのhugoが本番環境での使用に耐えうるパフォーマンスなのか興味深いですが、その点については本投稿では掘り下げません。

 本投稿では、単にWindows上で稼働するhugoを、LAN内からアクセス可能なWebサーバとして稼働させるための方法を紹介します。
 ファイヤーウォール開放して、IISTomcatなどと同様にサーバプロセス(orサービス)を起動したら終わりだろという話なのですが、情報の少ないhugoでは多少ハマったので、その辺も併せて紹介します。
 

前提環境

OS
Windows 10 Home
S/W
Hugoインストール済
ホスト名
HOGE(DHCPIPアドレス割振り済)
N/W
プライベートネットワークに接続済

f:id:kachine:20160511210439p:plain
※ここではポート8080で稼働させるとする(Hugoのデフォルトは1313)。
 

Windowsファイヤーウォールの設定

1. スタートメニューから[Windowsファイアウォールによるアプリケーションの許可]を選択
f:id:kachine:20160511210808p:plain
2. [設定の変更]を押下後、[別のアプリの許可]を押下しHugo(hugo_0.15_windows_amd64.exe)を例外に追加する。
f:id:kachine:20160511211157p:plain
※以下(3~5)は所謂ハードニングのための設定であり、必須ではない(しなくても繋がる)。
3. スタートメニューから[セキュリティが強化されたWindowsファイアウォール]を選択
f:id:kachine:20160511211317p:plain
4. 受信の規則にhugoが2つ(TCPUDP)追加されているので、UDPの規則を削除。
f:id:kachine:20160511211706p:plain
5. 残ったhugoのTCPの規則を選択し、[プロトコルおよびポート]タブでローカルポートを[すべてのポート]から[特定のポート]に変更し8080を設定
f:id:kachine:20160511211934p:plain
 

Hugoの起動

 Hugoを以下のオプションで起動する。

hugo server --baseURL="HOGE" --bind="HOGE" --port=8080

 

動作確認

 LAN内の端末から、

http://HOGE:8080/

 でアクセス可能なことを確認できたら完了。
 

補足

ハマったポイント1

 通常hugoは、

hugo server

 として起動するだけで、そのマシン自体からはhttp://localhost:1313でアクセス可能となる。
 だが、この起動オプションではWindowsファイヤーウォールをどう設定しても、外部端末からはhttp://HOGE:1313としてアクセスできない。

ハマったポイント2

 ホスト名にバインドしてやれば、外部端末からアクセス可能になることに気付いたのだが、

hugo server --bind="HOGE"

 として起動すると、外部端末からhttp://HOGE:1313でアクセス可能になったものの、コンテンツのリンクがところどころ壊れている。具体的には一部のリンクがlocalhost以下に対するものになっており、アクセスできない。
 これを解消するためには、baseURLオプションを指定する必要がある。

ポート番号覚えにくい

 これは別にハマった訳ではないが、単に覚えにくい。
 portオプションで好きなように設定できるので、8080とした(公開サーバーでもないので、ハードニングの観点からはhttpらしからぬポート番号にするのが望ましいだろう)。

LAN内からアクセスできて何が嬉しいのか

 オフィス内の簡易Webサーバとして利用する用途もアリだと思うけれど、私の場合はiOSAndroid端末実機でのコンテンツの表示確認がしたかった。
 (レスポンシブデザインの確認だけならPCでどうにかできても、WebMが正しく再生可能かなどは実機確認が確実なので。)
 (ターゲットがPCだけなら、わざわざファイヤウォールに穴を開ける必要は無く、前述の通りhugo serverで起動してlocalhost:1313で確認すれば問題ない。)
 



以上。