asp.net coreでサービス作ったから宣伝兼ねて技術公開する -3_2.環境設定(AP) その１-

##APサーバへの環境設計

今回の要件に必要な環境は次のとおりです。
・Webサーバ機能（HTTP）
・ASP.NET Core 2.2 Runtime
・Google Cloud Platform
・その他

基本的にはググってインストールして検証（この際にコマンドを全て保存しておく）
→うまく行かなかったらOSごと再インストールして、コマンドを流し直すを何度も繰り返して、最適な環境設定を試みました。


##1.Webサーバ機能（HTTP）インストール

参考サイト：
CentOS7最小インストールからHTTP接続が接続できるまで
https://qiita.com/tamamius/items/448c350ca34e4db9f6f5
Win上でビルドした.NET Core Webアプリを、CentOS7で実行するまでの最短環境構築 （CentOS事前準備編）
https://qiita.com/miyapei/items/8a6caaf4f8121e4f0830

当たり前すぎるのですが、コマンドメモ：

```ap_cmd-1.bat
### インストールコマンド
yum install httpd -y

### 起動
systemctl start httpd

### 停止
systemctl stop httpd

### 再起動
systemctl restart httpd

### 自動起動有効化
systemctl enable httpd

### 確認
systemctl status httpd
```


##2.ASP.NET Core 2.2 インストール

参考サイト：
Win上でビルドした.NET Core Webアプリを、CentOS7で実行するまでの最短環境構築 （CentOS事前準備編）
https://qiita.com/miyapei/items/8a6caaf4f8121e4f0830
CentOS 7 パッケージ マネージャー - .NET Core をインストールする
https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-package-manager-centos7
CentOS7で始めるASP.NET Core 2.x
https://qiita.com/toryuneko/items/73c2880f63d92d7d4343


Runtimeだけインストールしようとしていたんですが、なんだかんだSDKまでインストールしないとうまく動きませんでした。

```ap_cmd-2.bat
###Runtimeインストール
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
yum update
yum install aspnetcore-runtime-2.2

###DotNet SDKインストール
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
yum update
yum install dotnet-sdk-2.1
```

これで、ASP.NET Core 2.2モジュールが実行できます。

##3.プロジェクトから実行モジュールを作成します

参考サイト：
ASP.NET Core のホストと展開
https://docs.microsoft.com/ja-jp/aspnet/core/host-and-deploy/?view=aspnetcore-2.2
dotnet publish
https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-publish



[Microsoft Visual Studio]の[パッケージマネージャー コンソール]からCentOS向けに出力できるコマンドがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249830/b78ccb0f-3a8d-1537-e908-4d38a91b5a95.png)

```ap_cmd-3.bat

各パッケージのライセンスは、パッケージの所有者からパッケージのユーザーに付与されます。NuGet は、サードパーティのパッケージに対して一切責任を負わず、いかなるライセンスも付与しません。パッケージに含まれている依存関係に対して追加のライセンスが適用されることがあります。依存関係を確認するには、パッケージ ソース (フィード) URL にアクセスしてください。

パッケージ マネージャー コンソール ホストのバージョン 4.9.3.5777

利用可能なすべての NuGet コマンドを参照するには、'get-help NuGet' を入力します。

PM> dotnet publish --runtime centos.7-x64
.NET Core 向け Microsoft (R) Build Engine バージョン 16.0.385-preview+g966cdf2ac6
Copyright (C) Microsoft Corporation.All rights reserved.

  C:\Users\kinjo\source\repos\TanaToru\TanaToru\TanaToru.csproj のパッケージを復元しています...
  MSBuild ファイル C:\Users\kinjo\source\repos\TanaToru\TanaToru\obj\TanaToru.csproj.nuget.g.props を生成しています。
  MSBuild ファイル C:\Users\kinjo\source\repos\TanaToru\TanaToru\obj\TanaToru.csproj.nuget.g.targets を生成しています。
  C:\Users\kinjo\source\repos\TanaToru\TanaToru\TanaToru.csproj の復元が 1.75 sec で完了しました。
C:\Program Files\dotnet\sdk\3.0.100-preview-010184\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(151,5): message NETSDK1057: プレビュー版の .NET Core を使用しています。https://aka.ms/dotnet-core-preview をご覧ください [C:\Users\kinjo\source\repos\TanaToru\TanaToru\TanaToru.csproj]
Controllers\ToolController.cs(138,20): warning CS0219: 変数 's_sp' は割り当てられていますが、その値は使用されていません。 [C:\Users\kinjo\source\repos\TanaToru\TanaToru\TanaToru.csproj]
  TanaToru -> C:\Users\kinjo\source\repos\TanaToru\TanaToru\bin\Debug\netcoreapp2.2\centos.7-x64\TanaToru.dll
  TanaToru -> C:\Users\kinjo\source\repos\TanaToru\TanaToru\bin\Debug\netcoreapp2.2\centos.7-x64\TanaToru.Views.dll
  TanaToru -> C:\Users\kinjo\source\repos\TanaToru\TanaToru\bin\Debug\netcoreapp2.2\centos.7-x64\publish\
PM> 
```

これで、centos向けのモジュールが作成できました。

WinSCP等でアップロードします。
ほんとはGitから、Jenkinsから・・・とか出来ればスマートなのは分かっているのですが、それはまたいつか。


##4.作成したモジュールのデプロイ確認
参考サイト：
Win上でビルドした.NET Core Webアプリを、CentOS7で実行するまでの最短環境構築 （開発デプロイ編）
https://qiita.com/miyapei/items/28f1b7360614551e7f15


ということで、実際に実行してみましょう。
この時点では、ポートはプロジェクト上の[Program.cs]に設定されているポートで動作します。
必要に応じてfirewallを制御してください。

```ap_cmd-4.bat
dotnet /home/apache/xxx/TanaToru.dll
```

これで、エラーが出なければ、OKです。


##5.モジュールのサービス登録
参考サイト：
Win上でビルドした.NET Core Webアプリを、CentOS7で実行するまでの最短環境構築 （開発デプロイ編）
https://qiita.com/miyapei/items/28f1b7360614551e7f15


そのままサービス登録まで行います。

```ap_cmd-5.bat
vi /etc/systemd/system/TanaToru.service

[Unit]
Description=TanaToru Prod running...

[Service]
WorkingDirectory=/root/app/xxx/TanaToru
ExecStart=/usr/bin/dotnet /root/app/xxx/TanaToru/TanaToru.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=3
SyslogIdentifier=dotnet-tanatoru-prod
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

```
##6.ファイアウォール設定
参考サイト：
Win上でビルドした.NET Core Webアプリを、CentOS7で実行するまでの最短環境構築 （CentOS事前準備編）
https://qiita.com/miyapei/items/8a6caaf4f8121e4f0830
【すぐわかる】CentOSのポート開放のやり方
https://eng-entrance.com/linux-centos-port


APサーバでは、HTTP(80),HTTPS(443)しか開けておりません。
自宅からデプロイとか、サービス再起動とかするわけですが、その際に使うポートだけ開けるような運用をしております。

```ap_cmd-6_1.bat
firewall-cmd --add-service=http  --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --reload
```


自宅からのポートを開けるときはこんな手順：
1.自宅のグローバルIPアドレスを確認（※ 固定IPを取っていないので、すぐ変わる）
https://www.cman.jp/network/support/go_access.cgi

2.ブラウザ上から、ConoHaサーバコンソールを起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249830/01d40bc5-3a27-2e7f-12bc-d4e547fd4ec5.png)

3.firewallを貼り付けて実行

```ap_cmd-6_2.bat
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="126.15.213.365" port port="22" protocol="tcp" accept"
```

4.ブラウザ上からポートを開けて自宅からputty,WinSCPでアクセス

5.Cronへのfirewallのreloadを登録
[3]で実行したコマンドは、[--permanent]オプションを付加しておりませんので、reloadすると設定は消えてなくなります。
忘れてもいいように、Cronへ登録しておくと安心安全です。



----

その２へ続きます。



【是非お試しください】※完全無料です
TanaToru -本棚管理サービス-
　https://app.zero-one-system.co.jp/TanaToru/