OCI Load Balancer と Oracle Linux 9 でロードバランシングを体験 その３ VM上の Oracle Linux 9 に apache、PHPインストール、設定

# 【お知らせ】この記事はこちらの記事と連動しております。

## **OCI Full Stack Disaster Recovery (FSDR) が Load Balancer 対応になったので試してみた**
https://qiita.com/Assemble_EX-80/items/92262c337290d57b670c

[こちらの記事](https://qiita.com/Assemble_EX-80/items/92262c337290d57b670c)を試すための [事前準備](https://qiita.com/Assemble_EX-80/items/92262c337290d57b670c#%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99) の方法をステップバイステップで記述したものであり、こちらで利用している**Load Balancerと、Oracle Linux 9の構成を最速で構成する手順** です。

この**一連の記事に沿ってリソースを作成するだけ**でも、OCIで **Load Balancer** と **Oracle Linux 9** の**Webサーバを構築**して、**ロードバランシングを体験**することができます。

この記事は、**その３ VM上の Oracle Linux 9 に apache、PHPインストール、設定** です。

# 目次
**[その１ はじめに](https://qiita.com/Assemble_EX-80/items/09d552f69e8b60e6f804)**
**[その２ ネットワーク(VCN)とVM 作成](https://qiita.com/Assemble_EX-80/items/5d941b67a73703b20f9c)**
**[その３ VM上の Oracle Linux 9 に apache、PHPインストール、設定 ](https://qiita.com/Assemble_EX-80/items/d89ddb7b78c84373c49a)**
**[その４ Load Blancer 作成・設定](https://qiita.com/Assemble_EX-80/items/20de1daabfb1f0857fc5)**
**[その５ オブジェクト・ストレージ、ブロック・ボリューム 作成・設定](https://qiita.com/Assemble_EX-80/items/b846a3ac8aa8de71301a)**
<!--
**[その３ VM上の Oracle Linux 9 に apache、PHPインストール、設定 ](https://qiita.com/Assemble_EX-80/items/d89ddb7b78c84373c49a)**
**[その４ Load Blancer 作成・設定 ](https://qiita.com/Assemble_EX-80/items/20de1daabfb1f0857fc5)**
**[その５ オブジェクト・ストレージ、ブロック・ボリューム 作成・設定 ](https://qiita.com/Assemble_EX-80/private/b846a3ac8aa8de71301a)**
-->

の構成でお届けしています。

# VMにアクセスしてパッケージインストール
## SSHでログイン

**インスタンスへの接続**
https://docs.oracle.com/ja-jp/iaas/Content/GSG/Tasks/testingconnection.htm

- Windows 10 や 11 の場合は [WSL2](https://learn.microsoft.com/ja-jp/windows/wsl/install) 上で動く[Oracle Linux](https://apps.microsoft.com/detail/9mxq65hlmc27?hl=en-us&gl=US) をインストールして使うのがお勧めです。
 
- Macであれば[ターミナル](https://support.apple.com/ja-jp/guide/terminal/trmld4c92d55/mac)からSSH接続が可能です。

PC 上の Oracle Linux 9 や Mac の ターミナル上から ssh コマンドで **[その２ ネットワーク(VCN)とVM 作成](https://qiita.com/Assemble_EX-80/items/5d941b67a73703b20f9c)** で作成した コンピュート VM の instance-01 や instance-02 のパブリックIPアドレスに接続します。

ssh の秘密鍵: **ssh-key-20yy-mm-dd.key**
接続先 パブリック IP: **xxx.xxx.xxx.xxx**
ログインアカウント: **opc**

の場合は以下のようになります。

~~~
$ ssh -i ssh-key-20yy-mm-dd.key xxx.xxx.xxx.xxx -l opc
Last login: Thu Mar zz zz:zz:zz 2024 from yyy.yyy.yyy.yyy
[opc@instance-01 ~]$
~~~

uname -a や cat /etc/system-release でホスト名やアーキテクチャなどホストの情報を確認してみましょう。

### instance-01 のコンソール

~~~
[opc@instance-01 ~]$ uname -a; cat /etc/system-release
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/553497e1-9524-fecf-a038-25dcd7991503.png)

### instance-02 のコンソール

~~~
[opc@instance-02 ~]$ uname -a; cat /etc/system-release
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/026a60b6-c2bd-e76d-1b4f-3be8aad213f2.png)

instance-01 は A1 シェイプで作成したので、aarch64 で ARM なのがわかりますね。
（https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/arm.htm）
instance-02 は E4 シェイプなので x86_64 です。


## DNF でパッケージインストール

Oracle Linux 9 なのでDNFを使います。

apache と php をインストールするだけでよければ
$ sudo dnf install httpd php -y
でインストールされます。

~~~
$ sudo dnf install httpd php -y
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/1fd3b132-9ade-a9c0-ea8f-80f626f9eb71.png)
中略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/7f30c91d-7b6e-d277-da44-7b88253d4cca.png)

これで instance-01 への apache と php のインストール完了です。

### **instance-02 でも忘れずに同じように apache と php インストール**してください。

完了したら次のセクション [VM上でWebサーバの設定](#vm上でwebサーバの設定) に進みます。

### その他 DNF コマンド

dnf module list でモジュール一覧が見れます。

~~~
$ sudo dnf module list
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/939d0605-3436-319b-a0d7-a1ccfb330d9e.png)

DNF ってなあに？ という方は、

DNFコマンド・リファレンス
https://docs.oracle.com/cd/F61410_01/software-management/DNFCommandRef.html

DNF
https://docs.oracle.com/cd/F61410_01/software-management/sfw-mgmt-YumV3DNFComparison.html#ol8-yum-appendix

Oracleによるソフトウェア・パッケージの配布方法
https://docs.oracle.com/cd/F61410_01/software-management/sfw-mgmt-HowOracleDistributesSoftwarePackages.html#how-oracle-distributes-software

使用可能なYumリポジトリ
https://docs.oracle.com/cd/F61410_01/software-management/sfw-mgmt-HowOracleDistributesSoftwarePackages.html#available-yum-repos

や他の情報をみて DNF になれてください。（rpmやyumしかわからないのは私も同じw）

インストールされているパッケージ一覧を知りたいときは
~~~
$ sudo dnf list --installed
~~~

これで、でざざっと、インストールされているパッケージが出てきたりします。

~~~
$ sudo dnf group list
~~~

でグループ一覧が見れたりもします。

最初に update や　upgrade やるかは・・・お任せですが、やるなら最初にやりましょ。
**(少なくとも何分か時間がかかりますので慌てているときはお勧めしませんがセキュリティ的にはやりましょう)**

~~~
$ sudo dnf upgrade -y
~~~



# VM上でWebサーバの設定
## apache、php 設定

httpd がインストールしただけで動いていることはないですが、一応確認

~~~
$ curl localhost
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/c79013e1-5ae5-5514-e9a4-dbed238cd3e7.png)


はい、動いていません。
なので Apache起動させます。

### Apache 起動設定

sudo systemctl start httpd.service　で起動設定

~~~
$ sudo systemctl start httpd.service
~~~

### Apache 自動起動設定

systemctl enable httpd.service　自動起動設定
~~~
$ sudo systemctl enable httpd.service
~~~

sudo vi /var/www/html/index.html で index.html ファイルを作りましょ。
中身は hi this is oracle linux とでもしておきますか。
vi エディタを :wq で書き込んで終了します。

~~~
$ sudo vi /var/www/html/index.html
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/ef12f18b-37db-d416-d801-4b015e3222ba.png)

### Apache 起動確認

今度は動いているはず。
~~~
$ curl localhost
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/7494f77d-1dd5-6ebd-dc1c-aee21abce319.png)

動いています。

### php 設定

php でページ書いてみましょ。
vi 起動します。

~~~
$ sudo vi /var/www/html/check.php
~~~

check.php の中身
~~~
<head><meta charset="UTF-8">
<title>PHP Test</title>
</head>
<body>
<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    echo "<b>Server Hostname</b> ".gethostname();
    echo "<br>";
    echo "<b>Server IP</b> ".$_SERVER['SERVER_ADDR'];
    echo "<br>";
    echo "<b>Accessing Hostname</b> ".gethostbyaddr($_SERVER['REMOTE_ADDR']);
    echo "<br>";
    echo "<b>Accessing IP</b> ".$_SERVER['REMOTE_ADDR'];
    echo phpinfo();
?>
</body>
</html>
~~~

:wq でエディタ終了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/3e517fc6-4a4d-adcf-11d7-c93b03923beb.png)

### php 動作確認
$ curl localhost/check.php

~~~
$ curl localhost/check.php
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/eb310d0e-9f26-1564-d53d-2f5147724dba.png)

ローカルからのチェックでは、ちゃんと動いていそう。

## firewall 設定

インターネットからは Oracle Linux の firewall の設定をしないと、httpやhttps (port 80 や、 port 443)ではアクセスできないようなので、firewall の設定をして port 80, 443 にアクセスできるようにします。

**設定**
sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --add-service=https --zone=public --permanent
sudo firewall-cmd --reload

**確認**
sudo firewall-cmd --list-all --zone=public


~~~
$ sudo firewall-cmd --add-service=http --zone=public --permanent
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/85d70049-5b6c-035c-6677-52cb15821382.png)

~~~
$ sudo firewall-cmd --add-service=https --zone=public --permanent
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/85d70049-5b6c-035c-6677-52cb15821382.png)

~~~
$ sudo firewall-cmd --reload
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/85d70049-5b6c-035c-6677-52cb15821382.png)

~~~
$ sudo firewall-cmd --list-all --zone=public
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/74ab2c0b-11fb-f172-681d-d174d82a6d28.png)

## selinux 設定

selinux も設定しましょ。
コマンドラインから

sudo grubby --update-kernel ALL --args selinux=0
sudo setsebool -P httpd_can_network_connect on
sudo setenforce 0

加えて

sudo vi /etc/selinux/config

で、ファイルを中身を
SELINUX=permissive
に書き換えて上書き、編集終了します。


**設定**
~~~
$ sudo grubby --update-kernel ALL --args selinux=0
~~~
~~~
$ sudo setsebool -P httpd_can_network_connect on
~~~

**確認**
~~~
sudo getsebool httpd_can_network_connect
~~~
**実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/5a0c8c0a-5ff9-392f-678b-693ba5a90caf.png)


**設定**
~~~
$ sudo setenforce 0
~~~
**確認**
~~~
sudo getenforce
~~~
**実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/2feb4b61-b13a-882a-ca91-21045bb7758d.png)

**Config ファイル 編集**
~~~
$ sudo vi /etc/selinux/config
~~~
SELINUX=permissive
に書き換えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/6e6e420a-9d34-ae39-ebc3-873ca57a9d66.png)

書き換えたら、
vi を **:wq** 等で/etc/selinux/config を上書きし終了。


# VMが動作していることを外部から確認
## Webブラウザでサーバにアクセス

instance-01 のパブリックIP にブラウザでアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/d64423d7-a0f9-52ab-8147-a6f335dc1328.png)

instance-02 のパブリックIP にブラウザでアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/d64423d7-a0f9-52ab-8147-a6f335dc1328.png)

instance-01 のパブリックIP/check.php にブラウザでアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/31f69e32-f816-f61b-a6b5-647a03b785e8.png)


instance-02 のパブリックIP/check.php にブラウザでアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737461/fe5805f8-2b0e-3f83-1aea-db74e4ac6787.png)


どちらのサーバも期待通り動いているようです。

念のため、一度VMを再起動してみて、VMを再起動後もちゃんと httpd のプロセスが自動で起動することやfirewallやSELinuxの設定も問題ないか確認することをお勧めします。


# 次の記事
## **[その４ Load Blancer 作成・設定](https://qiita.com/Assemble_EX-80/items/20de1daabfb1f0857fc5)** になります。

# 前の記事
## **[その２ ネットワーク(VCN)とVM 作成](https://qiita.com/Assemble_EX-80/items/5d941b67a73703b20f9c)** 

# 連動記事
**OCI Full Stack Disaster Recovery (FSDR) が Load Balancer 対応になったので試してみた**
https://qiita.com/Assemble_EX-80/items/92262c337290d57b670c