【さくらVPS】CentOS7+Nginx+PHP7+MariaDBの環境構築

さくらVPSでCentOS7+Nginx+PHP7+MariaDBの構築手順を説明する。

Nginxのインストールと設定については、以前の記事を参照。

【さくらVPS】Nginxのインストール手順

【さくらVPS】Nginxバーチャルホストの設定

PHP5系の削除

もしデフォルトでPHP5系の古いバージョンのPHPがインストールされている場合は、削除する。

以下のコマンドですでにPHPがインストールされていないか確認する。

sudo yum list installed | grep php

何も表示されなければ、PHPはインストールされていない。

もし、PHPがインストールされていれば、以下のコマンドで削除する。

sudo yum remove php*

remiレポジトリの追加

最新のPHPモジュールを取得するために、Redhat enterprise linux 7用のremiレポジトリをインストールする。

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

最後に、『完了しました!』が表示されればOK。

追加されたレポジトリファイルは「/etc/yum.repos.d/」に置かれるので、PHP関連のファイルがあるか確認しておく。

ls /etc/yum.repos.d/
CentOS-Base.repo       epel.repo          remi-php70.repo
CentOS-CR.repo         nginx.repo         remi-php71.repo
CentOS-Debuginfo.repo  remi-glpi91.repo   remi-php72.repo
CentOS-Media.repo      remi-glpi92.repo   remi-php73.repo
CentOS-Sources.repo    remi-glpi93.repo   remi-php74.repo
CentOS-Vault.repo      remi-glpi94.repo   remi-safe.repo
CentOS-fasttrack.repo  remi-modular.repo  remi.repo
epel-testing.repo      remi-php54.repo

PHP74パッケージのインストール

以下のコマンドでPHP7.4と必要なパッケージらをインストールする。

sudo yum -y install --enablerepo=remi,remi-php74 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

PHPがインストールされたか、バージョンの確認

以下のphpコマンドで、PHPバージョンを確認する。

php -v
PHP 7.4.1 (cli) (built: Dec 17 2019 16:35:58) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

上記のようになれば、PHP7.4がインストールされたこととなる。

php.iniの基本設定

「/etc/php.ini」ファイルを編集して基本設定を行う。

sudo vi /etc/php.ini

HTTPヘッダーのバージョン非表示

セキュリティ的にバージョンは非公開の方がいいので非表示にしておく。

expose_php = On
↓
expose_php = Off

アップロードサイズの変更

デフォルト設定ではアップロードできるファイルサイズが小さいので変更しておく。

post_max_size = 8M
↓
post_max_size = 20M
upload_max_filesize = 2M
↓
upload_max_filesize = 20M

タイムゾーンの設定

タイムゾーンは、”Asia/Tokyo”に設定しておく。アプリケーションで時間を扱う場合これを設定しておかないと挙動がおかしくなってしまいます。

;date.timezone =
↓
date.timezone = "Asia/Tokyo"

マルチバイト対応

日本語を利用する場合、マルチバイト対応の設定が必要になる。

mbstringの言語デフォルト値を定義するmbstring.languageを設定。

;mbstring.language = Japanese
↓
mbstring.language = Japanese

内部文字エンコーディングの設定をUTF-8へ設定する。

;mbstring.internal_encoding =
↓
mbstring.internal_encoding = UTF-8

HTTP通信時のinput文字コードもUTF-8に指定。

;mbstring.http_input =
↓
mbstring.http_input = UTF-8

HTTP 出力文字コードを指定するmbstring.http_outputは、自動変換を不可にするのでpassを指定する。

;mbstring.http_output =
↓
mbstring.http_output = pass

HTTP入力変換を有効化する。

;mbstring.encoding_translation = Off
↓
mbstring.encoding_translation = On

文字コードの自動検出の優先順位の設定するmbstring.detect_orderを編集する。autoにしておくとUTF-8がデフォルトで選択されるためautoにしておく。

;mbstring.detect_order = auto
↓
mbstring.detect_order = auto

変換不可の文字列がある場合、代わりの文字を表示させないようにmbstring.substitute_characterを有効にする。

;mbstring.substitute_character = none
↓
mbstring.substitute_character = none

これで、php.iniファイルの設定は以上。

php-fpmのインストール

php-fpm(FastCGI Process Manager)は、phpスクリプトをCGIで動かすためのパッケージ。

ちなみに、phpはモジュール版とCGI版があり、Apacheではモジュール版が使用される。Webサーバーのプロセス内でPHPを実行するやり方。

一方、CGI版は、Webサーバとは別プロセセスで実行させるやり方。Nginxではモジュール版がないので、CGI版を使っていくこととなる。

php-fpmパッケージは、remiレポジトリにあるため以下のコマンでインスールできる。

sudo yum -y install --enablerepo=remi,remi-php74 php-fpm

最後に、「完了しました!」が表示されればOK。

インストールされたかの確認は、以下のコマンドを入力。

sudo yum list installed | grep php-fpm
php-fpm.x86_64 7.4.1-1.el7.remi @remi-php74

上記のような表示になればOK。

php-fpm設定ファイルの変更

php-fpm設定ファイルを変更していく。

まずはバックアップをとる。

sudo cp -p /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org

www.confファイルの編集

以下のコマンドでwww.confを編集していく。

sudo vi /etc/php-fpm.d/www.conf

まずは、nginxのシステムユーザをwwwに変更する。

; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
↓
; RPM: apache user chosen to provide access to the same directories as httpd
user = www
; RPM: Keep a group allowed to write in log dir.
group = www

編集が終わったら保存しておく。

php-fpmの起動

php-fpmを起動する。

sudo systemctl start php-fpm

起動されているかの確認。

sudo systemctl status php-fpm

「Active: active (running)」になっていればOK。

php-fpm自動起動設定

サーバ再起動時にも、php-fpmが自動的に起動するように設定する。

sudo systemctl enable php-fpm

自動起動が設定されていることを確認。

sudo systemctl is-enabled php-fpm
enabled

上記のように「enabled」と表示されればOK。

Nginxの設定変更

次は、nginxでphp-fpmへスクリプトのファイルが動作するにようにNginx側の設定を変更する。

default.confを編集する。

sudo vi /etc/nginx/conf.d/default.conf

locationディレクティブへ、index.phpを追加する。

location / {
  index index.html index.htm;
}
↓ 
location / {
  index index.php index.html index.htm;
}

また、locationディレクティブの下へ、以下のPHP用の設定内容を追記する。

location ~ \.php$ {
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}

設定ファイルを保存して、以下のコマンドを入力して設定ファイルに間違いがないかチェックする。

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

上記のように「syntax is ok」と「test is successful」を表示がでればOK。

Nginxの再起動

Nginxの設定を変更したのでこれを反映させるため、Nginxを再起動する。

sudo systemctl restart nginx

テスト用のPHPファイルを作成

PHPが実行されているか、バーチャルホストのドキュメントルートへphpファイルを配置する。

sudo vi /home/www/yusuke.com/index.php

フィアルの内容は以下。

<?php
    phpinfo();
?>

ブラウザで動作確認

ブラウザを起動して、yusuke.comを表示する。

この動作確認では、DNS設定の必要で、ドメイン名(blog.pop-web.net)からIPが引けるようにしておく。ドメインをお名前ドットコム等のサービスで取得している場合は、ネームサーバ設定変更で、さくらのVPSのネームサーバを指定しておけば良い。

以下のようにphpinfoの表示がされればOK。

MariaDBバージョン5系の削除

MariaDBをインストールしていく。

バージョンは10系をいれていくので、すでにデフォルトでMariaDBがインストールされていないか確認。

sudo yum list maria*
インストール済みパッケージ
mariadb-libs.x86_64                          1:5.5.64-1.el7

上記のような表示が出た場合、MariaDBの5.5がインストールされていることとなる。

10系をインストールするので、このMariaDB5.5は削除する。

sudo yum remove mariadb-libs

以下のコマンドで削除されたかの確認。

sudo yum list installed | grep mariadb-libs

なにも表示されなければ削除されたことが確認できる。

MariaDBレポジトリの作成

現状のレポジトリを確認する。

ls -a /etc/yum.repos.d/
.                      epel-testing.repo  remi-php70.repo
..                     epel.repo          remi-php71.repo
CentOS-Base.repo       nginx.repo         remi-php72.repo
CentOS-CR.repo         remi-glpi91.repo   remi-php73.repo
CentOS-Debuginfo.repo  remi-glpi92.repo   remi-php74.repo
CentOS-Media.repo      remi-glpi93.repo   remi-safe.repo
CentOS-Sources.repo    remi-glpi94.repo   remi.repo
CentOS-Vault.repo      remi-modular.repo
CentOS-fasttrack.repo  remi-php54.repo

ここへ、MariaDBレポジトリを追加する。

レポジトリファイルの内容は、MariaDB公式サイトの作成画面を参考にする。

まず、MariaDB公式サイトのDownloads画面へいく。

環境に合わせて、以下のように選択していく。

「CentOS」→「CentOS 7 (x86_64)」→「10.4 [Stable]」

選択が終わると、自動でレポジトリファイルの内容が生成されるので、これをコピーしておく。

![スクリーンショット 2020-01-04 15.51.05](/Users/koga/Dropbox/md/投稿済み/img/スクリーンショット 2020-01-04 15.51.05.png)

次に、コピー先であるレポジトリファイルを作成する。

sudo vi /etc/yum.repos.d/mariadb.repo

先ほど、コピーした内容を貼り付ける。

※また、レポジトリを有効化するため最終行に「enable=1」を追記する。

# MariaDB 10.4 CentOS repository list - created 2020-01-04 06:50 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enable=1

これでファイルを保存すれば、レポジトリの追加完了。

yumコマンドでMariaDBをインストールする。

sudo yum -y install MariaDB-devel MariaDB-client MariaDB-server

最後に、「完了しました!」が表示されればOK。

インストールされたか、以下のコマンドで確認。

sudo yum list installed | grep MariaDB
MariaDB-client.x86_64                10.4.11-1.el7.centos            @mariadb
MariaDB-common.x86_64                10.4.11-1.el7.centos            @mariadb
MariaDB-compat.x86_64                10.4.11-1.el7.centos            @mariadb
MariaDB-devel.x86_64                 10.4.11-1.el7.centos            @mariadb
MariaDB-server.x86_64                10.4.11-1.el7.centos            @mariadb

上記のように、バージョン10.4が確認できればOK。

MariaDBの起動

MariaDBを以下のコマンドで起動する。

sudo systemctl start mariadb

起動したら、以下のコマンで正常起動しているか確認。

sudo systemctl status mariadb

Active: active (running)と表示されればOK。

MariaDBの自動起動設定

サーバーの再起動時もMariaDBが起動するように設定する

sudo systemctl enable mariadb

自動起動が設定されていることを確認。

sudo systemctl is-enabled mariadb
enabled

enabledが表示されればOK。

mysql_secure_installationの設定

MariaDBのセキュリティ設定をmysql_secure_installationで行う。

このmysql_secure_installationは何をしてくれるかというと、DB管理者のパスワード設定やサンプルDBの削除などしてくれる

MariaDBをインストール時には実行した方が良い。

以下のコマンドを実行。

sudo mysql_secure_installation

実行するとまず、『Enter current password for root (enter for none):』となるが、これはrootのパスワードが設定されている場合、そのパスワードを入力する。

今回はまだ設定していないので、enterキーを押下して進める。

現パスワードを確認する場合には以下のコマンドで確認できる

cat /var/log/mysqld.log | grep 'temporary password'

その後も[Y/n]で設定を聞かれるので、yを入力してEnterを押下。

「New password:」と出たら、新しいパスワードを入力する。

その後も、また[Y/n]で設定を聞かれるので、yを入力してEnterを押下。

最後に、『Thanks for using MariaDB!』と表示されれば設定は終了。

MariaDBの基本設定

文字コードをUTF-8として設定するため、設定ファイルのserver.cnfを編集する。

まずは、バックアップとる。

sudo cp -p /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.org

server.cnfを開いて編集する。

sudo vi /etc/my.cnf.d/server.cnf

[server]ディレクティブに「character-set-server=utf8」を追記する。

[server]
↓
[server]
character-set-server=utf8 

設定を反映させるためMariaDBを再起動。

sudo systemctl restart mariadb

MariaDBへの接続確認

MariaDBへ接続して確認をする。

以下の、コマンドで接続する。

sudo mysql -uroot -p[パスワード]

接続完了すると、以下のようなプロンプトが表示される。

MariaDB [(none)]>

作成されているデータベースを確認するため、以下のSQL文を入力

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.002 sec)

テスト用のDBを作成

以下のSQL文で、テスト用のDBを作成する。

MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.001 sec)

作成したDBへ接続。

MariaDB [(none)]> use test;
Database changed

作成したテスト用のDBの文字コードを確認し、UTF-8になっていることを以下のSQL文で確認する。

MariaDB [test]> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.001 sec)

UTF-8になっていることが確認できたので、テスト用で作成したDBは削除しておく。

MariaDB [test]> drop database test;
Query OK, 0 rows affected (0.003 sec)

削除したDBがなくなったことを以下のSQL文で確認する。

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

MariaDB接続を終わる場合は、以下のコマンドで終了する。

MariaDB [(none)]> quit
Bye

最後に

以上で、CentOS7 + Nginx + PHP7 + MariaDB10の環境が構築が完了。

これでようやく、PHPによるアプリケーションの実装を始めることができるようになった。

コメント