2017年12月13日、AWS から Amazon Linux 2 が発表されました。現時点では LTS Candidate(いわゆるリリース候補)を利用することができます。Amazon Linux 2 の特徴は、オンプレミスでの開発やテスト用に仮想マシンイメージも提供していることです。また、正式リリースされれば5年間のサポートも約束されますので、これから Amazon Linux 2 を利用する機会が多くなりそうです。そこで今回は、Amazon Linux 2 に LAMP環境をインストールする手順をまとめてみました。
参考資料:Amazon Linux 2 のご紹介
インストールの概要
Apache httpd は、Amazon Linux 2 標準のリポジトリ(amzn2-core)から、PHP と MariaDB(MySQLの派生版)は、Amazon Linux Extras リポジトリ(Amazon Linux 2 で新たに導入されたリポジトリ)からインストールします。
インストールされる各種ミドルウェアのバージョンは次の通りです。
- Apache httpd 2.4.6
- PHP 7.2
- MariaDB 10.2
タイムゾーンの変更
まず、インストールの前にタイムゾーンを変更しておきます。(旧Amazon Linux では /etc/sysconfig/clock と /etc/localtime を書き換えてました)
Amazon Linux Extras リポジトリの有効化
Amazon Linux Extras リポジトリからは以下のバージョンの各種ミドルウェアをインストールすることができます。(2017年12月29日現在)PHP7.2は 2017年11月末にリリースされたばかりなのでほんとに最新ですね。
0 ansible2 disabled [ =2.4.2 ]
1 emacs disabled [ =25.3 ]
2 memcached1.5 disabled [ =1.5.1 ]
3 nginx1.12 disabled [ =1.12.2 ]
4 postgresql9.6 disabled [ =9.6.6 ]
5 python3 disabled [ =3.6.2 ]
6 redis4.0 disabled [ =4.0.5 ]
7 R3.4 disabled [ =3.4.3 ]
8 rust1 disabled [ =1.22.1 ]
9 vim disabled [ =8.0 ]
10 golang1.9 disabled [ =1.9.2 ]
11 ruby2.4 disabled [ =2.4.2 ]
12 nano disabled [ =2.9.1 ]
13 php7.2 disabled [ =7.2.0 ]
14 lamp-mariadb10.2-php7.2 disabled [ =10.2.10_7.2.0 ]
初期状態では Amazon Linux Extras リポジトリのすべてのパッケージグループ(Amazon Linux ではこれを「トピック」と呼ぶそうです)が無効になっています。今回は LAMP環境をインストールしますので、その名も lamp-mariadb10.2-php7.2 トピックを有効にします。
参考資料:amazon-linux-extras コマンドのマニュアル
amazon-linux-extras コマンドの install オプションに続けて、有効にしたいトピック名を指定します。
lamp-mariadb10.2-php7.2 トピックが有効になりました。
14 lamp-mariadb10.2-php7.2=latest enabled [ =10.2.10_7.2.0 ]
トピックを有効にすると下の AWS おすすめ(?)のパッケージがインストールされます。
lamp-mariadb10.2-php7.2 recommends php-cli # yum install php-cli
lamp-mariadb10.2-php7.2 recommends php-pdo # yum install php-pdo
lamp-mariadb10.2-php7.2 recommends php-fpm # yum install php-fpm
lamp-mariadb10.2-php7.2 recommends php-json # yum install php-json
lamp-mariadb10.2-php7.2 recommends php-mysqlnd # yum install php-mysqlnd
lamp-mariadb10.2-php7.2 recommends mariadb # yum install mariadb
Amazon Linux Extras リポジトリからインストールできる PHP拡張モジュールは以下の通りです。
php-cli.x86_64 7.2.0-3.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7.2
php-common.x86_64 7.2.0-3.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7.2
php-fpm.x86_64 7.2.0-3.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7.2
php-json.x86_64 7.2.0-3.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7.2
php-mysqlnd.x86_64 7.2.0-3.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7.2
php-pdo.x86_64 7.2.0-3.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7.2
php.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-bcmath.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-dba.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-dbg.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-devel.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-embedded.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-enchant.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-gd.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-gmp.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-intl.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-ldap.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-mbstring.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-odbc.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-opcache.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-pgsql.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-process.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-pspell.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-recode.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-snmp.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-soap.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-xml.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
php-xmlrpc.x86_64 7.2.0-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
定番だった php-mcrypt 拡張モジュールがありませんが、これは PHP7.2 で mcrypt が削除されたためです。「かわりに OpenSSL関数 を使ってね!」ということらしいですね。
mcrypt 拡張モジュールは十年近くにわたって放置されており、極めて使いづらいものです。 そこで、この拡張モジュールを非推奨にしました。かわりに OpenSSL を使いましょう。 mcryptは PHP 7.2 でコアから削除されて、PECL に移る予定です。
LAMP環境のインストール
Amazon Linux Extras リポジトリのトピックを追加した時にインストールされたパッケージもありますが、依存関係もあるので再度インストールしています。
※バージョンは2017年12月29日時点のものです。
Apache httpd(2.4.6-67)←このバージョンでは HTTP/2 や Brotli圧縮が使えないので最新の Apache httpd(2.4.29)も Amazon Linux Extras リポジトリのトピックに追加されるといいですね。
yum -y install mod_ssl
yum -y install zlib-devel
PHP(7.2.0-3)
yum -y install php-devel
yum -y install php-pdo
yum -y install php-mysqlnd
yum -y install php-mbstring
yum -y install php-gd
MariaDB(5.7.19-1)
yum -y install mariadb-server
PHP の設定
エラーログの出力先を作成
chown apache /var/log/php
chmod 755 /var/log/php
・PHPの設定
vim /etc/php.ini
↓
expose_php = Off
;date.timezone =
↓
date.timezone = 'Asia/Tokyo'
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
↓
error_reporting = E_ALL & ~E_NOTICE
;error_log = php_errors.log
↓
error_log = "/var/log/php/php_errors.log"
Apache httpd の設定
SSL/TLS を有効にします。
vim /etc/httpd/conf.d/ssl.conf
#ServerName www.example.com:443
↓
DocumentRoot "/var/www/html"
ServerName www.example.com:443
初期状態で証明証は localhost のものが指定されています。このままでも動きますが、ブラウザでアクセスすると証明証エラーが表示されますので、ご自分が所有しているドメインの証明書を取得して書き換えてください。
↓
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
↓
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
↓
SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
関連記事:Let's Encrypt サーバー証明書の取得と自動更新設定メモ
関連記事:安全な SSL/TLS 設定にするための10のポイント
起動
自動起動設定
MariaDB の設定
MariaDB の文字エンコーディングを UTF-8 に設定します。
vim /etc/my.cnf.d/mariadb-server.cnf
(略)
pid-file=/run/mariadb/mariadb.pid
character-set-server=utf8 ←この1行を追加
起動
自動起動設定
MariaDB の初期設定です。下記コマンドを実行すると対話式で設定が始まります。(不要なユーザやDBを削除してくれます)
mysql_secure_installation
(略)
Set root password? [Y/n] Y
New password: <パスワード>
Re-enter new password: <パスワード>
(略)
Remove anonymous users? [Y/n] Y
(略)
Disallow root login remotely? [Y/n] Y
(略)
Remove test database and access to it? [Y/n] Y
(略)
Reload privilege tables now? [Y/n] Y
(略)
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
ログローテーション設定
設定ファイルのバックアップ用ディレクトリを作成しておきます。
Apache httpd ログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vim /etc/logrotate.d/httpd
/var/log/httpd/*log /var/log/php/*log { daily missingok dateext rotate 60 create 644 apache apache sharedscripts postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
・確認します
logrotate -dv /etc/logrotate.d/httpd
-----(下記のような表示であればOKです)-----
Handling 1 logs
rotating pattern: /var/log/httpd/*log /var/log/php/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)
MariaDB ログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vim /etc/logrotate.d/mariadb
/var/log/mariadb/*log { daily missingok dateext rotate 60 sharedscripts postrotate if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf ping &>/dev/null then /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf --local flush-logs \ flush-engine-log flush-general-log flush-slow-log fi endscript }
・MySQL の root ユーザのパスワードファイルを作成
vim /root/.my.cnf
user=root
password="<パスワード>"
パスワードを書いているのでパーミッションを変更
chmod 600 /root/.my.cnf
・確認します
logrotate -dv /etc/logrotate.d/mariadb
-----(下記のような表示であればOKです)-----
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /var/log/mariadb/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)
自動起動の設定確認
systemctl list-unit-files | grep -e httpd -e mariadb
-----(下記のような表示であればOKです)-----
mariadb.service enabled
mariadb@.service disabled
一度OSを再起動して、各種サービスが起動している事を確認しましょう。
ps aux | grep -e httpd -e mysqld
おわりに
以下は少しさわってみて気づいた 旧Amazon Linux からの変更点です。CentOS6 から CentOS7 の時の変更点とほぼ同じと考えてよさそうです。
- serviceコマンド、chkconfigコマンドが、systemctlコマンドに統合
- MySQL が MariaDB に変更
- ntpd が chronyd に変更
- timedatectl コマンドの導入
コメント