高速になったと言われている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・スナップショットの取得
ここまで構築した環境のスナップショットを取ります。(参考)