概要
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>
を実行するとMySQLのコンソールが終了します。quit
これで、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が表示されているか確認します。
下図のように表示されていれば設定は完了です。