Win上でビルドした.NET Core Webアプリを、CentOS7で実行するまでの最短環境構築 （CentOS事前準備編）

# なにする
CentOS7 minimal インストールの状態から、

- 開発はWindowsで行って
- CentOS上ではビルドせず、実行のみ行う

ための環境構築および手順。（最低限に絞りました。）

### もうちょい細かく
- Windows10 上の VSCode で .NET Core 2.1 Webアプリ を開発してビルド
- それを CentOS7 に samba で（エクスプローラで）アップ
- CentOS 上では実行のみを行い、Apache 2.4 経由で公開する

ための環境構築および手順。


# 初期環境
- Windows 10
- CentOS Linux release 7.5.1804（minimal インストール）

### 最終的にこういう構成になります
- Windows 10
    - VSCode (Visual Studio Code)
    - .NET Core 2.1 SDK

- CentOS Linux release 7.5.1804（minimal インストール）
    - Apache 2.4
    - samba
    - .NET Core 2.1 ランタイム


# はじめに
CentOS 7 minimal インストールの状態から、
Apache とsamba、.NET Coreランタイムを入れるまでのCentOS事前準備編です。
（要するにインフラ担当部分に相当）
※ ちなみにCentOS7 + Apache 環境がすでにあるなら、最後のランタイムのインストール（3行）だけでOKです。

開発環境の準備～デプロイまではこちら
https://qiita.com/miyapei/items/28f1b7360614551e7f15



# CentOS 事前準備編 はじめます！
## SELinuxについて
何もない状態からなら、まずは一通り動く状態にしてから設定したほうが楽だと思います。
\# べ、別に面倒くさいとかややこしいとか、そんなんじゃないんだからね…

…というわけで無効化（異論は認める。すまんな…）

```bash
vi /etc/selinux/config
### SELINUX=disabled にします
reboot

### 起動後再接続したのち、Disabledになっているか確認
getenforce
```

## Apache

### インストール

```bash
### インストール
yum install httpd -y

### 起動
systemctl start httpd

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

### 確認
systemctl status httpd
```

### ファイアウォールの設定
httpを許可します（最初なのでちょっと細かく書いておきます）

```bash
### 今動いてる？
systemctl status firewalld

### 今のzoneを確認
firewall-cmd --get-default-zone
```

> public

```bash
### publicのzoneにhttpを恒久的に追加
firewall-cmd --add-service=http --zone=public --permanent

### 反映
firewall-cmd --reload

### 確認
firewall-cmd --list-all-zones | less
```
ブラウザからアクセスしてデフォルトページ見えたらOK

### （今回必要ないけど一応バーチャルホストの仮設定も参考までに書いときます）
sambaでapacheユーザ流用して色々アップするみたいな想定で
ホームディレクトリ以下にドキュメントルート設定するよ
（この段階ではまだディレクトリも何も無いよ）

```bash
vi /etc/httpd/conf.d/vhost.conf
```

```text:/etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
        ServerName 192.168.0.123
        DocumentRoot /home/apache/vhost
        <Directory "/home/apache/vhost">
                Require all granted
        </Directory>
</VirtualHost>
```

## samba
### …の前に、hostnameを設定しておきます

```bash
hostname dev123
```
適当な名前でOK。
何故これが必要かというと、サーバのhostnameが初期状態のlocalhost.localdomainだと、
sambaでそもそも書き込めないか、グループ権限などで書き込めるようにしても変な動作になります。
（ディレクトリ1回の作成で4つできたりとかした…）
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/410cantacssamba.html

もしユーザ作成してしまった後に変更しても、
ユーザのDomainだけがlocalhostのままになっていると思うので
その場合はユーザを削除して再作成すればOKです。

### インストール、ファイアウォールの設定
（Apacheと大体同じ）

```bash
yum install samba samba-common -y
systemctl start smb nmb
systemctl enable smb nmb

firewall-cmd --add-service=samba --zone=public --permanent
firewall-cmd --reload
```

### sambaの設定（smb.conf）
```bash
vi /etc/samba/smb.conf
```

```text:/etc/samba/smb.conf
[global]

### ▼ [global] セクション変更したところ
#       printing = cups
#       printcap name = cups
        load printers = no
#       cups options = raw

### ▼ [global] セクションに以下追記
        server string = Samba Server Version %v
        dos charset = CP932
        disable spoolss = yes

### ■ [homes],[printers],[print$] 全てコメントアウト

### ▼ 末尾に追記
[apache]
        path = /home/apache
        read only = no
```

保存して確認

```bash
testparm
```

### samba用のユーザ作成
httpのドキュメントを置くためだけに使用するので、apacheユーザを流用することにしました。

```bash
### ログインシェル、ログインパスワードを変更（suできるように）
usermod -s /bin/bash apache
passwd apache

### ホームディレクトリを変更
usermod -d /home/apache apache
cd /home/
mkdir apache
chown apache:apache apache/

### 確認
less /etc/passwd

### samba用のユーザとして登録
pdbedit -a -u apache -f "Apache"
pdbedit -L

### samba再起動
systemctl restart smb nmb
```
エクスプローラから接続確認できたらOK

## .NET Core
今回はサーバ上ではビルドはせず、ビルドしたプロジェクトを配置だけして動かす想定なので
ランタイムのインストールのみです。

```bash
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
yum update
yum install aspnetcore-runtime-2.1
```

CentOS事前準備編としては以上になります。

開発環境の準備～デプロイまではこちら
https://qiita.com/miyapei/items/28f1b7360614551e7f15