とにかくサービスを作ってみようぜの会〜（１）サーバー立ち上げ編〜

## はじめに
祝・初投稿です。（普通自分で祝って言わない笑）

初めまして、もうすぐでエンジニア５年目を迎えるUchitoです。
新卒からエンジニアを始めて、プログラマ・SE・PL・PMと経験を重ねてきましたが、最近下記のようなもやもやを抱え始めました・・・
- 管理系の仕事ばかりでエンジニアとしてのスキルが上がっていないのでは
- レガシーな技術ばかり携わっていて技術動向に全く追いついていない
- インフラ系知識が足りず、苦労することが多い

そんなもやもやを抱えながら、あれをしなきゃこれをしなきゃと考えていましたが、今一歩踏み出せない状況が続いていました。（こんなことがしたいと妄想を膨らませれば膨らませるほど、遠ざかっていくんですよね、こういうものって・・・）

そこでとにかく何にも拘らず自分のやりたいと思っているものを少しずつ実行して、まずは一つサービス公開まで持っていこうと思い、この記事を始めました！

## こんなことをやってみたい
やってみたいことは下記のようなイメージです。（具体的にするとまた気持ちがこけそうなので、ざっくりでいきます笑）
1. AzureVMを使用して、まずは簡単なwebサービスを世の中に公開してみる
1. Azure Pipelinesを使用して上記のサービスを自動デプロイ出来るようにする
1. Nuxt3を使用してwebサービスを作成して上記の環境に搭載してみる

まだまだやってみたいことはありますが、一旦上記でとどめつつ、かつ一つずつ少しずつやっていこうと思います。
今回は1.の中のVM立ち上げからやっていきます。

補足：
全然知識がない中での実践なのでベストプラクティスではないです！
（アドバイスなどあれば是非ともコメントお願いします！）

## サーバー立ち上げ実践編
### システム構成
今回はこんなシステム構成で、VMの立ち上げからwebサーバーやアプリ実行環境の構築までやってみます。
- OS : Ubuntu Server 20.04 LTS 
- Webサーバー : Apache Web Server 2.4
- 言語 : Java17 (Apache Tomcat10)

技術選定理由としては、Ubuntuは学生時代使っていたもので慣れ親しんでいるので、なんとなく笑。あとはJavaを普段使用しているのですが、もっと使えるようになりたい＆最新のバージョンを使ってみたいが理由でJava１７を選択しています。
その流れでじゃあJava17が使用できるTomcatとか構築しなきゃなあと思っていたら下記記事を見つけたので、ApacheやTomcatは下記になぞった形になりました。
https://www.workaholic-blog.com/index.php/2021/09/22/020/

### Azure VMの立ち上げ
それではセコセコVMを立ち上げていきます。
下記を参考にしながら、なるべく最低限のスペックで作成していきます。
https://qiita.com/nanbuwks/items/120858191caf3b0a3f1c

![スクリーンショット 2024-03-20 15.18.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/9488c756-d6d0-205d-0c3f-a77df52b1713.png)
細かいパラメータの設定は省きます。パラメータ設定の際は下記記事を参考にしながら知識を吸収しつつ設定していきました。（下記記事すごく初心者向けに書いてあってとても助かった・・・！）
https://qiita.com/_akira19/items/b95dac39b51d44d8931a
可用性オプションは、今回はあくまで自己満足サービスなので、なしで行きます。セキュリティも同じ理由でStandard。

![スクリーンショット 2024-03-20 15.26.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/15714035-14eb-5d4f-6ea4-de7d709b41f5.png)
VMサイズはB1sを指定。（B1lsでも良いかなと思いましたが、普段は止める想定なので、そこまでお値段も変わらないし一旦B1sに設定
）
ユーザー名はsshした際のユーザー名が変わるだけなので、変更なし
![スクリーンショット 2024-03-20 15.30.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/d2005522-810c-12b2-5b60-02630bb5622e.png)
受信ポートの設定は、後でIPアドレス制限のルールを自分で追加するので、今は”なし”を設定。
![スクリーンショット 2024-03-20 15.38.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/f7416cfa-4866-3a69-5527-af887fc88f5b.png)
ホストでの暗号化は一旦なし（やった方が良いのだろうが、特にそこまでの情報を載せる予定もないのでチェックなし）
OSディスクの種類は、今回は開発目的なので一番安価なHDDを選択。
![スクリーンショット 2024-03-20 15.44.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/c2a4fbd7-e419-248c-67be-8f53cc5f0784.png)
![スクリーンショット 2024-03-20 15.45.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/dd2b2a36-3677-267a-7283-faa288b9866e.png)
ネットワークはほぼ既定設定まま。受信ポートは先ほど同様後で変更するので、一旦なし。
また、IPとNICはVM削除時にも消えて欲しいので、”VM が削除されたときにパブリック IP と NIC を削除する”にはチェックを入れてます。

後の設定は、ほぼデフォルトままです。（VM稼働しっぱなしが怖いので、自動シャットダウン設定だけONにしました。）
![スクリーンショット 2024-03-20 15.54.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/a27002a6-9546-972d-c961-2db43bbfd8f6.png)
これにて上記画面が表示されればVMおよびその他リソースの作成完了です。

### NW受信ポートの設定
次は先ほどから先延ばしにしていたNW受信ポートの設定です。
今回は特定のIPアドレスからSSH/HTTP/HTTPSの３種類の通信ができるように設定します。
![スクリーンショット 2024-03-20 16.08.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1935905/ec778101-5a46-4b29-de2c-6ab08ca84363.png)
SSH/HTTP/HTTPSの受け入れのため、22,80,8080,443ポートへのアクセスを許可します。
サブネット内での通信など本当はもっと考えなきゃだとは思うのですが、一旦今は自分のPCから接続できればOKなので、これで良しとしています。
（IPアドレス欄は空欄にしていますが、ここに自分の指定のIPアドレスを記載します。）

### SSH接続
あとはSSH接続ができることを確認できればVM立ち上げに関しては完了です。
VMリソース作成時にpemファイルがダウロードできるので、それを使用してssh接続を試みます。
まずはpemファイルをローカルPCの好きな場所に配置して、ssh接続用にpemファイルの権限を絞った後でssh接続を実施する。
```
chmod 400 tonikaku-service-sshkey.pem
ssh -i ./tonikaku-service-sshkey.pem [VM作成時に設定して管理者ユーザー名]@[VMのパブリックIPアドレス]
```
VMのパブリックIPアドレスは、作成したVMリソースの概要画面に記載されている。（モザイクとかめんどくさいから画面は乗っけません笑）

## 終わり
本当はApache設定とかTomcat設定とかまで行きたかったですが、これだけでも今の自分にはかなり重労働だったので区切ります。笑
次は、アパトム設定まで完了して、簡単なwebアプリが見られることを確認するとこまでいこうと思います！