ASP.Net6のAPIをIISサーバへデプロイする

# 1. はじめに
* Visual Stuidoで開発したAPIをIISサーバで動くようにしたい
* Windows Server 2022を1から環境設定したい

# 2. 開発環境
* Windows Server 2022
* Visual Studio 2022
* ASP.NET 6

# 3. IISサーバのインストール
## 3.1. サーバー マネージャーを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/4a1c550b-7983-4576-6459-d9f024698255.png)

## 3.2. [役割と機能の追加]のリンクをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/0a15a9ff-7058-b4c8-5e24-a343d72b732e.png)

## 3.3. [次へ]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c2d0c885-2a76-6e70-f749-2a4039096c41.png)

## 3.4. [役割ベースまたは機能ベースのインストール]を選択してクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/8ac65045-e13c-832e-72f4-a310b47e497e.png)

## 3.5. [サーバープールからサーバを選択]を選択してクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/2d17736e-ecc4-f0b2-6942-b58fef27c867.png)

## 3.6. [Web サーバー (IIS)] をチェックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/4f8f0e9b-8dba-c643-2ed4-5e6f59a875e0.png)

## 3.7. [機能の追加]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/8de8ddac-8469-4579-738b-77c291908e34.png)

## 3.8. [Web サーバー (IIS)] にチェックがあることを確認して[次へ]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/ceb2395a-b2b6-24a1-20e6-b7dc9242980b.png)

## 3.9. [次へ]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/abff0fc1-3694-f160-4ce7-7b3c13b7db9f.png)

## 3.10. [アプリケーション開発]をチェックして、[次へ]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/75849627-bd09-71b4-2832-91393c657519.png)

* 追記：上記だけだとうまく動作しなかったので詳細を記載する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/f58b859d-435c-e71c-7da7-4d7f33336a9f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/4880534b-b9ae-06c3-068f-85884ddf86fa.png)

## 3.11. [インストール]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/36cf3313-b0cf-e957-473c-578834ac488a.png)

## 3.12.[閉じる]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/5b45e43a-c264-5fcd-0ce2-690703928f10.png)

## 3.13. インストールを確認する
* IISマネージャーを起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d5dd7b37-3464-2794-77c0-897787a9884a.png)

* 左サイドに[サイト] > [Default Web Site]があることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/8b3399eb-324e-0d4a-cb46-bcd2739f013a.png)


# 4. ASP.NET Core 6 Windows Hosting Bundleのインストール
## 4.1 Micosoft .NET6のダウンロードページを開く
https://dotnet.microsoft.com/en-us/download/dotnet/6.0

## 4.2 [ASP.NET Core Runtime 6.0.14] > [Windows] > [Hosting Bundle]をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/585307e2-4e69-5507-fa5d-f9fefee60d6e.png)

## 4.3. インストーラーをダウンロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/60c69bd5-67f5-cb81-0aba-6a4f9328a082.png)

## 4.4. ダウンロードしたインストーラーを起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/31307aea-49b0-c3c6-7a36-1bb9f08de1ee.png)

## 4.5. [同意]にチェックして[インストール]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/eaff37cf-faf8-8a05-90e2-c37dfb17ad38.png)

## 4.6. [閉じる]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d3aa825e-4380-0a41-fb15-92cb553d78f6.png)

## 4.7. インストールを確認する
* Windows PowerShellを起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c65c6a27-a7ea-45f1-eb07-680301cac005.png)

* ```dotnet --list-runtimes```を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/934bd262-527e-774a-e2b7-4839b6ef48e6.png)

# 5. APIアプリケーションの発行
## 5.1. Visual Studio 2022を起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/a28cfdc4-3e0e-4397-cb50-ccc2f1f0335e.png)

## 5.2. プロジェクトを右クリックして[発行]をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/31de5ee0-0334-9c0a-f283-a674d6874050.png)

## 5.3. 今回は手動でデプロイするため[フォルダー]を選択して[次へ]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/6f235aab-ed44-63e7-10d1-5279a940bb4e.png)

## 5.4. 任意のフォルダを指定して[完了]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/fbfe5e71-1838-359e-d03e-0ff48bf8a453.png)

## 5.5. 実行プロファイル作成が完了したことを確認して[閉じる]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/5746c389-3249-b9c0-13a3-0206236a2156.png)

## 5.6. 画面右上の[発行]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c40217f6-ecaf-7d9f-8faa-8f3913785d83.png)

## 5.7. ビルドが完成したことを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/be4389db-d13c-4862-72b4-b73771a95032.png)

## 6. アプリケーションプールの作成
## 6.1. IISマネージャーから[アプリケーションプール]を右クリックして[アプリケーションプールの追加]を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/77ae827d-7d82-526d-7941-0f6f71afdb5f.png)

## 6.2. 任意の名前を付けて[OK]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/e1c625ba-c0aa-5918-aaf4-d3b6e6b7f6c4.png)

## 6.3. 一覧で作成されていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/20237722-dabd-2636-9de0-9a59ecaed972.png)

# 7. IISサーバへのデプロイ
## 7.1. c:\inetpub配下に任意のフォルダを作成しコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/7c5fb750-65d1-20a6-6a95-e08f4e7b0a8d.png)

## 7.2. [アプリケーションへの変換]を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/76059edf-7854-c766-61d5-fc17471c2ed2.png)

## 7.3. [選択]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/ce9e06b3-8a2e-9eb9-5894-f6959056bda2.png)

## 7.4. 作成したアプリケーションプールを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/2f2689f7-fab9-487a-cba4-800956605fde.png)

## 7.5. [OK]ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/28b83d91-e2e1-6ad5-d45a-28deb3443776.png)

## 7.6. 設定完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/295661ff-37ad-653c-6540-a4013e46ebd3.png)

# 8. 動作確認
* サンプルのAPIが動いた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/426d6c3a-526b-ae38-0a96-46cbbd440a34.png)


# 9. トラブルシューティング
## 9.1. ```HTTP Error 500.19 - Internal Server Error```、```HTTP Error 500.31 - Failed to load ASP.NET Core runtime```が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c8e7fa99-eed4-18b7-e8bd-218dda710751.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/9136c51b-0e7e-e513-f924-30a152d39607.png)
＜解決方法＞
* .NETの不足しているSDKのバージョンを下記サイトよりインストールする

https://dotnet.microsoft.com/ja-jp/download/dotnet

* コマンドプロンプトから```dotnet --info```を実行して、開発環境、サーバー環境で比較して調査する

## 9.2. ```HTTP Error 503. The service is unavailable```が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/06749321-25f0-a7ba-3a0e-129d9b332d71.png)
＜解決方法＞
* アプリケーションプールが停止されているため開始済にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/20237722-dabd-2636-9de0-9a59ecaed972.png)

# 10. 参考文献
https://www.ipentec.com/document/windows-server-2019-install-iis

https://www.ipentec.com/document/windows-server-install-asp-dotnet-core-6-runtime-windows-hosting-bundle

https://www.ipentec.com/document/windows-server-iis-create-application-pool-for-asp-net-core-application

https://www.ipentec.com/document/csharp-deploy-asp-net-6-web-application-to-iis

https://code-maze.com/aspnetcore-solve-http-error-500-31-failed-to-load-runtime-error/

https://stackoverflow.com/questions/9216158/iis-500-19-with-0x80070005-the-requested-page-cannot-be-accessed-because-the-rel#14448906

https://implus-jp.blogspot.com/2020/07/503-service-unavailable.html