Help us understand the problem. What is going on with this article?

Amazon Linux2でLAMP環境を構築

More than 1 year has passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした