備忘録 LAMP環境構築 + Nagiosでの監視の実装

:::note warn
Nagiosの設定は、まだ記載できていません。近日中に公開予定ですので、少しお待ちください。
:::

# 経緯
Nagiosを利用したサーバー監視の初歩を学べる機会があったため、その際の備忘録として記載しています。
そのため、細かい手順など間違っている可能性もあります。

# 構築環境
| 開発環境名 | バージョン |
|:-:|:-:|
| Linux  | Ubuntu,22.04LTS  |
| Apache  | Apache/2.4.52 (Ubuntu)  |
| MySQL  | 8.0.30-0  |
| PHP  | PHP 8.1.2  |
| Nagios  |   |

として構築を行う。
サーバー環境は、AWSで作る。

# AWSの構築&設定
1. AWSコンソールにログインする。

    https://aws.amazon.com/jp/
    
     アカウントを持ってない方を作成を！
     EC2インスタンスを起動させます。（東京リージョンで作成します。）
     EC2は下記の設定で作成することにしました。（<b>無料利用枠で使えます。</b>）
     | 設定名 | 設定内容 |
     |:-:|:-:|
     | 名前  |  web-server |
     | OS  | Ubuntu,22.04LTS  |
     | AMI IDだと  | ami-03f4fa076d2981b45  |
     | インスタンス  | t2.micro  |
     | キーペア(RSA作成)  | web-server.pem  |
     | VPC  | default  |
     | セキュリティグループ名  | web-server  |
     | 説明  | web-server's setting  |
     | セキュリティグループルール  | ssh(22),http(80)を許可  |
     | ストレージ  | 1x8GiB gp2ルートvol.  |
    
     以上の設定が完了したら、インスタンスを起動させる。

1. インスタンスのパブリックIPを確認して、ssh接続を行う。
    パブリックIPは、新スタンスの詳細の中に記載があります。
    先ほど、作成し、ダウンロードしたkeyの権限を変更します。（標準では、変更しないとssh接続ができません。）
    ```
       $ chmod web-server.pem
       $ ssh -i [Keyペアのパス] ubuntu@[インスタンスのパブリックIP]
    ```
    とりあえず、タイムゾーンがUTCなので、日本時間に変更しておく
    ```bash
       $ sudo su # root権限に
       $ timedatectl set-timezone Asia/Tokyo # TimeZoneをJSTに変更
   
    ```

# Apacheのインストール
これが公式サイト

https://httpd.apache.org

1. Apacheインストール
    ```bash
       $ sudo apt install apache2 # 本体のインストール
       $ apachectl -v #バージョン確認
    ```
    バージョンが表示されればインストール問題なくされている。

1. Apacheの自動起動設定を有効にする
    サーバーを立ち上げた際に、Apacheのプロセスが自動起動する様な設定を行う。
    ```bash
       $ sudo systemctl enable apache2.service # 自動起動を設定
       $ sudo systemctl status apache2 # 起動状況を確認
    ```
    状況確認のActiveのステータスが、active(running)になっていれば問題なく起動できている。
    また、`http://[EC2のパブリックIP]/`に接続すると、<b>Apache2 Default Page</b>が表示される。

1. VirtualHostの設定を行う
    VirtualHostは、1つのサーバーで複数のドメインを運用する機能である。
    今回は1つのドメインを想定しているが、今後の使用の可能性を考えて、念の為設定しておく。
    ホスト専用のディレクトリを作成し、その中にhtmlファイルなどを置く構造にしたいと思う。そのため、ホスト1つに対して、1つのディレクトリを持つようにする。
まずは、ディレクトリ作成。
    ```bash
       $ mkdir /var/www/html/sample-page1 #sample-page1というディレクトリを作る
    ```
    作成した、ディレクトリ内でindex.htmlファイルを作成する。
    これが、webサイトにアクセスした際に、初めに表示されるページになる。
    `$ sudo vi /var/www/html/sample-page1/index.html` 
    ```index.html
       <!DOCTYPE html>
       <html lang="ja">
       <head>
           <meta charset="UTF-8">
       </head>
       <body>
           <h1>こちらは、サンプルページ１です。</h1>
       </body>
       </html>
    ```
1. VirtualHostの設定ファイルの作成
    作成したファイルとhost名を紐付ける作業が必要となる。それを行うため、設定ファイルを新規で作成する。
    作成は、`/etc/apache2/sites-available/`に行うのが一般的らしい。
    ちょっと気になったので、`/etc/httpd/conf.d `をよくみるが、パスが違う。なぜ？と思い調べることに、

    > httpdはApache2と同じです。使用するOSによって異なります。たとえば、RHEL 6.2ではhttpdと呼ばれ、buntではApache2と呼ばれます。

    とのことらしい。OSによって呼び方が違うぽい。解決、設定を進める。

    `/etc/apache2/sites-available/`のディレクトリに移動し、`vhost.conf`というファイルを作成する。(.confなら名前はなんでもOK！日本語はだめよ。)
    `vi vhost.conf`で作成
    ```vhost.conf
        <VirtualHost *:80>
              DocumentRoot /var/www/html/sample-page1
              ServerName sample-page1.local
        </VirtualHost>
    ```
    DocumentRootには、先ほど作成したディレクトリのフルパスを設定。
    SeverNameには、好きなものを設定してください。上記の場合`http://sample-page1.local`と検索すると、index.htmlが表示されるサイトになります。
  
1. 作成した設定ファイルのシンボリックリンクを作成する。
    シンボリックリンクを作成しないとうまく機能しなかった。
    ```bash
       $ a2ensite /etc/apache2/sites-available/vhost.conf
    ``` 
    成功すると、再起動してね。と言われるので、言われた通り再起動。
    `$ systemctl reload apache2`

1. IPアドレスとドメインを紐づける。（クライアントのHostファイルで解決する。）
    本来で、あれば、作成したドメインの情報に基づいて行うのだが、今回は試験的な環境ということで、クライアントのhostsファイルに追加して、接続する方法をとる。
    本来の方法で、やるなら。AWSだったら、[route53](https://aws.amazon.com/jp/route53/)を使うことでできる。
    こちらは、無料枠の設定がなく、使ったら課金されるので注意が必要だ！

1. クライアントPCのhostファイルに情報を追記
    クライアントのPC（ssh接続を行なっているPC）のHostsファイルに下記の情報を追加します。
    設定ファイルは下記の場所にある。（筆者はMac環境のため、Windowsのパスはネットで調べた情報です。）
    ```
      Windows: C:\windows\system32\drivers\etc\hosts
          Mac: /private/etc/hosts
    ```
    上記ファイル内に次の情報を追記
    ```
       [EC2のパブリックIP] sample-page1.local
    ```
    ファイルの変更を保存後、http://sample-page1.local に接続すると、「こちらは、サンプルページ１です。」が表示されれ正常に動作しています。
    これで、Apacheの設定は一通り完了！

# MySQLのインストール
これがMySQLの公式サイト

https://dev.mysql.com

1. MySQLのインストール
    ```bash
       $ sudo apt-get install mysql-server # 本体のインストール
       $ mysql --version #バージョン確認
    ```
    バージョンが表示されればインストール問題なくされている。

1. MySQLの自動起動設定を有効にする
    ```bash
       $ sudo systemctl enable mysql # 自動起動を設定
       $ sudo systemctl status mysql # 起動状況を確認
    ```
    状況確認のActiveのステータスが、active(running)になっていれば問題なく起動できている。

1. データベースを作成する
    下記コマンドで、rootユーザーでMySQLにログイン
    ```
       $ sudo mysql -u root
    ```
    今回はテスト環境なので、ユーザーの追加は行わないことにした。
    とりあえず、この後導入する、PHPの導入確認などのため仮のデータベースを作成しておく。（内容は適当です笑）
    ```
       > CREATE DATABASE customer;
       > USE customer
       > CREATE TABLE company (number INT , name VARCHAR(50));
       > INSERT INTO company VALUES(1,"Sample Taro");
    ```
    データが追加されたか、確認する。
    ```
        mysql> select * from company;
        +--------+-------------+
        | number | name        |
        +--------+-------------+
        |      1 | Sample Taro |
        +--------+-------------+
        1 row in set (0.00 sec)
    ```
    しっかり、データがあるから問題なさそう。
    これで、MySQLの設定は完了！

# PHPのインストール
これがPHPの公式サイト

https://www.php.net

1. PHPのインストール
    ```bash
       $ sudo apt install php libapache2-mod-php # 本体のインストール
       $ php -v #バージョン確認
    ```
    バージョンが表示されればインストール問題なくされている。

1. PHPの情報をブラウザから見れる様にする
    `/var/www/html/sample-page1/`に移動し、下記の内容のPHPファイルを作成する。
    `sudo vi phpinfo.php`
    ```phpinfo.php
        <?php
            phpinfo();
        ?>
    ```
    作成し、保存し。次のページにアクセスする。http://sample-page1.local/phpinfo.php 
    正常に設定ができて入れば、phpの設定情報が表示される。

これによって、LAMP環境の構築が完了となる。
お疲れ様です！

次は、Nagiosの設定を行う。

:::note warn
Nagiosの設定は、まだ記載できていません。近日中に公開予定ですので、少しお待ちください。
:::