Amazon Linux 2 で LAMP (Linux/Apache/PHP/MariaDB)サーバー構築
AWS EC2 インスタンスの Amazon Linux 2 で LAMP 環境を構築する手順。
Amazon Linux 2 専用パッケージみたいなのがあって、 PHP と MariaDB をセットでインストールできる。
Amazon Linux 2 では、 Amazon Linux Extras というバージョン管理システムみたいのができて、 amazon-linux-extras リポジトリに PHP の最新版とか nginx とか、 PostgreSQL とかがあって、ここからインストールすることができる。そして、 Amazon Linux Extras の売りは、 Amazon がサポートしている(パッケージの)新バージョンが使えることらしい。
EC2 インスタンスの作成
インスタンス作成のとき、「手順 1 : Amazon マシンイメージ (AMI) を選択」で Amazon Linux 2 を選択。
「手順 6 : セキュリティグループの設定」で、 SSH (ポート 22)、 HTTP (ポート 80)、 HTTPS (ポート 443) を開けておく。「ルールの追加」ボタンを押して、ルールを入力する。
Route 53 や ロードバランサーとかその他の設定は [AWS] Bitnami WordPress構築 – AWS設定編 を参照してください。
LAMP サーバーをインストール
- EC2 インスタンスに SSH で接続する
$ ssh -i ~/.ssh/ファイル名.pem ec2-user@SERVER-IP
- ソフトウェアパッケージを更新( -y オプションを指定すると、確認メッセージを表示しないで更新される)
$ sudo yum update
- amazon-linux-extras リポジトリの一覧を表示
$ amazon-linux-extras list ... 11 vim available [ =8.0 ] 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 =7.2.13 =7.2.14 =7.2.16 =7.2.17 =7.2.19 ] 16 php7.1 available \ [ =7.1.22 =7.1.25 =7.1.27 =7.1.28 =7.1.30 ] 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 =10.2.10_7.2.13 =10.2.10_7.2.14 =10.2.10_7.2.16 =10.2.10_7.2.17 =10.2.10_7.2.19 ] 18 libreoffice available [ =5.0.6.2_15 =5.3.6.1 ] ...
- 「17 lamp-mariadb10.2-php7.2」 をインストールする。(このパッケージのことを Amazon Linux では「トピック」と呼ぶらしい。)
amazon-linux-extras リポジトリに MySQL は入っていない。 MariaDB は、 MySQL の後継なので特にこだわりがなければ MariaDB でいい。$ sudo amazon-linux-extras install lamp-mariadb10.2-php7.2 php7.2
途中で、
Is this ok [y/d/N]:
と聞かれるので、y
と入力する。 - PHP バージョン確認
$ php -v PHP 7.2.19 (cli) (built: Jun 12 2019 20:39:39) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
amazon-linux-extras リポジトリ一覧にある、 PHP 7.2 系の最新( 7.2.19 )がインストールされる。
- amzn2extra-lamp-mariadb10.2-php7.2 トピックからインストールできる PHP拡張モジュール一覧を確認
$ yum list php* | grep amzn2extra-lamp-mariadb10.2-php7.2 php-cli.x86_64 7.2.19-1.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7. php-common.x86_64 7.2.19-1.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7. php-fpm.x86_64 7.2.19-1.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7. php-json.x86_64 7.2.19-1.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7. php-mysqlnd.x86_64 7.2.19-1.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7. php-pdo.x86_64 7.2.19-1.amzn2.0.1 @amzn2extra-lamp-mariadb10.2-php7. php.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-bcmath.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-dba.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-dbg.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-devel.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-embedded.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-enchant.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-gd.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-gmp.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-intl.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-ldap.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-mbstring.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-odbc.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-opcache.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-apcu.x86_64 5.1.12-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 5.1.12-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-igbinary.x86_64 2.0.7-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 2.0.7-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-imagick.x86_64 3.4.4-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 3.4.4-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-libsodium.x86_64 2.0.21-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-mcrypt.x86_64 1.0.1-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-memcached.x86_64 3.0.4-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-msgpack.x86_64 2.0.2-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 2.0.2-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-oauth.x86_64 2.0.2-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-redis.x86_64 4.3.0-1.amzn2 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-ssh2.x86_64 1.1.2-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-uuid.x86_64 1.0.4-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pecl-zip.x86_64 1.15.2-3.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pgsql.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-process.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-pspell.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-recode.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-snmp.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-soap.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-xml.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2 php-xmlrpc.x86_64 7.2.19-1.amzn2.0.1 amzn2extra-lamp-mariadb10.2-php7.2
右側に
@
がついているのはインストール済み。
amzn2extra-lamp-mariadb10.2-php7.2 トピックをインストールすると、いくつかの拡張モジュールは、一緒にインストールされる。 - php 拡張モジュールのインストール
$ sudo yum install php-devel php-gd php-mbstring php-xml
php-mbstring
(日本語とかのマルイチバイト文字を扱う)、php-gd
(画像処理に使う)、php-devel
、php-xml
をインストールする。(特に使う予定ないなら入れなくてもいい。)
php-mbstring
は、 phpMyAdmin の依存ファイルなので、 phpMyAdmin 使うならインストール必須。 yum
で Apache 、 MariaDB をインストール$ sudo yum install -y httpd mariadb-server
- Apache 起動
$ sudo systemctl start httpd
- システムが起動する度に自動で Apache が起動する設定
$ sudo systemctl enable httpd
- httpd が有効であるか確認
$ sudo systemctl is-enabled httpd enabled
- MariaDB 起動
$ sudo systemctl start mariadb
- MariaDB 自動起動設定
$ sudo systemctl enable mariadb
- MariaDB が有効であるか確認
$ sudo systemctl is-enabled mariadb enabled
MariaDB のセキュリティ設定
データベース の root アカウントは、デフォルトではパスワードがないので、ここで設定する。
そのため、 root のパスワードを パスワードジェネレーター とか使って生成し、保管しておく。そのあと下記コマンドを実行。
$ sudo mysql_secure_installation
Enter current password for root...
と出るけど、初回はパスワードないのでそのまま Enter 押す。
Set root password? [Y/n]
パスワード設定しますか?と聞かれるので、 Y
と入力。
New password:
新しいパスワードを入力。画面に入力した文字は表示されないので、入力したら Enter 。
確認のため、もう一度新しいパスワードの入力を求められるので、入力して Enter 。
4 つの質問が出てくるので、全部 Y
と入力する。
Remove anonymous users? [Y/n]
(匿名ユーザーアカウントを削除するか?)
Disallow root login remotely? [Y/n]
(リモートルートログインを無効にするか?)
Remove test database and access to it? [Y/n]
(テストデータベースを削除するか?)
Reload privilege tables now? [Y/n]
(権限テーブルを再ロードするか?)
これで、 Elastic IP でアクセスすると、Apache テストページが表示される。
パーミッションの設定
Cyberduck からファイル編集( ec2-user に権限必要)とか、プログラムからディレクトリやファイルにアクセス( apache に権限必要)するには, ec2-user を apache グループに追加し、 Apache ドキュメントルート( /var/www )に、 apache グループのパーミッションを与える。
- ec2-user を apache グループに追加
$ sudo usermod -a -G apache ec2-user
- ログアウトする
$ exit
- 再ログインする
- apache グループの存在確認
$ groups ec2-user adm wheel apache systemd-journal
- Apache ドキュメントルートのグループ所有権を apache グループにする
$ sudo chown -R ec2-user:apache /var/www
- 所有権とパーミッションを設定
$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \; $ find /var/www -type f -exec sudo chmod 0664 {} \;
- 設定の確認
$ ls -l /var/www drwxrwsr-x 2 ec2-user apache 6 Apr 4 18:10 cgi-bin drwxrwsr-x 2 ec2-user apache 6 Apr 4 18:10 html
動作確認
phpinfo を表示してみる$ echo "" > /var/www/html/phpinfo.php
上記のパーミッションの設定とかが正しければ、これでファイルが作成される。
http://Elastic IP/phpinfo.php でアクセスすると、 phpinfo の画面が表示される。
タイムゾーン変更
デフォルトでは UTC となっているので、太平洋標準時(パシフィック・タイムゾーン)に変更する。
- 現在のタイムゾーンを確認
$ timedatectl Local time: Thu 2019-08-15 22:52:03 UTC Universal time: Thu 2019-08-15 22:52:03 UTC RTC time: Thu 2019-08-15 22:52:03 Time zone: n/a (UTC, +0000) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
- タイムゾーン一覧を表示
$ timedatectl list-timezones ... America/Toronto America/Tortola America/Vancouver America/Whitehorse America/Winnipeg America/Yakutat America/Yellowknife ...
いっぱい出てくるから、キーボードの「下」押して必要なタイムゾーンを探す。
一覧の表示を終了するには、q
を押す。 - タイムゾーンを設定する
日本時間は$ sudo timedatectl set-timezone America/Vancouver
$ sudo timedatectl set-timezone Asia/Tokyo
system_time_zone
変数)のデフォルトは、 OS のタイムゾーン(つまり、ここで設定したタイムゾーン)が設定される。タイムゾーンを確認する SQL
select @@time_zone;
select @@system_time_zone;
phpMyAdmin のインストール
php-mbstring
をインストールすること。
$ sudo yum install php-mbstring -y
$ sudo systemctl restart httpd
$ sudo systemctl restart php-fpm
- Apache ドキュメントルートに移動
$ cd /var/www/html
wget
コマンドで phpMyAdmin をダウンロード$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
AWS 公式のチュートリアルには、「https://www.phpmyadmin.net/downloads で最新の phpMyAdmin リリース用のソースパッケージを選択します。」と書いてあるけど、バージョンを選択(phpMyAdmin-4.9.0.1-all-languages.tar.gz)して wget コマンド打つとエラーになった。。。$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-4.9.0.1-all-languages.tar.gz --2019-08-16 00:00:00-- https://www.phpmyadmin.net/downloads/phpMyAdmin-4.9.0.1-all-languages.tar.gz Resolving www.phpmyadmin.net (www.phpmyadmin.net)... 111.181.169.26 Connecting to www.phpmyadmin.net (www.phpmyadmin.net)|111.181.169.26|:443... connected. HTTP request sent, awaiting response... 404 Not Found 2019-08-16 00:00:00 ERROR 404: Not Found.
- phpMyAdmin フォルダを作成し、パッケージを展開
$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-4.9.0.1-all-languages.tar.gz -C phpMyAdmin --strip-components 1
- ファイル を削除
$ rm phpMyAdmin-4.9.0.1-all-languages.tar.gz
- http://domain.com または Elastic IP/phpMyAdmin にアクセスしてみる
ログイン情報ユーザー : root パスワード : Maria DB のルートパスワード
php.ini の設定
$ 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 = 20M
# アップロードファイルのサイズ
# upload_max_filesize = 2M
upload_max_filesize = 20M
# timezoneの設定
# date.timezone =
date.timezone = America/Vancouver
# 最大実行時間(秒)
max_execution_time = 120
# デフォルトエンコーディング
mbstring.internal_encoding = UTF-8
# 文字コード検出のデフォルト値
mbstring.detect_order = auto
Syntax の確認
$ sudo service httpd configtest
# サービス再起動
$ sudo systemctl restart httpd
$ sudo systemctl restart php-fpm
確認・再起動コマンド一覧
使う機会はあるのに忘れるので。。。自分用
# MariaDB 起動
sudo systemctl start mariadb
# apache再起動
$ sudo systemctl restart httpd
# php-fpm再起動
$ sudo systemctl restart php-fpm
# php-fpmが動いてることを確認するコマンド
ps ax | grep php-fpm
# MariaDB バージョン確認
mysql -u root -e 'status' -p
# apacheバージョン確認
httpd -v
# PHP バージョン確認
php -v