#4 さくらインターネットVPS で CentOS7 + nginx + PHP7 + MySQL 「PHP & MySQL編」

この記事は以下の記事の続きです。
#3 さくらインターネットVPS で CentOS7 + nginx + PHP7 + MySQL 「nginxインストール&設定編」

目次

  1. PHP7のインストール
  2. MySQLのインストール

1. PHP7のインストール

PHP7をインストールする前にリポジトリを追加する必要があります。少しややこしいのですがRemiリポジトリからPHP7をインストールする必要がありますが、Remiリポジトリを追加するにはEPELリポジトリが必要となるので2つのリポジトリを追加します。

1-1Epelリポジトリを追加。

yum install epel-release

このままだとyum updateを行った場合に公式パッケージがEPELリポジトリのパッケージに上書きされてしまいます。非公式なので一応、EPELは必要なときのみ利用するほうが安全です。EPELを無効にします。

1-2Epelリポジトリを編集して[epel]内の「enabled=1」を「enabled=0」に変更します。

vim /etc/yum.repos.d/epel.repo
[epel]
enabled=0
1-3Remiリポジトリを追加。

rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

ちなみにRemiリポジトリはデフォルトで自動的に使用されないように設定されているのでEpelと違い変更の必要はありません。

1-4PHP7をインストールします。必要そうなプラグインもOptisonでまとめてインストールします。

yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd
1-5PHPの初期設定を行っていきますがその前に例によってバックアップをとります。

cp /etc/php.ini /etc/php.ini.org

php.iniを編集していきます。

1-6タイムゾーンと言語設定を行います。

vim /etc/php.ini
;date.timezone = 
↓変更後
date.timezone = "Asia/Tokyo"

;mbstring.language = Japanese
↓変更後(コメントアウトをはずすだけ)
mbstring.language = Japanese

;mbstring.internal_encoding =
↓変更後
mbstring.internal_encoding = UTF-8

;mbstring.http_input =
↓変更後
mbstring.http_input = pass

;mbstring.http_output =
↓変更後
mbstring.http_output = pass

;mbstring.encoding_translation = Off
↓変更後(コメントアウトをはずすだけ)
mbstring.encoding_translation = Off

;mbstring.detect_order = auto
↓変更後(コメントアウトをはずすだけ)
mbstring.detect_order = auto

[任意] セキュリティを高めるため、PHPのバージョン情報を吐くのを停止します。

expose_php = On
↓変更後
expose_php = Off

[任意] 開発時にPHPのエラーを画面に吐かせるようにしたい場合は以下も行います。

display_errors = Off
↓変更後
display_errors = On

[任意] PHPプログラムからファイルのアップロードを行う場合には必要に好きなファイルサイズに変更します。

upload_max_filesize = 2M
↓変更後
upload_max_filesize = 16M

[任意] PHPプログラムからファイルのアップロードったりPOSTした場合の最大サイズを指定します。任意の値に変更します。PHPからファイルをアップロードするつもりがなければPOSTでそこまでのサイズが必要となることも滅多にないと思いますのでデフォルトで構いません。「memory_limit ≧ post_max_size ≧ upload_max_filesize」というサイズに設定するのが通常のようです。

memory_limit = 8M
↓変更後
memory_limit = 32M

post_max_size = 8M
↓変更後
post_max_size = 32M

upload_max_filesize = 2M
↓変更後
upload_max_filesize = 32M

[任意] 1リクエスト当たりの最大実行時間(秒)とメモリ使用量を必要なサイズに設定します。

max_execution_time = 30
↓変更後
max_execution_time = 60

memory_limit = 128M
↓変更後
memory_limit = 256M

今後MySQLをブラウザから直接、閲覧編集できるphpMyAdminを利用する場合にはphpMyAdminが利用するためのセッションを保存するディレクトリ(/var/lib/php/session)を設定する必要があります。phpMyAdminを利用する予定がない場合には不要です。

session.save_path = "/tmp"
↓変更後
session.save_path = "/var/lib/php/session"
1-7ウェブサーバーがnginxの場合PHPを動かすにはphp-fpmが必要となりますのでphp-fpmをインストールします。1-2で追加したRemiリポジトリからインストールしていきます。

yum install --enablerepo=remi,remi-php70 php-fpm
1-8php-fpmの設定を変更します。

vim /etc/php-fpm.d/www.conf
1-9以下を書き換えます。

user = apache
↓変更後
user nginx

group = apache
↓変更後
group = nginx

listen = 127.0.0.1:9000
↓変更後
listen = /var/run/php-fpm/php-fpm.sock

;listen.owner = nobody
↓変更後
listen.owner = nginx

;listen.group = nginx
↓変更後
listen.group = nginx
1-10nginx側にphp-fpmを適用させるためにnginxの設定ファイルを開きます。

vim /etc/nginx/conf.d/default.conf
1-11以下のように変更します。

#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

変更後↓

location ~ \.php$ {
    root           /usr/share/nginx/html/;
    fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
1-12OS再起動時などにphp-fpmを自動的に起動するように設定します。

systemctl enable php-fpm
1-13php-fpmを起動します。

systemctl start php-fpm

今後MySQLをブラウザから直接、閲覧編集できるphpMyAdminを利用する場合にはphpMyAdminが利用するためのセッションを保存するディレクトリ(/var/lib/php/session)を設定する必要があります。phpMyAdminを利用する予定がない場合には1-16まで飛ばしてOKです。

1-14phpMyAdminを利用する場合にはセッションディレクトリにphpMyAdminがアクセスできるようにパーミッションを変更します。

chown -R root.nginx /var/lib/php/session
1-15もしもSELinuxの無効設定などを行っていない場合、このままでは、SELinuxがMySQLをブロックしてしまいPHPからMySQLにアクセスができません。SELinuxを制御し、ローカルのMySQLからのアクセスを許可するように設定します。-Pオプションを指定することでサーバーの再起動後も有効のままとなります。尚、Web上で検索するとほとんどのウェブサイトでSELinuxを無効にするように設定しているようですが、その場合、セキュリティレベルが下がってしまいますので注意が必要です。

setsebool -P httpd_can_network_connect_db on

2. MySQLのインストール

2-1CentOS7ではデフォルトでMariaDBがインストールされているのでアンインストールします。

yum remove mariadb-libs
2-2MySQLの公式のyumリポジトリの追加します。

rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
2-3MySQLをインストールします。

sudo yum install -y mysql-community-server
2-4バージョンの確認は以下のコマンドでできます。

mysql --version
[chinpui@ik1-306-13101 ~]$ mysql --version
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper
2-5MySQLを起動します。

systemctl start mysqld.service

MySQLは初回の起動時にrootユーザーのパスワードをランダムに生成します。
そのため、パスワードを確認する必要があります。

2-6ログファイルから初期パスワードを確認します。

cat /var/log/mysqld.log | grep 'temporary password'
[root@ik1-306-13101 chinpui]# sudo cat /var/log/mysqld.log | grep 'temporary password'
2017-01-05T16:19:13.356212Z 1 [Note] A temporary password is generated for root@localhost: .Krdeoh+

上記の場合は最後の「.Krdeoh+」がパスワードになります。

2-7初期パスワードのままではわかりにくいので変更をします。

mysql_secure_installation
[root@ik1-306-13101 chinpui]# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 

パスワードを聞かれたら2-6で表示したパスワードを入力します。

2-8rootのパスワードを変更するか聞かれるので「y」で変更するとパスワードを聞かれるので任意のパスワードを入力します。MySQL5.7からは簡単なパスワードを受け付けない「validate_password」という機能が追加されたので複雑なパスワードである必要があります。(ここで仮に設定したパスワードをあとで簡易なものに変更することは可能です。)

Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
2-9匿名ユーザの削除を聞かれるので「y」で削除します。

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
2-10rootユーザーでリモートログインを禁止するかを聞かれるので「y」で禁止にします。

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
2-11データベース名「test」を削除するか聞かれるので「y」で削除します。

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
2-12権限テーブルを再読込するか聞かれるので「y」で再読込します。

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
2-13MySQLにログインします。

mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

ログインができました。

以上でさくらインターネットVPS で CentOS7 + nginx + PHP7 + MySQL の環境が整いました。
以降はCUIによる基本的なMySQLの操作です。
特に読む必要はありませんが、MySQLを操作したことがない方は参考にしてください。

2-14試しにデータベースを確認してみます。コマンドは大文字で表記してますが小文字でも構いません。テーブル名などとコマンドを区別しやすいようデータベースの操作については大文字で表記する慣習があるようです。

SHOW DATABASES;
mysql> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
2-15次はデータベースを作成してみます。

CREATE DATABASE test_db;
mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.00 sec)
2-16再度、データーベースを確認するとデータベースが作られていることがわかります。

SHOW DATABASES;
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
5 rows in set (0.00 sec)
2-17ユーザーを作成してみます。ユーザー名「chinpui」で、このユーザーのパスワードは「MyPassword-9089778」に設定してみます。

CREATE USER 'chinpui'@'localhost' IDENTIFIED BY 'MyPassword-9089778';

2-18ユーザーが作成されたか確認します。

SELECT HOST, USER FROM mysql.user;
mysql> SELECT HOST, USER FROM mysql.user;
+-----------+-----------+
| HOST      | USER      |
+-----------+-----------+
| localhost | chinpui   |
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
3 rows in set (0.00 sec)

正常に作成されていることがわかります。

2-19作成したデータベースを削除する場合は以下のコマンドです。

DROP DATABASE test_db;
mysql> DROP DATABASE test_db;
Query OK, 0 rows affected (0.00 sec)
2-20再度、データーベースを確認するとデータベースが削除されていることがわかります。

SHOW DATABASES;
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
2-21データベースからログアウトする場合は以下のコマンドです。

exit;
mysql> exit;
Bye
[root@ik1-306-13101 chinpui]# 
カテゴリー: PHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です