UbuntuにApache、PHP7.2、MySQLをインストール : AWS

Pocket

AWS EC2のUbuntuへApache、PHP7.2、MySQLをインストールして、PHPからMySQLへ接続するメモです。

前提 EC2

  • Ubuntu Server 16.04 LTS (HVM), SSD Volume Typeを選択して、インスタンスを作成
  • セキュリティグループで、HTTPを許可

作業の流れ

  1. Apacheをインストール
  2. PHP7.2をインストール
  3. MySQLをインストール
  4. PHPからMySQLへ接続

上記に加えて、peclでPHPの拡張モジュール(Extension)をインストール方法を最後に記載します。

準備

Ubuntuにログインして、パッケージ管理ツールaptを最新にします。

# リポジトリ一覧を更新
$ sudo apt update
# パッケージを更新
$ sudo apt upgrade

Apacheをインストール

$ sudo apt install apache2

バージョンを確認します。

$ apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2018-06-07T19:43:03

Apacheは、下記コマンドで起動します。

$ sudo service apache2 start

PHP7.2をインストール

公式リポジトリは、PHP7.0のみを提供していました(2018年9月8日時点)。
提供されているPHPのバージョンは、下記コマンドで確認できます。

$ apt search php | grep php
...
php7.0/xenial-updates,xenial-security 7.0.30-0ubuntu0.16.04.1 all
...

リポジトリを追加

PHP7.2を提供しているリポジトリを追加します。
多くのサイトで、ppa:ondrej/phpリポジトリが紹介されているので、本記事でもppa:ondrej/phpを追加します。

# リポジトリ追加
$ sudo add-apt-repository ppa:ondrej/php
# リポジトリ一覧を更新(リポジトリを追加したら必ず更新)
$ sudo apt update 

リポジトリが追加されたことを確認します。

$ ll /etc/apt/sources.list.d
-rw-r--r-- 1 root root  124 Sep  8 00:49 ondrej-ubuntu-php-xenial.list

apt searchコマンドで、PHP7.2が使用可能なことを確認します。

$ apt search php | grep php7.2
...
...
php7.2/xenial 7.2.9-1+ubuntu16.04.1+deb.sury.org+1 all 
...
...

インストール

$ sudo apt install php7.2

バージョンを確認します。

$ php -v
PHP 7.2.9-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Aug 19 2018 07:16:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.9-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

モジュールを確認

$ php -m
PHP Modules
...
pcre
PDO
Phar
...

PDOのMySQLドライバは、本体と一緒には、インストールされませんでした。

PDO MySQLドライバをインストール

PHP7.2のドライバを検索します。

$ apt search php7.2 | grep php7.2
php7.2-mysql/xenial 7.2.9-1+ubuntu16.04.1+deb.sury.org+1 amd64

インストールします。

$ sudo apt install php7.2-mysql

インストールされたことを確認します。

$ php -m
PHP Modules
...
pcre
PDO
pdo_mysql <-- インストールされました
Phar
...

ちなみにsoファイルの以下のパスに作成されました。

/usr/lib/php/20170718/pdo_mysql.so

設定ファイルは以下のパスに作成されました。

/etc/php/7.2/mods-available/pdo_mysql.ini

設定ファイルの内容は以下のとおりです。

; configuration for php mysql module
; priority=20
extension=pdo_mysql.so

PHPをウェブで確認

$ sudo chown -R ubuntu /var/www
$ echo '<?php echo phpinfo();' > /var/www/html/phpinfo.php

Apacheを起動して、phpinfo.phpを確認します。
pdo_mysqlもインストールされていることを確認できます。

※ pdo_mysqlをインストールしていない状態では、PDOの欄はno valueになります。

MySQLをインストール

インストール

Ubuntu Server 16.04は、MySQLをインストールするときに、rootユーザーのパスワードを設定する画面が表示されます。
(パスワードを設定せずにインストールすると、rootでのログインがややこしくなるので設定することをおすすめします)

$ sudo apt install mysql-server 

バージョンを確認します。

mysql --version
mysql  Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using  EditLine wrapper

MySQLは、下記コマンドで起動します。

$ sudo /etc/init.d/mysql start

PHPからMySQLへ接続

DBを準備

CREATE DATABASE sample DEFAULT CHARACTER SET utf8mb4;

sampleデータベースには、以下のサイトを参考にして、animalsテーブルを作成して、値を挿入しました。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 3.6.9 AUTO_INCREMENT の使用

PHPファイルを作成

以下の内容で、/var/www/htmlにPHPファイルを作成しました。
(MySQLのrootのパスワードは、サンプルのためにわかりやすい文字列ubuntuにしています)

<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8">
<title>Sample</title>
</head>
<body>
<?php
$options = array(
    'PDO::ATTR_PERSISTENT' => true
);
try {
    $db = new PDO('mysql:host=localhost;dbname=sample;charset=utf8mb4', 'root', 'ubuntu', $options);
    $statement = $db->query("SELECT * FROM animals", PDO::FETCH_ASSOC);
    foreach($statement as $row) {
        echo $row['id'] . ': ' . $row['name'] . '<br>';
    }
} catch (PDOException $e) {
    echo $e->getMessage();
}
?>
</body>
</html>

確認

ブラウザで確認すると、以下のように表示されます。

PHPの拡張モジュール(Extension)をインストール

peclで拡張モジュールをインストールします。
例としてxdebugをインストールします。

手順

  1. aptで、php7.2-devパッケージをインストール
  2. aptで、php-pearパッケージをインストール
  3. peclで、Xdebugをインストール

php7.2-devをインストール

pecl installは、拡張モジュールをコンパイルして、soファイルを作成します。その過程で、phpizeが必要になります。

phpizeを提供するphp7.2-devパッケージをインストールします。

$ sudo apt install php7.2-dev

php-pearをインストール

peclは、php-pearパッケージに含まれています。

$ sudo apt install php-pear

拡張モジュールをインストール

例としてXdebugを、インストールします。

$ sudo pecl install xdebug

コマンドの結果は、以下のように表示されました。

Installing '/usr/lib/php/20170718/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.6.1
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/lib/php/20170718/xdebug.so" to php.ini

拡張モジュールのロードは、Apacheのモジュール版のPHPに対して行います。
/etc/php/7.2/apache2/php.iniに、zend_extension=/usr/lib/php/20170718/xdebug.soを追記して、Apacheを再起動すれば、Xdebugを使用できます($ sudo service apache2 restart)。

上記のように、php.inizend_extension=/usr/lib/php/20170718/xdebug.soを直接書いても良いですが、/etc/php/7.2/apache2/conf.dに、以下の内容のファイル(例 20-xdebug.ini)を作成する方法が一般的です1

20-xdebug.ini

extension=xdebug.so

各種の設定ファイルのパスは、phpinfo()で確認できます。

Loaded Configuration File   /etc/php/7.2/apache2/php.ini
Scan this dir for additional .ini files /etc/php/7.2/apache2/conf.d

Appendix

今回パッケージをインストールしていて思ったのは、なにが``どこへ格納されるのかの大枠を知っている、理解がより深まるということでした。

先輩に教えてもらった以下のドキュメントはとても勉強になりました。
今回インストールしたパッケージでは概ね以下のようになります。

  • (ユーザーが)インストールしたパッケージのバイナリ(プログラム)は/usr/bin以下に格納
  • バイナリが使うライブラリは/usr/lib以下に格納
  • 設定ファイルは/etc以下に格納
  • ログ関連は/var以下に格納

[Filesystem Hierarchy Standard(FHS)の概要]


  1. 本体と一緒にインストールされる拡張モジュールのiniファイルは、/etc/php/7.2/mods-availableディレクトリに作成されており、/etc/php/7.2/apache2/conf.dへシンボリックリンクが張られています。 

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。