CentOS7.7にLAMP環境を構築する


ではLAMP環境の構築を行っています。

## 前提

* SELinuxがdisabledになっている

## httpdのインストール

### インストール

```bash
sudo yum install -y httpd 
```

>最初にsudoするときはパスワードを聞かれることがあるので入力します。

### 起動と永続化

```bash
sudo systemctl start httpd
sudo systemctl enable httpd
```

## PHPのインストール

### remiリポジトリの追加

```bash
sudo yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

### PHP7.4のインストール

```php
sudo yum install -y --enablerepo=remi,remi-php74 php php-devel php-mbstring php-mysqlnd
```

インストールされたPHPのバージョンを確認するには、

```bash
php -v
```

としてください（PHP7.4.xがインストールされているか確認します）。

### httpdの再起動

```bash
sudo systemctl restart httpd
```

## MySQLのインストール

### MariaDBの掃除（念の為）

```bash
sudo yum remove mariadb-libs -y
sudo rm -rf /var/lib/mysql
```

### MySQLリポジトリのインストール

```bash
sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
```

### MySQLのインストール

```bash
sudo yum install -y mysql-community-server
```

### 起動と永続化

```bash
sudo systemctl start mysqld
sudo systemctl enable mysqld
```

### 初期パスワードをログから取得する

```bash
sudo grep password /var/log/mysqld.log
```

表示されたパスワードをコピーしておきます。


### mysql_secure_installation

```bash
mysql_secure_installation
```

ウィザードが開始される。まず（MySQLの）パスワードが求められるので上記でコピーしたパスワードを入力（ペースト）する。

![スクリーンショット 2020-03-31 21.38.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/2831aa79-223b-2ec0-e702-c8a61b4302ca.png "スクリーンショット 2020-03-31 21.38.56.png")

新しいパスワードを求められるので設定します。

![スクリーンショット 2020-03-31 21.42.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/9f2d8df0-4c89-2a20-8102-95b4e990e260.png "スクリーンショット 2020-03-31 21.42.33.png")

パスワードが弱いと再度変更するか聞いてきます。このままでいいので、"n"を入力（y以外）。


![スクリーンショット 2020-03-31 21.42.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/c3a5de85-6a6f-fb98-886f-1106346b359f.png "スクリーンショット 2020-03-31 21.42.57.png")

anonymous usersを消去するか？と聞いてくるので y を入力。

![スクリーンショット 2020-03-31 21.43.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/bd5853fb-3f9a-fa12-f673-679771e7dd58.png "スクリーンショット 2020-03-31 21.43.14.png")

リモートからのroot接続を禁止するか？と聞かれるので y を入力。

![スクリーンショット 2020-03-31 21.43.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/87b5a9c2-c042-c978-0a9b-609d2ec6ff41.png "スクリーンショット 2020-03-31 21.43.23.png")

テストデータベースを消去するか聞かれるので y を入力。

![スクリーンショット 2020-03-31 21.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/8c7d8aa7-6c84-dda3-066b-8651ec57b1ae.png "スクリーンショット 2020-03-31 21.43.36.png")

設定をロードするか（反映するか）聞かれるので y を入力。

![スクリーンショット 2020-03-31 21.43.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/42dd3251-30e0-a8b5-f70f-6d882cc702b9.png "スクリーンショット 2020-03-31 21.43.44.png")

以上でMySQLの初期設定は完了です。


### MySQLへログイン

では、MySQLにログインしてみます。mysql -u [ログイン名] -p でEnterを押すとパスワードを聞かれるので入力します。
mysql>にプロンプトが変わればMySQLへのログインが完了です。

```bash
mysql -u  root -p


Enter password: 
mysql> 
```


### 認証方法の変更

MySQL8ではデフォルトの認証方法が[caching_sha2_password]に変更されていますが、これを従来の[mysql_native_password]に戻します。

現在のユーザーの認証方式がどうなっているかはmysqlにおいて、下記のようにすることで確認できます。

```bash
mysql> SELECT user, host, plugin FROM mysql.user;

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
```

全てのユーザーの認証方式が[caching_sha2_password]になっています。

#### ひとまずrootの認証方式を変更

ひとまずrootユーザーの認証方式を変更します。下記のを実行します。

>passwordとなっているところは実際の(mysqlの）rootパスワードを入力します。

```bash
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'password';
```

実行後、確認すると認証方式が変更されています。

```bash
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
```

なお、MySQLから抜けるには

```bash
mysql> exit
```

とします。

#### 標準設定

恒常的に設定を変更するためにはMySQLの設定ファイルである/etc/my.cnfを編集します。

```bash
sudo vi /etc/my.cnf
```

[mysqld]セクションに下記の記述を追記します。

```:my.conf
[mysqld]
default_authentication_plugin=mysql_native_password
```

### MySQLの再起動

```bash
sudo systemctl restart mysqld
```

## Firewallの設定

ここまでLAMPの設定を行ってきましたが、80番ポートがfirewallでブロックされているため外部からWebにアクセスことができないためポートを空けます。

```bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
```

>削除する場合は firewall-cmd --permanent --remove-port=80/tcp とします。

確認は下記のコマンドでできます。

```bash
sudo firewall-cmd --list-all
```

portsに80番が追加されています。

## 動作確認

では動作確認してみます。

### WWW

まずはWebサーバ（Apache）が正常に動作しているか。
下記にアクセスするとApacheの標準画面が見えるはずです。

http://localhost:8888 にアクセス。

![スクリーンショット_2020-03-31_22_05_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/2ce6cdc8-1403-5333-c359-4202cbacf13c.png "スクリーンショット_2020-03-31_22_05_34.png")


### PHP

次にPHPが動作しているか確認します。
確認用のファイルを/var/www/以下に作成します。

```bash
sudo vi /var/www/html/info.php
```

PHPの情報を出力するphpinfo();関数を実行してみます。

```php:info.php
<?php

        phpinfo();                     
```

http://localhost:8888/info.php にアクセスすると下記の画面が表示されます。


![スクリーンショット_2020-03-31_22_09_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/67f71949-8196-2c62-02e1-1a0bf02add4d.png "スクリーンショット_2020-03-31_22_09_49.png")

### MySQL

最後にMySQLが動作しており、PHPから連携できるか確認してみます。
確認用のファイルを作成します。

```bash
sudo vi /var/www/html/mysql.php
```

ひとまずMySQLに既に書き込まれているデータ（上記で利用したユーザー情報）を表示してみます。
下記のように記述します。

>passwordはMySQLのrootユーザーのパスワードを記述します。

```php:mysql.php
<?php

        ini_set('display_errors',true);
        $dbh = new PDO('mysql:host=localhost;dbname=mysql','root','password');
        $stmt = $dbh->prepare('select user,host,plugin from user');
        $stmt->execute();

        foreach($stmt as $row){
                echo $row['user'].'<br>';
        }
```

http://localhost:8888/mysql.php にアクセスすると下記のようにユーザー一覧が表示されるはずです。


![スクリーンショット 2020-03-31 22.18.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/d4707ec1-ea13-0640-2cd4-c6b9a4cb024d.png "スクリーンショット 2020-03-31 22.18.43.png")

ここまででL(inux),A(pache),M(ySQL),P(HP)の設定ができました。

## アップデートをかけておこう

一通りのインストールが完了したのでシステム全体をUpdateしておきます。

```bash
sudo yum update -y
```

## リブートしてみよう

```bash
sudo shutdown -r now
```



## 考えよう

* CentOSとは何か？CentOS以外の選択肢は何か？
* Apacheとは何か？Apache以外の選択肢は何か？
* MySQLは何か？MySQL以外の選択肢は何か？
* MariaDBとは何か？なぜ存在するのか？
* PHPは何か？PHP以外の選択肢は何か？
* yumとは何か？(dnfとは何か？）