【仮想マシン】Virtual Box Webサーバ構築

# ・VirtualBox Ubuntu WEBサーバー構築 

* ブラウザ上に __仮想環境にて編集した画面__ を表示させるサーバ構築をする

####元々VirtualBox内にUbuntuがあったため動作環境は設定済
サイトから拾ってきた情報を元に簡易的なWebサーバ構築を仮想環境内で行う
(現在Linuxを学習中のため、手を動かしたいという思いもあり、試しに仮想環境ないでやってみた次第です)
`コマンドプロンプトにてvi編集後、仮想環境内のブラウザにて編集したhtmlが表示できれば完成`

####1.サイト情報がyumコマンド：CentOSでなかったため”yumコマンドが見つかりません “と怒られエラーが続きはまる
パッケージインストールもできるとのことだったが、ディストリビューションの関係から 
`CentOS= yumコマンド`
`Ubuntu = aptコマンド`
とのことらしい

####2.再度新規でCentOSの仮想マシンを作成：この作業に関してもはまった
起動後top画面にて “no bootable medium fount halted” となりimageファイルが設定されていないことが分かりリファレンスからisoダウンロード
`VirtualBox内＞設定＞ストレージ`
落としたisoイメージを設定し無事起動
だが、初期設定時に”最小起動範囲”といった最小量メモリで作ってしまいGUIがない仮想マシンを作成してしまった...時間ロス

####3.再び元あったUbuntuに戻り構築できるか試した結果
Ubuntuに関してはaptコマンドということを知り(ググって時間溶かした)改めて作業開始

####エラー.ドメイン変更後のapache再起動にて ”httpd: Could not reliably determine the server’s fully qualified domain name”
Apacheの設定ファイル`「httpd.conf」の「ServerName」が設定されていない時`にこのエラーが表示されるらしい
名前を `localhost:80`と変換後解決


# ・作業工程

##1.Apacheのインストール
ApacheはUbuntuのデフォルトのソフトウェアリポジトリで利用できるため、従来のパッケージ管理ツールを使用してインストールする
最初に、ローカルパッケージインデックスを更新、最新のアップストリームの変更を反映させる

```php:ターミナル
$ sudo apt update
```

次に、apache2パッケージをインストール

```php:ターミナル
$ sudo apt install apache2
```

##2.ファイアウォール調整
Apacheをテストする前に、ファイアウォール設定を変更
外部からデフォルトWebポートへのアクセスを許可する必要がある
インストール中、ApacheはUFWに自らを登録し、ファイアウォールを介したApacheへのアクセスを有効/無効にするアプリケーションプロファイルをいくつか追加するらしい 　
ufwアプリケーションプロファイルを一覧表示する

```php:ターミナル
$ sudo ufw app list

>>	Output
	Available applications:
	Apache
	Apache Full
	Apache Secure
	OpenSSH
```

```php:ターミナル
$ sudo ufw allow 'Apache'
```

 
変更を確認する

```php:ターミナル
$ sudo ufw status
```

##3.Webサーバの確認
Webサーバーは既に稼働している必要がある
Ubuntu 20.04がApacheを起動する

systemd initシステムでサービスが稼働中であることを確認する

```php:ターミナル
$ sudo systemctl status apache2
```
デフォルトのApacheランディングページにアクセスして、ソフトウェアがIPアドレスを介して適切に実行されていることを確認する
サーバーのIPアドレスが分からない場合

```php:ターミナル
$ hostname -I
```
サーバーのIPアドレスが分かったら、ブラウザのアドレスバーに入力

> http:// <サーバのIPアドレス>

デフォルトのUbuntu 20.04 Apache webページが表示される


##4.仮想ホストの設定 
Apache Webサーバを使用している場合、仮想ホスト (Nginx のサーバーブロックに類似) を作成して設定の詳細をカプセル化し
単一のサーバーから複数のドメインをホストすることができる

<自分のIPアドレス部分>を自分の作成するドメイン名に置き換える必要がある
Ubuntu 20.04上のApacheには、`/var/www/html`ディレクトリからドキュメントを提供するように設定されている “デフォルトで有効になっている1つのサーバーブロック” というものがある
これは単一のサイトではうまく機能するが、複数のサイトをホストしている場合は扱いにくいことがある
そのため `/var/www/html`は変更をしない

代わりにクライアントの要求がどのサイトとも一致しないときに表示するデフォルトディレクトリとして`/var/www/html`を配置
test_web_serverサイトの`/var/www`内にディレクトリ構造を作成、test_web_serverのディレクトリを次のように作成する

```php:ターミナル	
$ sudo mkdir /var/www/test_web_server
```
$USER環境変数を使用してディレクトリの所有権を割り当てる

```php:ターミナル
$ sudo chown -R $USER:$USER /var/www/test_web_server
```
 
所有者には読み取り・書き込み・実行可能権限を
グループには読み取り・実行可能権限のみをそれぞれ付与

```php:ターミナル
$ sudo chmod -R 755 /var/www/test_web_server
```

nanoまたはお気に入りのエディタを使用し、サンプルindex.htmlページを作成


```php:ターミナル
$ sudo nano /var/www/test_web_server/index.html
```

HTMLを追加

``````php:ターミナル
/var/www/test_web_server/index.html
```

```php:vi作成
<html>
    <head>
        <title>Hello!</title>
    </head>
    <body>
        <h1>Webサーバ構築test</h1>
    </body>
</html>
```
 
完了したら、ファイルを保存して終了
Apacheがこのコンテンツを提供するには、正しいディレクティブで仮想ホストを作成する必要がある
`/etc/apache2/sites-able/000-default.conf`でデフォルトの設定ファイルを直接変更する代わりに
`/etc/apache2/sites-available/test_web_server.conf`で新しい設定ファイルを作成


```php
$ sudo nano /etc/apache2/sites-available/test_web_server.conf
```

次の構成ブロックに貼り付ける

```php:ターミナル
/etc/apache2/sites-available/test_web_server.conf
```

```php:ターミナル
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName test_web_server
    ServerAlias www.test_web_server
    DocumentRoot /var/www/test_web_server
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
```
 

ファイルを保存して終了
a2ensiteツールを使用し、次のようにファイルを有効にする

```php:ターミナル
$ sudo a2ensite test_web_server.conf
```
 
000-default.confで定義されているデフォルトのサイトを無効にする

```php:ターミナル
$ sudo a2dissite 000-default.conf
```
 
次に、設定エラーがないかテストをする

```php:ターミナル
$ sudo apache2ctl configtest
```
 
次の出力が表示される

```php:ターミナル
Output
Syntax OK
```

Apacheを再起動してこれらの変更を実装

```php:ターミナル
$ sudo systemctl restart apache2
```
 
これで、Apacheがドメイン名を提供しているはず

> http://_test_web_server_に移動し確認する
![web_server.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/ec4ae9ed-98e6-4081-1272-015fdd5f0c8c.png)

html内にてUFT-8指定していないと文字化けしたので <!DOCTYPE> などある程度の作法は必要でした。

---
現在ping-tの学習をしているが、暗記しているだけの作業になってしまい学習自体の進捗があまりよろしくありません。
Amazonに少しではあるが設計や構築用の書籍があるので、これを機に参考程度に何冊か読んでみます。。