【Linux】仮想環境でWEBサーバーを構築【Apache】

# はじめに
今回初めてWEBサーバーを構築したので、どのような手順で構築したか見返せるようにアウトプットします。

# 目的
- サーバー構築とはどのようなものか理解を深めること。
- 簡単なWEBサーバーの構築手順を知ること。

# 環境
以下を用いてサーバーを構築しました。ホストOSはwindows11です。
- VirtualBox
- CentOS7
- Apache

# 結果
webブラウザから今回作成したサーバーにアクセスし、「hello world!」と表示できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/8bb30cae-6ca2-f212-de5a-ed93b1f5063b.png)

# 手順
VirtualBoxをインストールした状態からの手順を説明します。
また、事前にCentOS7インストール用のISOイメージファイルをダウンロードしておいてください。

## 1.仮想マシンの作成
VirtualBoxの「仮想マシン」タブから新規を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/f7cb21ef-3478-978c-439f-10f12ad4c8ec.png)

「仮想マシンの作成」というウィンドウが開きます。
ここでは名前とフォルダのみ設定します。

名前 : 仮想マシンの名前(今回はCentOS_webserverという名前)を入力します。
フォルダ : 自分の保存したいフォルダを選択します。

上記の設定ができたら「次へ」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/870c6101-52d7-6897-6bb0-e170837fdb28.png)

続いてハードウェアの設定をします。
メインメモリーは1024MBに設定します。
今回は最終的にwebブラウザで「hello world!」と表示するだけなので、メモリは少なくて問題ありません。
プロセッサー数は1CPUで十分なので初期設定のまま変更しません。
「EFIを有効化」は必要に応じてチェックをつけます。
CentOSのISOイメージがUEFI対応している場合、EFIを有効化してインストールすることが推奨されていますが、今回は有効化しなくてもwebサーバーを構築することができるのでチェックをつけません。
上記が完了したら「次へ」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/4ee13c87-a34c-dfa2-574b-8bce4580cb0d.png)

続いて仮想マシンハードディスクの設定をします。
「仮想ハードディスクを作成する」を選択してディスクサイズを8GBに設定します。
デフォルトでは20GBとなっていますが、今回は簡易的なサーバーを作るので8GBあれば十分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/f6f53f11-01bb-78e7-206c-efaff651ac48.png)

概要を確認して問題なければ完了ボタンを押します。
これで仮想マシンの作成完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/dfbed35c-4a8e-9889-6566-3eb8febc6c2c.png)

## 2.CentOSのインストール
「VirtualBoxマネージャー」ウィンドウに戻り、作成した仮想マシンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/31ba1145-e8be-22ec-fd2b-817cd5ad6d8e.png)

「起動」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/352e73d2-2e09-7cc2-6841-5ca1fd49d04b.png)

以下の画面が表示されるまで待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/83fce4ab-0822-d9bc-43a7-b0393d1e7a6d.png)

事前にダウンロードしておいたISOファイルの選択をして「マウントとブートのリトライ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/d487b3fa-0cd4-59a0-960b-fa962e91a02e.png)

下記の画面になるのでENTERを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/ef72cea6-7f55-8416-0584-02a946143815.png)

「Install CentOS 7」を選択してtabキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/9a6e1c28-9620-61b1-d124-f03f13a204e5.png)

以下の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/1d71edef-960f-facc-2456-fec4014141f2.png)

下記画像のように「inst.resolution=1024×768」を末尾に追加し、ENTERを押します。
1024×768の「x」はアルファベットのエックスです。
「=」の入力は「Shift」＋「ほ」のキーでは入力できません。
シフトを押さずに「へ」を押すことで入力できます。
この設定によりCentOSのインストール画面が見切れるのを防ぎます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/0eacab89-bdb4-554b-c650-c8debacf8aea.png)

少し待つと以下の画面になるので日本語を選択して続行をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/a593b0e6-cdfc-03c6-9dcc-b0d9ef94961b.png)

以下の画面になりますので、「ソフトウェアの選択」、「インストール先」、「ネットワークとホスト名」を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/382d1f2c-8674-449f-bf50-e4e04c0cdfca.png)

まず、「ソフトウェアの選択」をクリックします。
「最小限のインストール」が選択されていることを確認し、完了ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/065d9baa-f5c1-67d5-aeb7-9a972209f6ba.png)

続いて「インストール先」をクリックします。
ここではCentOSをどこにインストールするか決めます。
特に初期設定から変更せずに完了ボタンをクリックします。
設定を変更しているわけではないですが、一度「インストール先」をクリックして「完了」ボタンを押さないと設定が反映されません。
「ATA VBOX HARDDISK」は実際のハードディスクではなく、VirtualBoxによって作成された仮想ハードディスクを指します。仮想マシンはこの「ATA VBOX HARDDISK」を実際のハードディスクとして認識し、そこにOSをインストールしたり、データを保存したりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/5bdb6c4a-996c-11c5-505d-22a117228525.png)

最後に「ネットワークとホスト名」の設定をしますが、その前に事前準備をします。
「VirtualBoxマネージャー」ウィンドウに戻り、「ネットワーク」をダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/a6906514-a5c7-cfde-7809-f2f6f6de4a55.png)

初期設定では「割り当て」が「NAT」になっていますが、「ブリッジアダプター」に変更します。
初期設定の「NAT」では、ゲストOSとホストOSは同一ネットワークにはならず、ホストOSからアクセスできません。
「ブリッジアダプター」に変更することで、ゲストOSはホストOSのネットワークに直接接続され、ホストOSやその他のデバイスからアクセスできるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/d8f6d983-7347-76a4-c594-fa9ef278a7ae.png)

Ethernet(enp0s3)の隣のボタンをオンにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/e257cb42-758e-9a86-3dd7-b3d9d7d45dc9.png)
これによってIPアドレスを取得できます。
後々使用するのでIPv4アドレスをメモしておきます。
上記ができましたら完了ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/37f782c8-53ba-f26d-d058-41e54481f1d2.png)

上記の設定ができましたら、右下の「インストールの開始」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/4ed4959e-6165-8233-0233-080ffad12ddd.png)

下記画像のようにCentOSのインストールが開始されます。
インストールしている間にROOTの設定をします。
「ROOTパスワード」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/9592dd4c-d212-03a3-98e6-232c288fc546.png)

rootのパスワードを決めて完了ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/60ff46ec-3639-ef45-6f00-a88c4e33ccc1.png)

インストールが完了したら下記画像のようになるので、右下の「再起動」ボタンを押します。
これでCentOSのインストール完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/7eea534b-070a-4b27-9d77-33d6218aeb61.png)

## 3.webサーバーの作成
### 3-1.ログイン
再起動後少し待つと以下の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/98b90586-d94e-25c0-589c-8ea132c5dbca.png)

今回はrootでログインしてwebサーバーを作成します。
本来は誤操作防止などの観点からユーザーでログインしてsudoで作業することが推奨されていますが、今回は簡易的なサーバーを作成するだけなのでrootで作業します。
rootと入力してENTERを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/39553355-4aaf-ba36-9411-2552512782af.png)

CentOSのインストール時に設定したパスワードを入力してENTERを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/34748d82-e2cb-57bd-66b4-721b5a876efb.png)

### 3-2.Apacheのインストール、起動
下記コマンドを実行し、Apache HTTP Serverをインストールします。
```
yum install httpd
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/ac3c4a0b-8d63-c4b8-3b1c-38a8d8ab3fa7.png)

途中で2回ほど[y/N]と確認されますが、どちらも[y]と入力してENTERを押します。
`yum install -y httpd`を実行することで確認内容をすべて「yes」とすることもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/95721c4c-a9ea-1459-794e-5848d0960bb2.png)

続いて下記コマンドを実行し、Apache HTTP Serverがインストールできているか確認します。
```
yum list installed | grep httpd
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/6855b1f4-a2c5-0099-0a34-0f6df205c258.png)

以下のパッケージがインストールされていることがわかります。
httpd: Apache HTTP Serverの本体
httpd-tools: httpdに関連するツール群

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/5e29e2fa-fa8e-813a-188b-6b3ea80161a1.png)

これでApacheのインストールは完了です。
続いて下記コマンドを実行し、Apache HTTP Serverの起動に関する設定を確認します。
```
systemctl status httpd.service
```

Activeの項目がinactiveとなっており、Apache HTTP Serverが停止していることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/ac930b76-49dd-8f5a-9511-e3aa4599f9e5.png)

下記コマンドを実行し、Apache HTTP Serverを起動します。
```
systemctl start httpd.service
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/9349b78a-18ea-1753-b77f-2feb48137a84.png)

再び下記コマンドを実行します。
```
systemctl status httpd.service
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/4aa307c1-1b3e-e01d-23a7-ebdccde7c147.png)

Activeの項目がactiveになっていることが確認できます。
これでApache HTTP Serverの起動が完了です。
続いて下記コマンドを実行し、システムの起動時にApache HTTP Serverが動的に起動されるようにします。
```
systemctl enable httpd.service
```

### 3-3.ポートの開放

下記コマンドを実行し、ポートを確認します。
```
firewall-cmd --list-all
```
servicesの項目にhttpがないことが確認できます。この状態ではhttpサービスが有効になっておらず、ブラウザからアクセスすることができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/0a8c1c9e-9d3c-073f-d38c-99936499f007.png)

下記コマンドを実行し、ファイアウォールの設定を変更します。
```
firewall-cmd --zone=public --add-service=http --permanent
```

各オプションの意味は下記のようになります。
`--zone=public` : publicゾーンに対する操作を指定します。
`--add-service=http` : 指定したゾーンにhttpサービスを追加します。
`--permanent` : 再起動後も設定が維持されるようにします。
実行結果が以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/e4c94f8f-afc7-5380-485d-bd1f87aa9a13.png)

下記コマンドを実行し、ファイアウォールの設定変更を反映します。
```
firewall-cmd --reload
```
これにより、Webサーバーが使用するポート80を通信に利用できるようになります。
実行結果は以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/65ee06d3-deeb-7cd6-7a2c-01559a63b7b8.png)

改めて下記コマンドを実行し、ポートを確認します。
```
firewall-cmd --list-all
```

servicesの項目にhttpが追加されたことが確認できます。
httpサービスが有効になっており、ブラウザからアクセスすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/35e9aa7f-36c2-1385-b182-2b491f2b26b4.png)

続いて下記コマンドを実行します。
```
echo 'hello world!' > /var/www/html/index.html
```
これにより/var/www/html/ディレクトリにindex.htmlを作成し、テキストを "hello world!" にします。
/var/www/html/ディレクトリはApacheのインストール時に自動で作成されます。
このディレクトリにウェブページや画像、スタイルシート、JavaScriptファイルなどのウェブコンテンツを配置します。

最後にブラウザの検索バーにCentOSインストール時に取得したIPアドレスを入力し、今回作成したwebサーバーにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771776/8bb30cae-6ca2-f212-de5a-ed93b1f5063b.png)

上記画像のように無事表示することができました。
以上でwebサーバーの構築は完了です。ここまで見ていただきありがとうございました。

# 振り返り

今回初めてのwebサーバーを構築してみましたが、なかなか苦労したなと感じています。
構築記事などを参照しながら進めたのですが、全く同じように進めてもうまくいかない部分があったりしてその都度調べながら進めていました。
例えば、CentOSインストール時の画面が見切れて再起動ボタンが押せなくて先に進めなかったりしました。
参考にした記事には対処法が載っていなかったので、「virtualbox centOS インストール 見切れ」などと検索したり、chatGPTに質問したりして対処していました。

今回記事を作成することで、構築の一連の流れを復習できました。記事を見ながら操作しているときはどうしてその操作をするのかということを理解できずに進めてしまっているところがあったので、この記事を作成する際に、この操作ってなんで必要なんだっけと振り返って調べることで理解を深められたので良かったと思います。

次回以降、より複雑なサーバーを構築していく際に今回の経験が活かせればと思います。