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


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

前提

  • SELinuxがdisabledになっている

httpdのインストール

インストール

sudo yum install -y httpd 

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

起動と永続化

sudo systemctl start httpd
sudo systemctl enable httpd

PHPのインストール

remiリポジトリの追加

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

PHP7.4のインストール

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

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

php -v

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

httpdの再起動

sudo systemctl restart httpd

MySQLのインストール

MariaDBの掃除(念の為)

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

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

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

MySQLのインストール

sudo yum install -y mysql-community-server

起動と永続化

sudo systemctl start mysqld
sudo systemctl enable mysqld

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

sudo grep password /var/log/mysqld.log

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

mysql_secure_installation

mysql_secure_installation

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

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

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

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

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

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

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

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

MySQLへログイン

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

mysql -u  root -p


Enter password: 
mysql> 

認証方法の変更

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

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

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パスワードを入力します。

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

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

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から抜けるには

mysql> exit

とします。

標準設定

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

sudo vi /etc/my.cnf

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

my.conf
[mysqld]
default_authentication_plugin=mysql_native_password

MySQLの再起動

sudo systemctl restart mysqld

Firewallの設定

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

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

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

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

sudo firewall-cmd --list-all

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

動作確認

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

WWW

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

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

PHP

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

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

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

info.php
<?php

        phpinfo();                     

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

MySQL

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

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

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

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

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 にアクセスすると下記のようにユーザー一覧が表示されるはずです。

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

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

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

sudo yum update -y

リブートしてみよう

sudo shutdown -r now

考えよう

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