Amzon Linux に PHP7、MySQL5.7でLAMP環境構築

高速になったと言われているPHP7でWebアプリを稼働させる為、EC2上のAmazon LinuxにPHP7とMySQL5.7でLAMP環境を構築します。

1. MySQL5.7のインストール

yumレポジトリの追加とインストール

yumでMySQLをインストールします。最初から入っているyumのレポジトリは古いので、MySQL5.7のレポジトリを追加します。

$ sudo yum install http://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm

最新版のMySQLやリポジトリの情報は、MySQLのサイトにて確認して下さい。

レポジトリの追加ができたら、インストール可能な内容を確認します。(MySQL5.7があることを確認します)

$ yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community/x86_64 MySQL Connectors Community 16+5
mysql-tools-community/x86_64 MySQL Tools Community 38
mysql57-community/x86_64 MySQL 5.7 Community Server 130

yum info コマンドでも確認してみます。

$ yum info mysql-community-server
Loaded plugins: priorities, update-motd, upgrade-helper
964 packages excluded due to repository priority protections
Available Packages
Name : mysql-community-server
Arch : x86_64
Version : 5.7.15
Release : 1.el6
Size : 144 M
Repo : mysql57-community/x86_64
Summary : A very fast and reliable SQL database server
URL : http://www.mysql.com/
License : Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Under GPLv2 license as shown
: in the Description field.
Description : The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
: and robust SQL (Structured Query Language) database server. MySQL Server
: is intended for mission-critical, heavy-load production systems as well
: as for embedding into mass-deployed software. MySQL is a trademark of
: Oracle and/or its affiliates
:
: The MySQL software has Dual Licensing, which means you can use the MySQL
: software free of charge under the GNU General Public License
: (http://www.gnu.org/licenses/). You can also purchase commercial MySQL
: licenses from Oracle and/or its affiliates if you do not wish to be bound by the terms of
: the GPL. See the chapter "Licensing and Support" in the manual for
: further info.
:
: The MySQL web site (http://www.mysql.com/) provides the latest news and
: information about the MySQL software. Also please see the documentation
: and the manual for more information.
:
: This package includes the MySQL server binary as well as related utilities
: to run and administer a MySQL server.

MySQLのバージョンが、5.7.xx の xx が10以下だとセットアップ時にdefault_password_lifetimeというパラメータを0に設定する必要があるようです。(詳細は文末の参考サイト参照)

インストールします。

$ sudo yum install mysql-community-server

完了後、バージョンを確認します。

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

MySQL起動とログイン設定

MySQLを起動します。

$ sudo /etc/init.d/mysqld start
Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]

初回起動時には上記のようにデータベースの初期化処理などが行われます。

起動の初期化処理時に仮のrootユーザーのパスワードは、/var/log/mysqld.log のログファイル内にあります。

$ sudo cat /var/log/mysqld.log | grep root
2016-09-30T10:20:55.244250Z 1 [Note] A temporary password is generated for root@localhost: xxxxxxxxx

xxxxxxxxx が初期パスワードになります。こちらでログインします。

$ mysql -u root -p
Enter password:

これでログインできますが、初期パスワードのままだと何もできないようになっています。

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

以下で、初期パスワードを変更します。

mysql> ALTER USER root@localhost IDENTIFIED BY 'xxxx123!!';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> ALTER USER root@localhost IDENTIFIED BY 'Xxxx123!!';
Query OK, 0 rows affected (0.01 sec)

上記のように、英字が全て小文字だとエラーになります。以下の設定のように、英字の大文字・小文字・数字・記号が全て含まれる8文字以上である必要があるようです。

mysql> show global variables like 'validate%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

ここで、不要な初期ユーザーやテーブルも削除しておきます。その為に以下の mysql_secure_installation を使います。rootのパスワード変更もこれを使えばよかったかもしれません。

$ sudo mysql_secure_installation

サーバー起動時のMySQLの自動起動の設定も行っておきます。

$ sudo chkconfig mysqld on
$ chkconfig --list | grep mysql
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

2. apacheのインストール

apache をインストールします。

$ sudo yum install httpd

apache を起動します。

$ sudo /etc/init.d/httpd start
Starting httpd: [ OK ]

サーバー起動時のapacheの自動起動の設定も行っておきます。

$ chkconfig --list | grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

3. PHP7 のインストール

EPELレポジトリの有効化

AWSのこちらの説明を参考にWPELレポジトリを有効にします。

$ vi /etc/yum.repos.d/epel.repo

で、enabled=0 を見つけて enabled=1 に変更します。

Remiレポジトリのインストール

$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

EPELからlibwebp を入れます。gd-last が libwebpを必要としてますが、amzn-main.repo のはversionが合わない為、以下のようにします。

$ sudo yum -y install libwebp --disablerepo=amzn-main --enablerepo=epel

amzn-mainから必要なライブラリ郡を入れます。

$ sudo yum -y install libmcrypt libtool-ltdl libtidy libXpm libtiff gd-last autoconf automake

Remi70からPHP7をインストールします。

$ sudo yum -y install --disablerepo=amzn-main --enablerepo=remi-php70 php php-opcache php-devel php-mbstring php-mcrypt php-phpseclib-crypt-blowfish php-pecl-apc php-gd php-mysqlnd php-xml

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

$ php -v
PHP 7.0.11 (cli) (built: Sep 14 2016 08:38:51) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.11, Copyright (c) 1999-2016, by Zend Technologies

php.ini を設定します。サーバーのスペック、稼働するサービスにより適宜調整します。
ここでは、ファイルアップロード系の以下のパラメータを調整します。

upload_max_filesize = 1280M
post_max_size = 1536M
memory_limit = 2048M

4. タイムゾーンに設定

$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

/etc/sysconfig/clock の編集

ZONE="Asia/Tokyo"
UTC=False

参考:Amazon Linux でのタイムゾーン設定

5. ホスト名の設定

/etc/sysconfig/network の HOSTNAME にホスト名を設定し、reboot するとホスト名が設定さる。

6. PHP5.x系のソースで、mysql 関数を使っていた箇所の修正

PHP7系以降のバージョンでは、mysql関数が使用出来ない為、mysqliクラスまたはPDOクラスの関数等で書き換える必要がある。
こちらは別途記事を書こうと思います。

7.  AMI・スナップショットの取得
ここまで構築した環境のスナップショットを取ります。(参考


参考にさせて頂いたサイト

コメントを残す

コメントは当サイト運営者の承認後に反映されます。
お名前はニックネームでも結構です。

Comments are allowed only in Japanese. / 日本語が含まれない投稿は無視されますのでご注意ください。