36
@rawr

C#(ASP.NET core)でWeb APIを作ってみる(IISデプロイ編)

はじめに

前回は、ASP.NET core 2.1でHello World的なAPIを作った後、ローカルPCにあるVisual Studio上でデバッグ実行するところまでやりました。今回はそれをIIS上にデプロイして動かす手順になります。

なおWindows Serverの画面ですが、とある事情により日本語言語パックが当たらず、英語のままになっています。記事の中では日本訳も書きますが、分かりにくくなってすみません。

目次

準備するもの

  • Windows Server 2016
    • ここにIISをインストールします。
  • デプロイするWeb API
    • 前回作った Todo APIをデプロイします。

IISをインストールする

(1) Windows Serverのスタートメニューから「サーバーマネージャー(Server Manager)」を起動して、「役割と機能の追加(Add roles and futures)」を選択します。
2018-11-05_102747.png

(2) 開始する前に(Before yo begin)の画面は、そのまま「次へ(Next)」を押します。
2018-11-05_102802.png

(3) インストールの種類(Select installation type)では、IISは役割・機能なので、「役割ベースまたは機能ベースのインストール(Role-baseed or feature-based installation)」を選択します。
2018-11-05_102815.png

(4) 対象サーバーの選択(Select distination server)では、インストール先のサーバーを選択しますた、当然デフォルトの、ローカルホストにします。
2018-11-05_102854.png

(5) サーバーの役割の選択(Select server roles)では、「Webサーバー(IIS)」を選択します。「必要な機能を選択しますか?」というダイアログが出ますが、そのまま「機能の追加」を押してください。
2018-11-05_102935.png

(6) 機能の選択(Select features)では、「ASP.NET 4.6」を選択します。
2018-11-05_103037.png

(7) Webサーバーの役割(Web Server Role(IIS))は、説明だけなので、そのまま「次へ(Next)」。
2018-11-05_103215.png

(8) 役割サービスの選択(Select role Services)は、

  • 「アプリケーション開発(Application Development)」>「ASP.NET 4.6」にチェックする(続いて「必要な機能を追加しますか?」のダイアログが出ますが、そのまま「機能の追加」を押す)
  • 「管理ツール(Management Tools)」>「管理サービス(Management Service)」にチェックする(これを入れないとWebデプロイができない
  • (必須ではないが)「Common HTTP Features」>「Directory Browsing」のチェックを外しておく。コンテンツが無いときに、フォルダの中身一覧が表示されるのは、セキュリティ的にあまりよくない。 2018-11-05_103337.png 2018-11-05_103411.png 2018-11-05_103444.png

(9) 最後に、確認画面が出るので、「必要に応じて対象サーバーを自動的に再起動する(Restart the destination server automatically if required)」にチェック入れて(多分再起動はしないが)、「インストール(Install)」を押す。
2018-11-05_103508.png

(10) インストールが終わるまで待つ
2018-11-05_103528.png

IISをデプロイ可能にする

IISをインストールするだけでは、まだデプロイ可能になっていないので、デプロイができるようにいろいろ設定が必要になります。

Web Deployをインストールする

これを入れないと、IISサーバー上で「Web配置による発行の有効化」がメニューに出てきません。

(1) Web Deployのインストーラーをダウンロードする。
Microsoftのダウンロードページ からインストーラーをダウンロードします。

(2) Web Deployをインストールする。「完全」でインストールする。
2018-11-05_135914.png

Microsoft Visual C++ 2015 再領布可能パッケージを入れる(必要に応じて)(必須だった)

自己完結型の.NET coreアプリケーションを動かす場合は、このパッケージを入れないといけないそうです。
次のバンドルを入れるために、必須みたいです。

Microsoftのダウンロードページから、Japanese(日本語)を選択してダウンロードし、ダブルクリックでインストールできます。

.NET Core ホスティング バンドルのインストール

Microsoftのチュートリアルページっぽいところから、インストーラーをダウンロードし、ダブルクリックでインストールします。なぜこんなことをしないといけないのかは分かりませんが、これをやらないと500エラーが出続け、かつログも出ずに路頭に迷います。
2018-11-19_231508.png

mmcを設定しておく(必須ではない)

今後IISの設定をいじっていくので、いちいちServer Managerから操作するより、Microsoft管理コンソール(mmc)を作っておいたほうがよいでしょう。

(1) Microsoft管理コンソール(mmc)にスナップインしておく。
プログラムとファイルの検索(もしくはWindowsキー+R)でmmcと入力します。
2018-11-05_155320.png

(2) mmcを起動したら、「ファイル」>「スナップインの追加と削除(Add/Remove Snap-in)」を選択する。
2018-11-05_155423.png

(3) 画面がひどく小さいですが、「インターネットインフォーメーションサービス(Internet Information Service)」を選択し、「追加(Add)」で右側ペインに加える。
2018-11-05_155617.png

(4) mmcを適当な名前で保存する。
2018-11-05_160314.png

IISデプロイ用ユーザーを作る

(1) mmcから、インターネットインフォメーションサービス(IIS)マネージャーを選択すると、真ん中ペインにWindowsサーバーのマシン名が出るのでこれを選択し、「管理(Management)」から「IISマネージャーユーザー(IIS Manager Users)」を選択する。
2018-11-05_160453.png

(2) 右クリック>「ユーザーの追加(Add User)」。もしくは右ペインから「ユーザーの追加(Add User)」。
2018-11-05_160824.png

(3) デプロイ用のユーザーを適当に作る。
このユーザーはOSのユーザーとは別です(Active Directoryにいる必要もない)。IDとパスワードは何でもいいです。ただし、今後デプロイに使うので、忘れないように!
2018-11-05_160947.png

デプロイの有効化

(1) mmcを起動し、インターネットインフォメーションサービス(IIS)マネージャーから、(マシン名)>「サイト」>「Default Web Site」を右クリックし、「展開(Deploy)」>「Web配置による発行の有効化(Configure Web Deploy Publishing)」を選択する。
2018-11-05_161647.png

(2) 設定をする。

  • 「発行アクセス許可を付与するユーザーを選択します(Select a user to give publishing permissions)」は、右側の「...」を押し、IISマネージャーを選択して、先ほど作成したデプロイ用ユーザー:iisdeploy を入力します(あるいは右の「選択」ボタンから iisdeploy を選択します)。 2018-11-05_162919.png
  • 「発行に使用するSQL Server接続文字列を入力します(Enter SQL Server connection string to be used for publishing)」と「発行に使用するMySQL接続文字列を入力します(Enter MySQL connection string to be used for publishing)」は、使用しないので、空白のまま。
  • 「発行サーバーに接続するためにURLを指定します(Specify the URL for the publishing server connection)」は、Visual Studioからリモートでデプロイのときに使用するURLで、今回使用するので控えておきます。ホスト名はWindows ServerにアクセスできるURLなら何でも良いのですが、ここではIPアドレスを直書きにしています。ポート番号は変えても良いですが、ここではデフォルトのまま(8172)にしておきます。
  • 「発行の設定ファイルの保存先を指定します(Specify a location to save the publish settings file)」は、この設定の保存先です。適当に設定してます(デフォルトはデスクトップ)。 2018-11-05_162950.png

(3) 「セットアップ(Set up)」を押すと設定されるので、「閉じる(Close)」でこの画面を閉じます。

IISにVisual Studioからデプロイする

(1) Visual Studio上の、プロジェクトを、右クリック>「発行...」を選択します。
2018-11-18_112535.png

(2) 発行先は、「IIS、FTP、その他」を選択します。
2018-11-18_112556.png

(3) 接続では、先ほど「デプロイの有効化」で設定したIISの接続情報を入力します。

  • 「発行方法」は、「Web配置」。
  • 「サーバー」は、発行を受け付けるURLで、先ほど「デプロイの有効化」で設定した「発行サーバーに接続するためにURLを指定します(Specify the URL for the publishing server connection)」の値を入力します。
  • 「サイト名」とは、IISの「サイト(Sites)」のことです。ここでは、デフォルトで作られている「Default Web Site」を指定することにします。この項目では、「Default Web Site/todo」のようにパスで入力できますが、パスを入れると、複数のアプリケーションを同一サイト(Sites)にいれることができますが、URLが http://172.26.22.44/todo/api/~ のように、コンテキストパスが入ります。
  • 「ユーザー名」と「パスワード」は、「IISデプロイ用ユーザーを作る」で作ったユーザーを入力します。
  • 「宛て先URL」は、(多分)APIのクライアントがアクセスするURLです。 2018-11-23_221310.png

(4) 全部入力したら、「接続の検証」を押して接続テストをします。証明書検証エラーの画面がでますが、(多分正規の証明書は入れられないので)「承諾」を押してください。(画像紛失しました、すみません)

(5) 設定では、

  • 「構成」は、Debug/Release を目的に応じて設定する。
  • 「ターゲットフレームワーク」は、当然「netcoreapp2.1」。
  • 「配置モード」はどちらでもいいです。この記事では、動作に必要なファイルをすべてデプロイする「自己完結」にしています。「自己完結」にすると、フォルダごと別のIISへ引っ越せますが、デプロイするファイル数が多くなり時間が掛かります。「フレームワーク依存」にすると、デプロイするファイル数は少ないですが、ライブラリのバージョンなど、動作しているIISの環境に依存することになります。
  • 「ターゲットランタイム」は、デプロイするAPIの実行環境で、今回はWindows 64bitなIISなので、「win-x64」を選択しておきます。
  • 「ファイル発行オプション」は適当に。この記事では、すべてデフォルトのままです。 2018-11-23_221518.png

上記以外の設定(必要に応じて)

必要最小限の設定はこれで全部なのですが、環境によってはもう少し設定が必要な場合があります。思いつく部分だけ書いておきます。

  • デプロイ用ポート 8174 にアクセスできるようにしておく
    • リモートデプロイするとき(設定によるが、デフォルトでは)8174ポートを使うので、WindowsサーバーのWindows FirewallやAWSのセキュリティグループで穴あけしておく必要があります。

試す

長かったですが、これで全部です。ブラウザや curl でアクセスしてみましょう。GETだけ試すことにします。
※ブラウザでアクセスした画像のIPアドレスが違っていますが、気にしないでください)
2018-11-23_222016.png

> curl -D - -X GET "http://172.26.22.25/api/todo"
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Kestrel
X-Powered-By: ASP.NET
Date: Fri, 23 Nov 2018 13:19:14 GMT

[{"id":1,"name":"犬の散歩","isDone":false},{"id":2,"name":"買い物","isDone":true},{"id":3,"name":"本棚の修理","isDone":false}]

まとめ

この記事では、デプロイ(発行)先のサイトを Default Web Site にしてしまいましたが、この設定にするとデプロイするファイルが C:\inetpub\wwwroot 直下に配置してしまうので、別のサイトを作った方が良いかもしれません。

いずれにせよ、手順多すぎです…

参考文献、サイト

36
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
rawr
nri
NRIは「コンサルティング」「金融 ITソリューション」「産業 ITソリューション」「IT 基盤サービス」の4事業でお客様のビジネスや快適な社会、暮らしを支えています。※各記事の内容は個人の見解であり、所属する組織の公式見解ではありません。
この記事は以下の記事からリンクされています

コメント

大変有益な手順公開ありがとうございます、非常に参考にさせていただいております。
私の未熟な環境にて、1点だけ、つまづきがあり他サイト様から解決策をいただきましたので、共有できればと思い投稿します。(接続の検証はOKで、その後詰まる事象です。)
[WebDeployに失敗する際の解決策]
https://yigao.jp/technology/windowsserver/12/

私はWinServer2012R2の遠隔実機にて発生しました。

0
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
こんなことまで!?ブラウザでできること選手権
~
DirectCloud-BOX のAPI連携により広がるファイル共有・活用の可能性 - 開発~利用までの期間短縮、業務の効率化を実現しよう!
~