【IBM Cloud】IBM CloudでのLAMP立ち上げに挑戦（入門者）

### はじめに
IBM CloudのVPCでUbuntu Linux仮想サーバーを立ち上げ、Apache Webサーバー、MySQLデータベース、及びPHPをインストールすることでLAMPスタックを構築しました。作成の流れについて初心者目線で作成しています。
今回の内容にはIBM Cloudの[有料アカウント](https://cloud.ibm.com/docs/account?topic=account-accounts)が前提となっています。

### VPC設定の全体の流れ

#### 1. VPCの作成
IBM Cloudにログインすると表示されるダッシュボード画面で、左上の「ナビゲーション・メニュー」をクリックし、「VPCインフラストラクチャー」で「VPC」をクリックします。
![スクリーンショット 2022-05-18 18.02.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/07af4a08-a138-9575-a581-c90055917ec4.png)
新たなVPCの作成が必要な場合には「作成」ボタンにて作成できます。
具体的な作成の流れは、[こちら](https://qiita.com/Sungyun_Moon/items/569b8e39eabf31485df7)を参考に作成できるかと思います。
今回は予め作成した「commonvpc」で作業を行いました。
![スクリーンショット 2022-05-18 18.14.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/dc3ee3b1-95fe-836f-6243-4a7d28441b7d.png)

#### 2. サブネットの作成
VPCの作成が完了しましたら、次は「サブネット」ボタンをクリックしVPC用サブネットの作成を行います。
![スクリーンショット 2022-05-18 18.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/ba71605f-5332-b9d7-2856-44ed890e3d01.png)
ロケーションや詳細項目に必要項目を選択し、求めるIP範囲を設定します。今回は東京リージョン、東京２ゾーン、IP範囲は28、IPアドレス数は16個に設定しています。また、今回は特定のIPアドレスからのみアクセスできるように設定したいため、パブリック・ゲートウェイの設定は行いません。
![スクリーンショット 2022-05-18 18.22.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/4e06fee4-7128-6263-88fb-c170fff0f70e.png)
![スクリーンショット 2022-05-18 18.22.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/bf3195e1-f860-22f3-bea4-6b6813cc01a3.png)

#### 3. セキュリティーグループ作成
サブネットの作成後、メニューから「セキュリティー・グループ」ボタンをクリックし、VPC用のセキュリティー・グループの作成を行います。サブネットの作成時と同様、ロケーションや詳細を設定し、VPCは対象VPCを設定します。繰り返しとなりますが、今回は予め作成しました「commonvpc」で設定しています。
また、特定のIPのみアクセスできるように、インバウンド/アウトバウンド・ルールを設定します。
インバウンド・ルールとしてはプロトコルTCP'22'と'80'をそれぞれ設定し、プロトコルICMPに同様にIPアドレスを設定します。

参考：[ポート番号一覧](https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7)　
(*ポート番号は1024までは共通規格として決められていて、それ以降の番号は自由に使用できる番号です。)

ここでIPアドレスはインバウンド許可IPアドレスを入力しますが、今回は私の自宅でのグローバルIPアドレスを入力しました。（もし、特定の特定のServerからアクセスしたい場合は、そのサーバーのIPアドレスを記入する形となります。）
自宅のIPアドレスはコロコロ変わるため、都度確認し設定する必要があります。ご注意ください。IPアドレスの確認は以下のリンクで確認できます。

参考：[IPアドレス確認](https://www.cman.jp/network/support/go_access.cgi)
![スクリーンショット 2022-05-18 19.20.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/36346d98-609a-b967-d3f2-a20adbd544ec.png)
![スクリーンショット 2022-05-18 19.26.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/05629185-0e58-a979-9036-fcd3a582cbe2.png)
![スクリーンショット 2022-05-18 19.27.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/d54bc11b-6711-d91f-0be9-f07510dd5db4.png)
![スクリーンショット 2022-05-18 19.27.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/9cfb2003-8bb8-d672-64ab-59845360c25e.png)
全ての設定が完了したら、右側の「セキュリティー・グループの作成」ボタンをクリックし作成します。
![スクリーンショット 2022-05-18 19.29.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/1f45ae31-bada-1cd2-d293-a311d28c4fb1.png)

#### 4. SSH鍵の作成
VPCでは、VSIへの管理者アクセスに、パスワードではなく[SSH鍵](https://cloud.ibm.com/docs/vpc?topic=vpc-ssh-keys)を使用します。SSH鍵の作成はターミナル（MACユーザー）で行います。以下のコマンドを用いてターミナルにてSSH鍵の作成及びアカウントへの追加を行います。
```shell:SSHキーの作成
$ ssh-keygen -t rsa -b 4096
```
```shell:SSHキーをアカウントに追加
$ SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
```

#### 5. サーバー作成
SSH鍵の作成が完了しましたら、サーバーの作成を行います。今までと同様、左のメニューから「仮想サーバー・インスタンス」をクリックし、VPC用の仮想サーバー・インスタンスの画面で作成ボタンをクリックします。
![スクリーンショット 2022-05-19 14.52.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/ff31c94e-73f2-11bd-16b1-97db48e3abaf.png)
必要なサーバー・タイプやホスティング・タイプ、ロケーションなどの設定を行います。今回はIntel x86サーバーとシングル・テナントでの専用ホスティング、東京２ゾーンで設定しました。
OSは Ubuntu Linuxにし、最も最新バージョンを選択しました。
プロファイルのスペック設定欄にはIntel x86の基本値（2vCPU|8GiB|4Gbps）にしていますが、「全てのプロファイルを表示」をクリックすると、多彩なオプションから選ぶこともできます。
また、SSH鍵の設定欄が表示されているので、上記で作成されたSSH鍵を選びます。
ここまで設定すると、右側のサマリーに金額とともに「仮想サーバーの作成」ボタンが表示されるので、作成を行います。
![スクリーンショット 2022-05-19 15.04.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/5be66b14-3851-845d-8d5c-93259f187346.png)
もう一度仮想サーバー・インスタンス画面に戻り、作成したサーバーが稼働中になったら、VPCの準備は完了となります。

### Apache、MySQL、および PHP のインストール
Apache、MySQL、PHPのインストールはターミナルにてコマンド入力することでインストールが可能です。
以下のコマンドの流れに沿ってインストールを行います。
```shell:① 更新中の対話モードの無効化
$ export DEBIAN_FRONTEND=noninteractive
```
```shell:② パッケージの更新
$ apt update
```
```shell:③ Apacheインストール
$ apt install apache2 -y
```
```shell:④ MySQLインストール
$ apt install mysql-server -y
```
```shell:⑤ PHPインストール
$ apt install php libapache2-mod-php php-mysql php-common php-cli -y
```
コマンドにてインストールが問題なくされたかどうか、以下の流れで確認します。

#### 1. Ubuntuの確認
まず、ブラウザーを開いて、浮動IP（Floating IP）アドレスを入力しアクセスします。今回はLinux Ubuntuにて立ち上げているため、Ubuntuのウェルカム・ページが表示されます。
![スクリーンショット 2022-05-26 13.51.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/65116e04-8080-6f58-0c39-25acb1d324b0.png)

#### 2. AMPのバージョン確認
以下のコマンドを使用して、インストールされたApache、MySQL、PHPのバージョンを確認します。
```shell:① Apache
$ apache2 -v
```
```shell:② MySQL
$ mysql -V
```
```shell:③ PHP
$ php -v
```

#### 3. MySQLデータベース保護
以下のコマンドを用いて、MySQLデータベースを保護します。
```
$ mysql_secure_installation
```

#### 4. PHP情報ページの作成及び確認
また、以下のコマンドを用いて、PHP情報ページを作成します。
```
$ echo "<?php phpinfo(); ?>" > /var/www/html/info.php
```
コマンド入力が完了すると、作成したPHPページを確認します。ブラウザーを開き、http://{FloatingIPAddress}/info.php (*FloatingIPAddressにはアクセス許可を設定したGlobal IPを置き換えます。)　に移動します。そうすると、以下の画面が表示されます。
![スクリーンショット 2022-05-26 13.59.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/aea1d912-3929-89cd-2dbe-f719fe8d89e4.png)

### 最後に
今回はIBM Cloud VPCを用いてLinux仮想サーバーを立ち上げてみました。チュートリアルではLAMP環境を構築後、WordPressをインストールしドメインを構成するなどの作業が残っていますが、「mysql_secure_installation」を途中で止めてしまったことが原因で、うまく進めることができませんでした。WordPressの稼働確認がうまくいきましたら、改めて記事に追記したいと思います。

### 参考リンク
・[VPC の LAMP スタック上の PHP Web アプリケーション](https://cloud.ibm.com/docs/solution-tutorials?topic=solution-tutorials-lamp-stack-on-vpc&locale=ja)
・[IPアドレス確認](https://www.cman.jp/network/support/go_access.cgi)
・[ポート番号一覧](https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7)