2-3 : AWSの設定2(PHP,MySQL,IPの設定)

2019/05/29

概要

AWSの設定1の続きとしてPHP、MySQLのインストール・設定と、SFTPの設定、グローバルIPアドレスの設定を行います。

下図の赤くなっている部分を今回は設定していきます。

事前準備

事前にやっておくべきコンテンツ

AWSの設定1を事前にやっておくことが条件となります。

手順

手順は以下の通りです。

  • PHPのインストール
  • PHPの設定ファイルの変更
  • MySQLのインストール
  • MySQLのセキュリティ設定
  • MSQLの設定ファイルの変更
  • SFTPの設定
  • Elastic IP (グローバルIP) の設定

PHPの設定

PHPはWebプログラムを開発するための開発言語です。PHPをインストールして、作成したプログラムが動作するようにインストールします。
また、PHPエラーの出力先や、文字コード、タイムゾーンなどを変えるために、設定ファイルを変更をします。

インストール

phpはバージョン7.2をインストールします。
もともとサーバーに入っている、PHPのパッケージのバージョンを確認します。

$ yum list php
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
利用可能なパッケージ
php.x86_64                                    5.4.16-45.amzn2.0.6   

もともとのパッケージは5.4と古いので、7.2をamazon linux2のextras libraryというパッケージライブラリを利用してインストールします。

$ sudo amazon-linux-extras install php7.2

バージョンを確認します。

$ php -v
PHP 7.2.16 (cli) (built: Apr  3 2019 18:39:35) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

php7.2がインストールされています。

PHPの機能を拡張するためのモジュールをいくつかインストールします。日本語を取り扱うためのモジュールや、データベースに接続するためのライブラリです。

$ sudo yum install -y php-mbstring php-pdo php-gd php-mysqlnd

php設定ファイルの変更

次に、phpの設定ファイルを変更します。
PHPの設定ファイルは /etc/php.iniです。

$ sudo vi /etc/php.ini

以下の項目を変更します。
項目の前に ; がついている場合はコメントアウトされているので、外してください。

  • expose_php = Off :バージョン情報の非表示(374行目)
  • display_errors = Off :エラー表示の制御(実行中)477行
  • display_startup_errors = Off :エラー表示の制御(実行前)488行
  • log_errors = On:エラーメッセージをサーバーのエラーログに記録させる 498行
  • error_log = "/var/log/php_errors.log":エラーログの指定(587行追記)
  • default_charset = "UTF-8" :既定の文字コード設定 691行
  • date.timezone = Asia/Tokyo:タイムゾーン設定 902行
  • mail.add_x_header = Off:メールヘッダーへX-PHP-Originating-Script追加の防止 1005行
  • mbstring.language = Japanese :マルチバイト言語の設定 1509行

開発環境では、エラーが発生したときのエラー情報や色々な付加情報は有効にしておくべきですが、本番環境ではエラーメッセージが出たりヘッダーに余計な情報が表示されているのはよろしくないため無効化しています。

値が変更できたら、上書き保存して終了し、apacheを再起動します。

$ sudo systemctl restart httpd

phpの動作確認

phpinfoを書き出して、phpが動作しているかを確認します。
次のコマンドは、phpの設定情報を表示するプログラムをphptest.phpとして保存するコマンドです。

$ echo '<?php phpinfo(); ?>' > /var/www/html/phptest.php

ブラウザで http://<サーバーのiP>/phptest.php を開いてみましょう。

このようにPHPの設定情報が表示されていればPHPは動作しています。

確認後は必ずテストファイルは削除しましょう。

$ rm /var/www/html/phptest.php

MySQLの設定

データベースサーバーであるMySQLをインストール・設定します。データベースは、商品情報や顧客情報、購入履歴やその他ログなどを保存・管理しておく機能です。
今回インストール・設定するMySQLのバージョンは5.7です。

インストール

MySQL をインストールするためのリポジトリというものをダウンロードします。

MySQL Yum Repository http://dev.mysql.com/downloads/repo/yum/

$ sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

リポジトリ一覧を表示してMySQL5.7が有効になっているか確認します。

$ sudo yum repolist all | grep mysql

実行すると次のようにインストールできるMySQLの一覧が表示されます。

mysql-cluster-7.5-community/x86_64   MySQL Cluster 7.5 Community    無効
mysql-cluster-7.5-community-source   MySQL Cluster 7.5 Community -  無効
mysql-cluster-7.6-community/x86_64   MySQL Cluster 7.6 Community    無効
mysql-cluster-7.6-community-source   MySQL Cluster 7.6 Community -  無効
mysql-cluster-8.0-community/x86_64   MySQL Cluster 8.0 Community    無効
mysql-cluster-8.0-community-source   MySQL Cluster 8.0 Community -  無効
mysql-connectors-community/x86_64    MySQL Connectors Community     有効:  82+23
mysql-connectors-community-source    MySQL Connectors Community - S 無効
mysql-tools-community/x86_64         MySQL Tools Community          有効:     89
mysql-tools-community-source         MySQL Tools Community - Source 無効
mysql-tools-preview/x86_64           MySQL Tools Preview            無効
mysql-tools-preview-source           MySQL Tools Preview - Source   無効
mysql55-community/x86_64             MySQL 5.5 Community Server     無効
mysql55-community-source             MySQL 5.5 Community Server - S 無効
mysql56-community/x86_64             MySQL 5.6 Community Server     無効
mysql56-community-source             MySQL 5.6 Community Server - S 無効
mysql57-community/x86_64             MySQL 5.7 Community Server     無効
mysql57-community-source             MySQL 5.7 Community Server - S 無効
mysql80-community/x86_64             MySQL 8.0 Community Server     有効:     99
mysql80-community-source             MySQL 8.0 Community Server - S 無効

インストールするには、有効化する必要があります。
MySQL 8.0が有効になっているので、無効化し、MySQL5.7を有効化します。

$ sudo yum-config-manager --disable mysql80-community
$ sudo yum-config-manager --enable mysql57-community

インストールします。

$ sudo yum install mysql-community-server

インストール後、mysqlを起動します。

$ sudo systemctl start mysqld

MySQLが起動しているか、ステータスを確認します。

$  sudo systemctl status mysqld

次のようにステータスが Active:active(running) という表示になっていれば無事稼働しています。

● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 2019-05-02 12:05:08 JST; 43s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 20079 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 20006 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 20083 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─20083 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

 5月 02 12:05:04 ip-172-31-22-249.ap-northeast-1.compute.internal systemd[1]: Starting MySQL Server...
 5月 02 12:05:08 ip-172-31-22-249.ap-northeast-1.compute.internal systemd[1]: Started MySQL Server.

次に、MySQLを永続化します。これをしないと、サーバーを再起動したときに、 MYSQLも一緒に起動してくれません。

$ sudo systemctl enable mysqld

MySQL初期設定

パスワードはインストール時に初期値が割り当てられているので、ログを表示して確認します。

$ cat /var/log/mysqld.log | grep password

以下の root@localhost: xxxxxx の部分がパスワードとなるので、マウスでその部分をドラッグしてコピーしておきます。

2019-05-02T03:05:05.659431Z 1 [Note] A temporary password is generated for root@localhost: SNgons%G2.Er

次に、rootのパスワードの変更や、その他セキュリティ項目を設定する mysql_secure_instllationというウィザード(対話形式で処理を行う機能)を実行します。

mysql_secure_installationを実行するとパスワードを聞かれるので、先ほどコピーしたパスワードを貼り付けます。

新しいパスワードを聞かれるので、新しいパスワードを入力してください。
注意:この時に設定したパスワードは必ずどこかにメモしておいてください!忘れてしまうとデータベースに接続することができません。

$ mysql_secure_installation
Enter password for user root: xxxxxxxxxxx
New password: <新しいパスワード>
Re-enter new password: <新しいパスワード>

以降、セキュリティ設定項目の質問では全てy(yes)で実行してください。

Change the password for root ? ((Press y|Y for Yes, any other key for No) : Yes
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No): Yes
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Yes
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Yes
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Yes
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Yes

All done! と表示されれば終了です。

MySQL 設定ファイルの変更

MySQL設定ファイルで以下の項目を設定します。
キャッシュサイズやログサイズはMySQLが使用するメモリのサイズです。

  • 既定の文字コード:utf8mb4
  • キャッシュサイズ:メモリ全体の7~8割
  • ログサイズ:512MB

MySQLの設定ファイル /etc/my.cnf をviエディタで開きます。

$ sudo vi /etc/my.cnf

最後の行に以下を追加します。

/etc/my.cnf

character_set_server=utf8mb4
skip-character-set-client-handshake

innodb_buffer_pool_size=512M
innodb_log_buffer_size=8M

追加したら、保存して終了します。

設定を反映させるために再起動します。

$ sudo systemctl restart mysqld

mysqlに接続できるか確認します。

$ mysql -u root -p

実行すると、rootユーザーのパスワードを聞かれるので、先ほどsecure_installatioの実行時に指定したパスワードを入力します。
接続できると以下のようなMySQLのコンソールが表示されます。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

quit を実行するとMySQLのコンソールが終了します。
これで、MySQLの設定は終了です。

sftpの設定

sftp(SSH File Transfer Protocol)はssh接続を利用したファイル転送機能(ftp:File Transfer Protocol)です。
開発者やデザイナはローカル開発環境で変更したファイルをサーバーに反映させたい場合、FTPもしくはSFTPのクライアントツールでサーバーに接続して変更したファイルをアップロードして変更を適応させます。

ここでは、sshの設定ファイルを変更してsftpの機能を有効化します。

設定ファイルの変更

設定ファイル/etc/ssh/sshd_config を開きます。

$ sudo vi /etc/ssh/sshd_config

130行目あたりにある Subsystem sftp /usr/libexec/openssh/sftp-server のコメントを外して、上書き保存します。

/etc/ssh/sshd_config

# override default of no subsystems
- # Subsystem sftp  /usr/libexec/openssh/sftp-server
+ Subsystem sftp  /usr/libexec/openssh/sftp-server

※コメントが外れている場合は何もせずに終了してください。

確認

変更を保存後、sshを再起動します。

$ sudo sshd -t
$ sudo systemctl restart sshd

状態を確認します。

$ sudo systemctl status sshd

Active: active (running) と表示されていれば変更が成功しています。

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 火 2019-05-07 12:51:16 JST; 18s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 7886 (sshd)
   CGroup: /system.slice/sshd.service
           └─7886 /usr/sbin/sshd -D

グローバルIP(固定)の設定

AWSではEC2の作成時に動的なグローバルIPが自動的に振られますが、サーバーを停止して起動するとその都度IPが変更されます。
ドメイン名によるサーバー公開には、ドメイン名とサーバーを紐づけるための固定IPの設定が必要になります。そのため、固定IPとなるElastic IPの設定を行います。

Elastic IPの取得

AWSのマネジメントコンソールを開き、EC2ダッシュボードの左メニューにある Elastic IPをクリックします。

画面上にある、新しいアドレスの割り当てをクリックします。

次の画面で割り当てをクリックします。

新しい固定IPが発行されます。閉じるをクリックします。

何の用途で使用するのかわかりやすくするためにIPにNameタグを設定します。
Elastic IPの一覧で先ほど作成したIPのNameに紐づける対象のサーバー名もしくはドメイン名が決まっている場合はドメイン名を設定します。

下の図の例ではEC2のインスタンスに設定したNameタグと同じ値を設定しています。

EC2インスタンスとの紐づけ

Elastic IPの一覧画面上にあるアクションを開き、アドレスの関連付けをクリックします。

アドレスの関連付け画面で、以下の通りに設定します。
設定したら、関連付けをクリックします。

  • リソースタイプ:インスタンス
  • インスタンス:作成したインスタンスを選択
  • プライベートIP:インスタンスを選択すると自動的にプライベートIPが表示されるので表示されたIPを選択
  • 最関連付け:チェックしない

設定後インスタンスの一覧で画面下部に表示されるElastic IPに先ほど作成したIPが表示されているか確認します。
下図のように表示されていれば設定は完了です。