ASP.NET Core フレームワークを用いて文献管理システムを作る 【第10回 Apacheを用いた外部接続(公開)】

1. 前回のあらすじ

localdb から MariaDB に移行し、データベースの様々な設定を行いました。そして文献管理システムと接続し、無事にローカルホストで実行することができました。

2. 今回の目標

ローカルホストでできたのはいいのですが、せっかくなのでホスト側からゲスト側 (Windows から CentOS) へ接続できるように色々設定していきます。今回で最終回の予定です。

3. Apacheの導入と設定

Apache は Web サーバを立てることができるツールです。まずはインストールします。

sudo yum install httpd

次にサーバを立てるアドレスとポート番号を指定します。IP アドレスを 0.0.0.0 にするとワイルドカードになり、CentOS 側の IP アドレスに従って変更されます。また、ポート番号はウェルノウンポートを避けて 8000 番にしています。
Apache の設定ファイルは /etc/httpd/conf/httpd.conf にあります。設定ファイルを次のように編集します。

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#
#<Directory />
 #   AllowOverride none ここはコメントアウト
 #   Require all denied ここもコメントアウト
#</Directory>
    ProxyPreserveHost On  
    ProxyPass / http://0.0.0.0:8000/
    ProxyPassReverse / http://0.0.0.0:8000/

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.

Apache にリバースプロキシを設定しました。なぜ必要なのかというと、dotnet の仕様だからです。詳しくは Microsoft のドキュメントを読んでください。

docs.microsoft.com

また、リバースプロキシについての説明はここが分かりやすいので参考にしてみてください。 https://wa3.i-3-i.info/word1755.html
要するに dotnet のセキュリティ対策に身代わりサーバを立てるのだと思います。

4. CentOSの諸設定

IPアドレスファイアウォールの設定を行います。

4.1 静的IPアドレスの設定

私は GUI で設定を行いました。GUI で設定するとこんな感じです。 f:id:takunology:20190623145900p:plain

CLI で設定する場合は

nmtui

と入力して "接続の編集" を選択します。そして "Ethernet" の欄にあるアダプタ (私の場合は "ens33" ) を選択し、ここにIPアドレスサブネットマスクなどを設定します。 f:id:takunology:20190623150524p:plain

デフォルトゲートウェイは仮想環境が提供しているアダプタのIPアドレスを調べてください。おそらくホスト側のネットワークアダプタを調べれば出てくると思います。VMware だと 192.168.XXX.2 とかになっていると思います。設定出来たらネットワークサービスを再起動します。

sutdo systemctl restart network

4.2 ファイアウォールの無効化

ファイアウォールが設定されたままになっていると、外部からの接続をブロックされてしまうので無効化します。設定は2つあります。
まずは SELinux を無効化します。/etc/selinux/config にて

SELINUX=disabled

と設定します。続いて、システムのファイアウォールサービスを無効化します。

sudo systemctl disable firewalld

これでファイアウォール系統を無効化できました。設定を反映するためにシステムを再起動 (reboot) してください。

5. 文献管理システムの設定

Program.cs を開きます。デフォルトでは画像のようになっています。 f:id:takunology:20190623151642p:plain

ここに次の内容で編集します。

WebHost.CreateDefaultBuilder(args)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseUrls("http://*:8000/")
                .UseStartup<Startup>(); 

追記した結果はこちらになります。 f:id:takunology:20190623152047p:plain

この設定は Apache と同じように、ワイルドカードとポート番号を合わせています。ここまで設定出来ればあとはリビルドするだけです。

6. 外部からの接続

ここは実際に動作している様子を動画でご覧いただこうと思います。このように動いていれば完成です!


ASP.NET Core 2.1 を用いた文献管理システム

7. まとめ

文献管理システムを外部から接続できるようになり、運用できるようになりました!
ここまで参考にしていただいた方、ありがとうございました。 このシリーズは一旦完結として、何か追加事項があれば更新したいと思います。
最後に、私の作成したソースコードを載せておきます。参考にしてみてください。

github.com


お疲れさまでした!