VPSを借りる [VPS、SSH、Nginx] #1

#VPSを借りて、勉強する

注意：
筆者はLinux経験が半年程度の状態から、この記事で紹介する作業をスタートしました。
記載内容については、可能な範囲で精査しておりますが、正確性を保証するものではありません。その点について、ご理解いただけますようよろしくお願いたします。

#VPS
いくつか比較検討しましたが、[KAGOYA JAPAN](https://www.kagoya.jp/cloud/vps/)のVPSを採用しました。

・[インスタンス（KVM）の料金](https://www.kagoya.jp/cloud/vps/)
[※KVMの特長](https://www.kagoya.jp/cloud/vps/kvm.html)

| CPU | 日額 | 月額上限 | 初期費用 | SSD | メモリー |
|:---:|:---:|:---:|:---:|:---:|:---:|
| 1コア | 24円 | 660円 | 無料 | 20GB | 1GB |
| 2コア | 40円 | 1100円 | 無料 | 50GB | 2GB |

・スナップショット（バックアップ）の料金

| 保存容量 | 日額 |
|:---:|:---:|
| 10GB | 4.4円 |

勉強中はインスタンスを稼働させ、それ以外の時はスナップショットを取って、インスタンスを削除していました。

####・インスタンス
[・はじめに](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=16&id=54&artlang=ja)
[・インスタンス作成](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=16&id=55&artlang=ja)
[・インスタンス削除](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=16&id=60&artlang=ja)
[・専用コンソール(非SSH)](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=16&id=63&artlang=ja)

####・スナップショット
[・はじめに](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=34&id=44&artlang=ja)
[・スナップショット保存](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=34&id=45&artlang=ja)
[・スナップショットからインスタンス作成](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=34&id=46&artlang=ja)
[・スナップショット削除](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=34&id=96&artlang=ja)

#環境構築
####1. インスタンス作成
※「1Core/1GB(24円/日) + CentOS 8 64bit」を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/3ed17f85-1764-bd63-8249-2ff32ec75da3.png)
####2. SSHでログイン
ターミナルソフトは「[RLogin](http://nanno.dip.jp/softlib/man/rlogin/)」を使用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/e819b8c2-b953-a733-0c86-3ee0aea30bd0.png)
※SSH認証鍵は、インスタンス作成時にダウンロードした「[ログイン用認証キー](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=20&id=1&artlang=ja)」を選択しました。

####3. 全体アップデート

```sh
dnf update
```
####4. リブート

```sh
reboot
```
####5.「Failed to set locale, defaulting to C.UTF-8」が出ないようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/63a78069-5a0a-9d4a-92c0-03282b6746f2.png)

```sh
dnf install langpacks-en
```
####6. SELinux の有効化

```sh
cp -p /etc/selinux/config /etc/selinux/config.origin
sed -i -e "s/^SELINUX=disabled/SELINUX=enforcing/g" /etc/selinux/config
diff -u /etc/selinux/config.origin /etc/selinux/config
```
####7. リブート

```sh
reboot
```
####8. ユーザー追加

```sh
NAME=yourname
PASSWARD=yourpass

# ADD USER
useradd -m $NAME
echo $PASSWARD | passwd --stdin $NAME
usermod -aG wheel $NAME

# PUBLIC KEY
mkdir /home/$NAME/.ssh/
cat ~/.ssh/authorized_keys > /home/$NAME/.ssh/authorized_keys
chmod 600 /home/$NAME/.ssh/authorized_keys
chown $NAME:$NAME /home/$NAME/.ssh/authorized_keys

# PAM
cp -p /etc/pam.d/su /etc/pam.d/su.origin
sed -i -e "s/^#auth\s.*required\s.*pam_wheel.so use_uid/auth            required        pam_wheel.so root_only/g" /etc/pam.d/su
diff -u /etc/pam.d/su.origin /etc/pam.d/su
```
####9. SSHポート変更

```sh
PORT=55551

dnf install policycoreutils-python-utils

semanage port --add --type ssh_port_t --proto tcp $PORT

cp -p /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml
sed -i -e "s/^  <port protocol=\"tcp\" port=\"22\"\/>/  <port protocol=\"tcp\" port=\"$PORT\"\/>/g" /etc/firewalld/services/ssh.xml
diff -u /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml

firewall-cmd --reload

cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.origin
sed -i -e "s/^#Port 22/#Port 22\nPort $PORT\n/g" /etc/ssh/sshd_config
sed -i -e "s/^PermitRootLogin without-password/PermitRootLogin forced-commands-only/g" /etc/ssh/sshd_config
diff -u /etc/ssh/sshd_config /etc/ssh/sshd_config.origin

systemctl restart sshd
```
####10. 追加ユーザーで再ログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/77e5e794-eddd-e1c3-b81f-5c1aa4648abc.png)
####11. Nginxインストール
[※How to Install Nginx on CentOS 8](https://linuxize.com/post/how-to-install-nginx-on-centos-8/)

```sh
sudo dnf install @nginx
sudo systemctl enable nginx
sudo systemctl start nginx
systemctl status nginx
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/7dcb80c8-13fb-e274-3ad5-e5aea1eb781b.png)
####12. ドメイン登録
[※他社管理ドメインの登録](https://support.kagoya.jp/vps/manual/index.php?action=artikel&cat=28&id=35&artlang=ja)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/11a6b646-6d56-3dbb-7d23-cc7979d7571d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/b755d74b-38fa-13fb-216d-51eb1b12ae0e.png)


####13. ドメイン設定
[※How to Set Up Nginx Server Blocks on CentOS 8](https://linuxize.com/post/how-to-set-up-nginx-server-blocks-on-centos-8/)

```sh
DOMAIN=yourdomain

sudo mkdir -p /var/www/$DOMAIN/public_html

sudo tee /var/www/$DOMAIN/public_html/index.html << EOF
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Welcome to $DOMAIN</title>
  </head>
  <body>
    <h1>Success! $DOMAIN home page!</h1>
  </body>
</html>
EOF

sudo chown -R nginx: /var/www/$DOMAIN
sudo restorecon -RF /var/www/$DOMAIN/public_html/

sudo tee /etc/nginx/conf.d/$DOMAIN.conf << EOF
server {
    listen 80;
    listen [::]:80;

    root /var/www/$DOMAIN/public_html;

    index index.html;

    server_name $DOMAIN www.$DOMAIN;

    access_log /var/log/nginx/$DOMAIN.access.log;
    error_log /var/log/nginx/$DOMAIN.error.log;

    location / {
        try_files \$uri \$uri/ =404;
    }
}
EOF

sudo nginx -t

sudo systemctl restart nginx
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662099/d104885b-38ab-7634-447e-b67d20282998.png)