Raspberry Pi3でUbuntu Server

# OSのダウンロード＆インストール
## Ubuntu Serverのダウンロード
Raspberry Pi用のUbuntu Serverイメージを<a href="https://ubuntu.com/download/raspberry-pi" target="_blank">Ubuntuのサイト</a>からダウンロードします。
今回は、Raspberry Pi3用のUbuntu 18.04.4 LTS 64bitをダウンロードしました。

## Ubuntu ServerをSDカードに書き込む
<a href="https://rufus.ie/" target="_blank">Rufus</a>を使用して、SDカードにOSイメージを書き込みます。
![スクリーンショット (102).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483911/d3d78507-a902-8f79-c8c9-d6b76e717116.png)

## 起動確認
OSを書き込んだSDカードをRaspberry Piに差し込んで起動するか確認します。Raspberry Piにディスプレイとキーボードを接続し、しばらく待ちます。Ubuntu loginと出ると、成功です。

# 初期設定
## パスワードの変更
ユーザー名とパスワードに`ubuntu`と入力すると、パスワードをすぐに変更してくださいと表示されるので、現在のパスワード(ubuntu)を入力した後、変更したいパスワードを入力してください。

## ユーザーの追加＆削除　※お好みに応じて
### ユーザーの追加

```
sudo adduser ユーザー名
```

`Enter new UNIX password`と表示されるので、設定したいパスワードを入力します。
その後、`Full Name`などが出てきますが、入力することがなければ、空白のままエンターで構いません。最後に、情報は正しいですかと表示されるので、yを入力します。
![スクリーンショット (104).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483911/693ccc8e-259c-3f6e-922c-24ebfed489b6.png)

### 管理者権限の追加
sudoコマンドを使用するために、sudoグループに追加します。

```
sudo gpasswd -a ユーザー名 sudo 
```

### ユーザーの変更

```
su ユーザー名
```

### デフォルトユーザーの削除
ユーザーを削除するために、再起動させます。

```
sudo reboot
```

ユーザーの削除

```
sudo userdel -r ubuntu
```

## SSHの設定
### 公開鍵の追加
`authorized_keys`に公開鍵を追加します。
※エラーが出た場合は、パーミッションを`700`にします。

```
sudo vim ./.ssh/authorized_keys
```

秘密鍵を使ってログインできることを確認します。

```
ssh -i 秘密鍵 -l ユーザー名 IPアドレス
```

### root＆パスワードログインの無効化
`/etc/ssh/sshd_config`を編集する前に、バックアップを作成します。

```
cd /etc/ssh
sudo cp sshd_config sshd_config-backup
```

エディタで編集します。

```
sudo vim sshd_config
```

```bash:/etc/ssh/sshd_config
32 PermitRootLogin prohibit-password
37 PubkeyAuthentication yes
56 PasswordAuthentication no
```
`PermitRootLogin`のところは、`prohibit-password`か`no`にします。prohibit-passwordは、鍵認証の場合は、rootでログインできます。noにすると、鍵認証でもSSHでrootにログインできなくなります。

### SSHDの再起動
```
sudo systemctl restart sshd
```

秘密鍵を使わずにSSH接続をしようとすると、`Permission denied`と表示されることを確認します。

![スクリーンショット (105).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483911/eccb19c1-0bf7-a2cc-e907-da86f916ffda.png)

## IPアドレスの固定
**nmtuiとcockpitでは、有線接続のIPアドレス固定が出来なかった**ので、`50-cloud-init.yam`を使用してIPアドレスを固定します。

```bash:/etc/netplan/50-cloud-init.yaml
  6 network:
  7     ethernets:
  8         eth0:
  9             addresses: [固定したいIPアドレス]
 10             gateway4: デフォルトゲートウェイ(ルーターのIPアドレス)
 11             dhcp4: false
 12             optional: true
 13             nameservers:
 14                 addresses: [DNSサーバーのアドレス]
 15     version: 2
```

![スクリーンショット (115).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483911/e37fc9b9-6564-d0af-bdb2-671926c707a5.png)

設定を有効化させます。

```
sudo netplan apply
```

SSHから締め出され、上記で指定した固定IPでSSHできれば成功です。

## ファイアーウォールの設定
SSH、HTTP、HTTPSを使用するために、22、80、443番ポートを開放します。
NodeJSやFlaskを使用する場合は、3000、5000ポートなどを開放させます。

```
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
```

上記で許可したポート以外全て閉じるようにします。

```
sudo ufw default deny
```

ファイアウォールを有効化させます。

```
sudo ufw enable
```

SSHが中断する可能性がありますが、続けますかと表示されるので、`y`を入力します。

最後に、指定したポートが開放されているか確認します。

```
sudo ufw status
```

# Webサーバー(Nginx)のインストール

```
sudo apt-get install -y nginx
```

ブラウザに上記で固定したIPアドレスを入力し、Nginxのデフォルトページが表示されることを確認します。
![スクリーンショット (116).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483911/af83651f-26a8-5600-f159-8c69342eae95.png)