BlazorをIISにホストするまで　～SQLiteは移行できない～

# この記事は

下記の記事のつづきで、**つくったBlazorアプリをローカルIISにホストする**までを記す

- [【Blazor Hosted】SQLiteからAPIでデータ取得時につまづいた【.NET 5】](https://qiita.com/t13801206/items/db2d99693acdf0f0a6b0)
- [BlazorとSQL Serverをdocker-composeで立ち上げる](https://qiita.com/t13801206/items/61cfae2901dea19dac9b)

:::note warn
この記事で書かれていることを安易に本番環境で行うことはキケンです
:::

最後、おまけでホストしたサイトにiPhoneからアクセスする

# IISを有効化

コントロールパネルから「Windowsの機能の有効化」をする

~~本当にどれが必要なものかわからないので（！）~~、.NET5 Blazorで関連しそうなものを入れておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/200199f1-a7fd-e461-fdfb-3f7925f0919d.png)

参考：[Windows 10 での IIS および必要な IIS コンポーネントの有効化](https://enterprise.arcgis.com/ja/web-adaptor/latest/install/iis/enable-iis-10-components-server.htm)

## IISを再起動

管理者権限で`cmd.exe`を起動して、`iisreset`を実行する

```
C:\WINDOWS\system32>iisreset

停止中...
インターネット サービスは正常に停止されました
開始中...
インターネット サービスは正常に再開されました
```

# アプリを配置する物理パス（空のフォルダ）をつくる

Dドライブに空のフォルダをつくる

`"D:\IIS\Blazor Site"`

# ウェブサイトを追加する

IISマネージャーを開き、Webサイトを追加する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/87a1647f-59ed-778d-40f2-060fc1266f83.png)

任意のサイト名を入力し、物理パスには先ほどつくった空のフォルダーを指定する

ポートは8000や8080など、それっぽい番号にしておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/885b8f49-7ff7-67aa-234c-d07d4279aa02.png)

追加されたあとの様子

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/69567cd3-6259-4550-af98-b6b0403f6a0a.png)

# サーバープロジェクトを発行する

Visual Studioでサーバープロジェクトを「発行」する

:::note info
発行を行うときはVisual Studioを管理者権限で開く必要がある
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/7abb65e5-689a-322c-1bdc-41652cf987cb.png)

サーバープロジェクトを右クリックして、発行(B)を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/42d576d9-05ae-3eb3-2014-6fd9a2874e58.png)

## 接続

サーバーは`localhost`を入力する

`Site name:`には。あらかじめIISでつくっておいたWebサイトの名前を入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/fa373ef7-54b2-27ef-d38f-d7437759ad24.png)

## 設定

EFCoreの`DbContext`も自動的に検出してくれるけれども
デフォルトだとプルダウンメニューの1番上が選択されているっぽいので
**適切な接続文字列を自分で選択し直す**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/bdf27821-ca18-691c-adc4-9f605ca02d4a.png)

参考：[Blazor WebAssembly で作成したアプリを IIS に配置する](https://sorceryforce.net/ja/tips/blazor-web-assembly-iis-deploy)

## 発行

3つのプロジェクトがReleaseビルドされる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/0273a97e-351f-a8bb-1ce7-9ac525a736f2.png)

### SQLiteの移行が原因で失敗

> Generating idempotent scripts for migration is not currently supported by SQLite. For more information,

SQLiteは本番環境へのマイグレーションをサポートしてないらしい

`.db`ファイルは手元にあるので、マイグレーションは不要と考え、移行のチェックを外して再発行する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/6821b265-b07a-1b89-81ef-0f542e116614.png)

https://github.com/dotnet/efcore/issues/2394

### 成功

移行のチェックを外して成功した

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/0127c5a0-3543-6a70-01c1-95c40f36fd55.png)


## 発行後のIISマネージャー

フォルダがたくさん追加されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/58c85a1e-de14-fdb8-fd76-16cf6c05f56f.png)

## `localhost:8000`にアクセスする

見覚えがあるいつものサイトが表示された🙌

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/4d82948f-794e-6c40-0245-61f64456cf96.png)

# だがしかし、DBにアクセスできない！

APIをたたくとこんなページが↓↓

もっとよく知りたきゃ開発者モードでアクセスしてきなさい、とのこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/c4f0fbf4-6a4b-b6cb-be6b-26f4e2344f36.png)


## 構成を`Development`にする

IISマネージャーの構成エディターを開き、セクションプルダウンから`aspNetCore`を選択する

`environmentVariable `の`ASPNETCORE_ENVIRONMENT`キーの値を`Development`にする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/089718e5-738d-17c3-2179-7a486038913d.png)

## SQLiteのエラーメッセージ

「TodoItemsなんてテーブル存在しませんよ」とのこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/bcc3b9ff-98bd-90a2-b46f-143d9aef9be4.png)

発行先（`"D:\IIS\Blazor Site"`）には確かに`.db`ファイルがあるけれども、**移行していないから中身が空っぽだった**😂

（DBブラウザで中身をみたら、やっぱり空っぽだった）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/c6e61c13-088a-eb89-2eb2-d1fa4f3481e3.png)

### 開発中につかっていた`.db`で上書きする

プロジェクトのフォルダーから`.db`をコピーして、ホストしたフォルダーにペーストするだけ

無事、ToDoリストが表示された🙌

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/18517b8d-0c90-33c8-1bc6-cb15846f9f5c.png)

SQLiteのデータベースファイルと同様に、たとえばCSVファイルなんかもコピペでIISホストディレクトリに置きなおせるから、いろいろ簡単

# おわりに

サーバーレス時代、AzureかAWSのアカウント取得してやれって話

# おまけ（iPhoneからの接続）

ファイヤーウォールの「受信の規則」から8000ポートを開放して
iPhoneから`ローカルIPアドレス:8000`にアクセスしたときのようす

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/0271818d-b980-e845-b4c2-28e7cc5fc565.png)