Edited at

Amazon Linux2でLAMP環境を構築


CentOSと同じ感覚でLAMP環境を構築すると確実につまずくので、

ちょっと手順をまとめてみた。



Apache2.4のインストール

$ sudo yum install httpd

~~
~ すんなりインストールできるはず
~~

# httpdを起動
$ sudo systemctl start httpd

# 動いているか確認 ( active (running) )とか表示されるはず
$ sudo systemctl status httpd

# システム起動時に毎回起動するように設定
$ sudo systemctl enable httpd

# 確認(enabled)と表示されていば成功
$ sudo systemctl is-enabled httpd

※httpd.confの設定は割愛。


PHP7.2のインストール

php7.2をダウンロードしてきたりって考えてもうまくいきません。

まずここで躓くので、この記事はこのために書いているようなものデス。

amzn2-coreリポジトリのPHPバージョンを確認してみると・・・

$ sudo yum list | grep php

graphviz-php.x86_64 2.30.1-21.amzn2.0.1 amzn2-core
php.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-bcmath.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-cli.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-common.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-dba.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-devel.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-embedded.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-enchant.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-fpm.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-gd.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-intl.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-ldap.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-mbstring.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-mysql.x86_64 5.4.16-43.amzn2 amzn2-core
php-mysqlnd.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-odbc.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-pdo.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-pear.noarch 1:1.10.5-7.amzn2.0.1 amzn2-core
php-pecl-memcache.x86_64 3.0.8-4.amzn2 amzn2-core
php-pgsql.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-process.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-pspell.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-recode.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-snmp.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-soap.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-xml.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
php-xmlrpc.x86_64 5.4.16-45.amzn2.0.6 amzn2-core
rrdtool-php.x86_64 1.4.8-9.amzn2.0.1 amzn2-core
uuid-php.x86_64 1.6.2-26.amzn2.0.1 amzn2-core

このリポジトリPHP5.4が最新なんです。7.2とか入らないのです。

そこで下記のコマンドを実行します。

$ amazon-linux-extras

0 ansible2 available [ =2.4.2 =2.4.6 ]
2 httpd_modules available [ =1.0 ]
3 memcached1.5 available [ =1.5.1 ]
4 nginx1.12 available [ =1.12.2 ]
5 postgresql9.6 available [ =9.6.6 =9.6.8 ]
6 postgresql10 available [ =10 ]
8 redis4.0 available [ =4.0.5 =4.0.10 ]
9 R3.4 available [ =3.4.3 ]
10 rust1 available \
[ =1.22.1 =1.26.0 =1.26.1 =1.27.2 ]
11 vim available [ =8.0 ]
12 golang1.9 available [ =1.9.2 ]
13 ruby2.4 available [ =2.4.2 =2.4.4 ]
15 php7.2 available \
[ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 ]
16 php7.1 available [ =7.1.22 ]
17 lamp-mariadb10.2-php7.2 available \
[ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5
=10.2.10_7.2.8 =10.2.10_7.2.11 ]
18 libreoffice available [ =5.0.6.2_15 =5.3.6.1 ]
19 gimp available [ =2.8.22 ]
20 docker available \
[ =17.12.1 =18.03.1 =18.06.1 ]
21 mate-desktop1.x available [ =1.19.0 =1.20.0 ]
22 GraphicsMagick1.3 available [ =1.3.29 ]
23 tomcat8.5 available [ =8.5.31 =8.5.32 ]
24 epel available [ =7.11 ]
25 testing available [ =1.0 ]
26 ecs available [ =stable ]
27 corretto8 available [ =1.8.0_192 ]
28 firecracker available [ =0.11 ]

目当ての7.2がみつかったので、これをインストールしましょう

いちおう、詳細確認。

$ amazon-linux-extras info php7.2

php7.2 recommends php-cli # yum install php-cli
php7.2 recommends php-pdo # yum install php-pdo
php7.2 recommends php-fpm # yum install php-fpm
php7.2 recommends php-json # yum install php-json
php7.2 recommends php-mysqlnd # yum install php-mysqlnd

インストールコマンドは下記になります。

$ sudo amazon-linux-extras install php7.2

完了チェックも兼ねて、バージョンを確認

$ amazon-linux-extras

~~
15 php7.2=latest enabled \
[ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 ]
_ php7.1 available [ =7.1.22 ]
~~

これでphp7.2がインストールされました。

次に拡張モジュールです。

$ yum list php* | grep amzn2extra-php7.2

php-cli.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-common.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-fpm.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-json.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-mysqlnd.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-pdo.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-bcmath.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-dba.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-dbg.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-devel.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-embedded.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-enchant.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-gd.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-gmp.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-intl.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-ldap.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-mbstring.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-odbc.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-opcache.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-pecl-apcu.x86_64 5.1.12-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-apcu-devel.noarch 5.1.12-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-igbinary.x86_64 2.0.7-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-igbinary-devel.noarch 2.0.7-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-imagick.x86_64 3.4.3-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-imagick-devel.noarch 3.4.3-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-mcrypt.x86_64 1.0.1-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-memcached.x86_64 3.0.4-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-msgpack.x86_64 2.0.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-msgpack-devel.noarch 2.0.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-oauth.x86_64 2.0.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-ssh2.x86_64 1.1.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-uuid.x86_64 1.0.4-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-zip.x86_64 1.15.2-3.amzn2.0.1 amzn2extra-php7.2
php-pgsql.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-process.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-pspell.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-recode.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-snmp.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-soap.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-xml.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-xmlrpc.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2

必要なものを選んでyumでインストールします。

右の列に「@」がついているものは、すでにインストールされているモジュール。

とりあえずPHPにいれる拡張モジュールは下記でいいんじゃぁないか?

$ sudo yum install php-cli php-common php-devel php-fpm php-gd php-mysqlnd php-mbstring php-pdo php-xml


php.iniの設定

# 失敗した時のためにバックアップを取っておく

$ sudo cp /etc/php.ini /etc/php.ini.default

# viでファイルを開いて編集(保存は同じく:wq)
$ sudo vi /etc/php.ini

# HTTPヘッダにPHPのバージョンを記載しない
# expose_php = On
expose_php = Off

# メモリ上限を引き上げる
# memory_limit = 128M
memory_limit = 512M

# エラーログのパスを変更
# error_log = errors.log
error_log = /var/log/php_errors.log

# POST送信の許容サイズを引き上げる
# post_max_size = 8M
post_max_size = 16M

# アップロードファイルの許容サイズを引き上げる
# upload_max_filesize = 2M
upload_max_filesize = 8M

# timezoneの設定
# date.timezone =
date.timezone = Asia/Tokyo

# 文字コード検出のデフォルト値を定義
mbstring.detect_order = auto

いろいろ試しましたがこんな感じでいいらしいデス。

php.iniが正しいか確認

$ sudo service httpd configtest

Syntax OK

$ sudo systemctl restart httpd


MySQL8.0のインストール

とりあえず新しいものを入れて考えるスタイル。

$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

$ sudo yum install --enablerepo=mysql80-community mysql-community-server

初期パスワードチェックして、rootでログイン。

$ sudo cat /var/log/mysqld.log | grep "temporary password"

2018-XX-XXT00:XX:XX.XXXXXXZ 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: [初期パスワード]

$ mysql -u root -p
Enter password: [上記で確認できた初期パスワード]

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[一時的な任意のパスワード]';

-- ※初回のrootパスワード変更は必須です。これを設定しないと次ができません。

上記手順にて任意のパスワード設定するにあたり、いろいろな成約があります。

英数記号を混ぜて、8文字以上・・・こんなのは覚えられません。面倒です。

なので、下記の手順でもうすこし簡単なパスワードにします。

mysql> SHOW VARIABLES LIKE 'validate_password%';

+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| 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 |
+--------------------------------------+--------+

mysql> SET GLOBAL validate_password.length=6;
mysql> SET GLOBAL validate_password.policy=LOW;
--これでパスワードの長さのみをチェックするようになりました

mysql> ALTER USER 'root'@'localhost' identified WITH mysql_native_passwordBY '設定したいパスワード';

※ SQL8ではmysql_native_passwordをつけておかないと、デフォルトの「caching_sha2_password」が設定される。

  後述のphpMyAdminの外部接続で躓くので、ここで設定します。

これでmysqlの設定おわりです。


phpMyAdminのインストール

とりあえずダウンロードと解凍

cd /usr/local/src

$ sudo wget sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.tar.gz
$ sudo tar zxvf phpMyAdmin-4.8.3-all-languages.tar.gz

phpMyAdminへWebアクセスできるようwww配下へ設置

sudo mv phpMyAdmin-4.0.3-all-languages /var/www/phpMyAdmin

sudo chown -R root:apache /var/www/phpMyAdmin/


設定ファイルの修正

sudo vi /etc/httpd/conf.d/phpmyadmin.conf

中身----
Alias /phpMyAdmin "/var/www/phpMyAdmin"

<Directory "/var/www/phpMyAdmin">
Order allow,deny
Allow from all
</Directory>
---ここまで

sudo apachectl -t // 設定ファイルが正しいか確認
sudo systemctl restart httpd //アパッチ再起動

フルアクセスできるようにしておく
sudo mkdir /var/www/phpMyAdmin/config
sudo chmod 777 /var/www/phpMyAdmin/config

ここまでだとsql8の場合、外部からログインできないと思われる。

外部接続のphpMyAdminからログインしようとしても、下記のようなエラーがでるはず


エラー内容

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client



対策

my.cnfを設定する。ただしどこにあるかは環境によって異なるかもしれないため、下記を実行して設置候補から探す。

$ mysql --help | grep my.cnf

order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

# llコマンドでファイルを探していく
$ ll /etc/my.cnf
-rw-r--r-- 1 root root 1297 Nov 29 10:12 /etc/my.cnf
$ ll /etc/mysql/my.cnf
ls: cannot access /etc/mysql/my.conf: No such file or directory
$ ll /usr/etc/my.cnf
ls: cannot access /usr/etc/my.cnf: No such file or directory

みつかった、my.cnfを修正

$sudo vi /etc/mysql/my.cnf

# 末尾に
# default_authentication_plugin= mysql_native_password
# を追記する。

mysql、Apacheを再起動する。

$ sudo systemctl restart mysqld

$ sudo systemctl restart httpd

これでphpMyAdminへ外部から接続できるはずです。

もしできなかったらphpmyadmin.confにて下記の行を修正(追加)する。

# 外部接続設定?

#Allow from 127.0.0.1
Allow from all



最後に

これでAmazon Linux2にてLAMP環境ができたかと思います。

おつかれさまでした。

外部プログラムからmysqlにアクセスするためには、ホスト名をきちんと指定したユーザを用意する必要があります。

また、phpMyAdminから複数のDB接続を管理するためにも工夫が必要です。

そのあたりは、いずれそのうちに。


最後に、念の為のバージョン確認

$ php -v

PHP 7.2.11 (cli) (built: Oct 24 2018 17:51:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

$ mysql --version
mysql Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)

$ httpd -v
Server version: Apache/2.4.34 ()
Server built: Sep 1 2018 05:35:00