M1MacでLinux環境を構築する〜サーバー構築編

今回のお題
-
本記事は、[M1MacでLinux環境を構築する](https://qiita.com/keishi04hrikzira/items/680aae7ee4310df1ac98)の一部です。

[前回]()まででLinuxOSの仮想マシンを作成し、デスクトップとしても扱えるようにしました。

今回は最終章として、いよいよサーバーを立ち上げます。

本記事のゴール
-
- 仮想マシン上にnginxおよびapache2のローカルサーバーを立ち上げる
- 立ち上げたサーバーにMacOSおよびに他の（同一ネットワーク上の）デバイスからもアクセスできるようにする。

注意点
-
各作業を仮想マシンとMacOSのどちらで行っているのかを間違えないようにしてください。

今回は仮想マシン外部からもサーバーにアクセスする都合上、サーバー構築そのものの作業も途中からは仮想マシンではなくMacOS上で行います。

そのため、この作業を行っているのが仮想マシンとMacOSのどちらなのかを意識して作業にあたるようにしてください。

手順
-
### ポートの追加
まずは、作成した仮想マシンにサーバー用のポート番号を追加していきます。

電源ボタンを押して仮想マシンを停止させた後、UTMの最初の画面に戻って仮想マシンを右クリックし、`edit`を選択します。

[![Image from Gyazo](https://i.gyazo.com/127a7b6c174d01f8f9980d402d756efc.png)](https://gyazo.com/127a7b6c174d01f8f9980d402d756efc)

上部のメニューから、今回は`Network`を選択します。

[![Image from Gyazo](https://i.gyazo.com/ac1ac2be14bd632d7aaefb6efc55907a.png)](https://gyazo.com/ac1ac2be14bd632d7aaefb6efc55907a)

最初は上記のような画面になっていると思います。

Network ModeをShared NetwokからEmulated VLANに変更すると右下に`New`ボタンが出てくるので、そちらをクリックします。

[![Image from Gyazo](https://i.gyazo.com/25d7112419dc4e02f548d27a5d434757.png)](https://gyazo.com/25d7112419dc4e02f548d27a5d434757)

Newボタンの下に以下のような窓が出てくるので、`Guest Address`と`Host Address`は空欄のまま、`Guest Port`と`Host Port`にはそれぞれ`80`と入力してSaveします。

[![Image from Gyazo](https://i.gyazo.com/387c979fe6c4f08970ca12d161b41555.png)](https://gyazo.com/387c979fe6c4f08970ca12d161b41555)

先ほど80と入力した部分を`22`と`443`に変更して同じ作業を合計3回繰り返すと、以下の画面になるかと思います。

[![Image from Gyazo](https://i.gyazo.com/9a8bb6ef809e98cb9e98799db6004a29.png)](https://gyazo.com/9a8bb6ef809e98cb9e98799db6004a29)

この状態になっていれば、そのままsaveします。

### ファイアウォールとポートの接続設定
ポートの追加ができたので、再び仮想マシンを立ち上げてターミナルに入ります。

まずは以下のコマンドで、ファイアウォールの状態を確認します。

```shell
$ sudo ufw status
```

おそらく`状態：非アクティブ`と出たと思います。

なので以下のコマンドを打ってアクティベートします。

```shell
$ sudo ufw enable
```

`ファイアウォールはアクティブかつシステムの起動時に有効化されます。`と表示されれば成功です。

これで、サーバーへの接続に対してファイアウォールが有効になりました。

次に、以下のコマンドを用いて特定のポートへの接続を許可していきます。

```shell
$ sudo ufw allow 80
$ sudo ufw allow 22
$ sudo ufw allow 443
```

`ルールを追加しました`と表示されれば成功です。

これで`80, 22, 443番ポートにはアクセス可能、それ以外へのアクセスはファイアウォールにガードされてる`という状態になりました。


### sshの導入
sshとは、コンピュータを外部から操作するための仕組みです。

これを用いることで、MacOS上から仮想マシンを操作したり、他の端末から仮想マシンのサーバー上にアクセスしたりできるようになります。

以下のコマンドを用いて、sshの導入とsshdの立ち上げを行います(sshdはsshで操作される側のコンピュータのことです）。

```shell
$ sudo apt install ssh
$ systemctl start sshd
```

上記のコマンドを入力するとパスワードを求められます。

パスワード入力後は画面に何も表示されませんが問題ありません。

ここまで完了したら一旦仮想マシンはそのままにして、MacOSのターミナルに移ります。

### サーバー構築
いよいよサーバーを構築します。

前項で触れたように、ここから先の作業はMacOSのターミナルで行います。

具体的にはMacOSのターミナルの中から仮想マシンのシェルに入り、仮想マシンの操作をするという形です。

まずは以下のコマンドで仮想マシンのシェルに入ります。

```shell
% ssh "仮想マシンのユーザー名"@127.0.0.1
# 以下でもOK
% ssh "仮想マシンのユーザー名"@localhost
```
成功すると、プロンプト前のユーザー名@サーバー名がMacのものから仮想マシンのものに変化します。

### 注意

もし

```shell
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
```

のようなアラートが表示された場合には、

```shell
$ ssh-keygen -R 127.0.0.1
```

と一度入力してから再度接続を試してください。


### サーバーの立ち上げ
仮想マシンのシェルに入れたので、いよいよサーバーを立ち上げます。

今回はnginxを例に取りますが、nginxの部分をapache2に読み替えていただければapacheサーバーの立ち上げも同じ手順で可能です。

まずは、サーバー用のソフトをインストールします。

```shell
$ sudo apt install nginx
```

これでnginxサーバーが使えるようになりました。

サーバーが起動しているかどうかの確認は、以下のコマンドで可能です。

```shell
$ systemctl status nginx.service
```

結果（緑の部分がactiveなら起動中）
[![Image from Gyazo](https://i.gyazo.com/1ebeea91ab7fb85884133516f7b7ffa1.png)](https://gyazo.com/1ebeea91ab7fb85884133516f7b7ffa1)

また、上記の画面から出るにはCtrl+Cを押してください。

サーバーの起動状態については、

```shell
$ systemctl start nginx.service
$ systemctl stop nginx.service
```

で可能です。

### サーバーへの接続
サーバーが立ち上がっていることが確認できたら、実際に接続してみましょう。

macでブラウザを立ち上げて`127.0.0.1`と入力するか、他のデバイス（同一のwifiにつながっていることが条件）でM1MacのIPアドレスを入力してください。

nginxとapache2それぞれで以下のような画面が表示されれば成功です。

[![Image from Gyazo](https://i.gyazo.com/af86d0e98e26fcf60f7e6f6991368873.png)](https://gyazo.com/af86d0e98e26fcf60f7e6f6991368873)

[![Image from Gyazo](https://i.gyazo.com/b9e7ae62a67242fb8f2660c08497ee7e.png)](https://gyazo.com/b9e7ae62a67242fb8f2660c08497ee7e)

### ログアウト
仮想マシンのシェルから抜けてMacのシェルに戻る際にはexitコマンドを用います。

終わりに
-
以上でM1Mac上にLinuxサーバーを構築することができました。

同じような境遇の方のお役に立てれば幸いです。