#0016

AWSでWebサーバー構築!Apache2.4, PHP7, MySQLの導入と初期設定(第4回)

2018-05-01 14:03 2020-06-17 17:05 "みやび"

みやびです(@miyabi_lab)。

連載『知識ゼロからAWS VPCネットワークを構築してセキュアな環境にEC2 Webサーバーを設置・運営する』の第4回です!

前回(第3回)の記事ではEC2インスタンスの作成方法からSSH接続までの流れを詳細に解説してきました。

今回は作成したEC2インスタンスにApache2.4を導入してWebサーバーとしての機能を持たせ、実際にインターネットブラウザ経由での接続(HTTP接続)を確立すると共に、PHP7およびMySQLについてインストールから初期設定まで解説していきます。

スポンサーリンク

前回(第3回)のおさらい

前回の「EC2を作成してSSH接続する」では、以下の様な状態まで作成することができました。

第3回の目標図

今回(第4回)の記事では、EC2に最新版のApache 2.4をインストールしてWebサーバーとしての機能を実装し、80番ポートを通じてHTTPアクセスできるようにするまでの流れを解説していきます。

また、MySQLやPHP7などのインストール方法についてもご紹介します。

完成イメージは以下の通りです。

第4回の目標図

Apache 2.4のインストール方法

それでは早速Apacheをインストールしていきましょう。

まずは前回新しく作成したsudoユーザーでSSHログインします。ログインには公開鍵認証を利用します。

# miyabiでログイン
$ ssh -i 【秘密鍵を保存した場所/***.pem】 miyabi@【パブリックIPアドレス】

ログインしたら、前回アップデートしたyumでhttpdをインストールします。

以下のコマンドを実行すると、メインのhttpdに加えて依存性関係でいくつかインストールするものが出てでてきます。

# yumでhttpd(apache)をインストール
$ sudo yum install httpd

==================================================================================================================================================================
 Package                               アーキテクチャー                 バージョン                                     リポジトリー                          容量
==================================================================================================================================================================
インストール中:
 httpd                                 x86_64                           2.4.6-67.amzn2.6.1                             amzn2-core                           1.2 M
依存性関連でのインストールをします:
 apr                                   x86_64                           1.4.8-3.amzn2.1                                amzn2-core                           104 k
 apr-util                              x86_64                           1.5.2-6.amzn2                                  amzn2-core                            92 k
 httpd-tools                           x86_64                           2.4.6-67.amzn2.6.1                             amzn2-core                            86 k
 mailcap                               noarch                           2.1.41-2.amzn2                                 amzn2-core                            31 k

トランザクションの要約
==================================================================================================================================================================
インストール  1 パッケージ (+4 個の依存関係のパッケージ)

総ダウンロード容量: 1.5 M
インストール容量: 4.3 M
Is this ok [y/d/N]: y

yを入力してEnterを押します。これでhttpdがインストールされました。簡単ですね!

余談ですが、リポジトリーとはデータの保管場所(どこからインストールするか)を示しており、amzn2-coreはAmazon Linux 2にデフォルトで実装されている専用リポジトリーです。

これ以外にもいくつか種類があり、後述するMySQLのインストールには別のリポジトリーを利用します。

話が逸れてしまいましたが、実際にhttpdを起動して、正しくインストールできているかチェックしておきましょう。

# httpdを起動
$ sudo systemctl start httpd

# 確認(active:runningになればOK)
$ sudo systemctl status httpd

# システム起動時に毎回起動するように設定
$ sudo systemctl enable httpd

# 確認
$ sudo systemctl is-enabled httpd

httpdの操作にはsystemctlコマンドを利用します。stopやrestartなどの操作も同じです。詳しくはこちらにまとまっています。

# CentOS7以降の書き方(Amazon Linux 2を含む)
$ sudo systemctl start httpd.service

# CentOS6以前の書き方
$ sudo service httpd start

# CentOS7以降でも使えるがリダイレクトされる
$ sudo service httpd start
  -> Redirecting to /bin/systemctl start httpd.service

# .serviceは省略可能です

たったこれだけです。色々説明を書いていますが、やったのはインストールして起動しただけです。

AWSコンソールのインスタンス項目から、EC2のパブリックIPアドレスを探してブラウザに直接入力し、アクセスできるか確認してみます。

Apache2.4の接続確認

このページが出れば成功です。今のところ何もコンテンツとなるファイルをサーバーに置いていないので、Apacheのデフォルトページが表示されています。

次は、初期設定をしたのち、実際に簡単なindexファイルを作成して再びアクセスしてみます。

httpd.confの初期設定

Apacheのインストールが完了したら、次はconfigファイルにあたるhttpd.confを編集していきます。

今回はcdコマンドで移動してviで編集します。

# 移動
$ cd /etc/httpd/conf

# 編集
$ sudo vi /httpd.conf

編集箇所は以下の通りです。

マイナスの行は#でコメントアウトし、プラスの行は追記してください。

## ServerAdminの変更
- ServerAdmin root@localhost
+ ServerAdmin <<YOUR E-MAIL ADDRESS>>

## ServerNameの変更
- ServerName www.example.com:80
+ ServerName YourServerName:80

## .htaccessの有効化
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
- AllowOverride None
+ AllowOverride All

また、ファイルの真ん中あたりに以下の記述があります。

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"

ユーザーが作成したEC2 Webサーバーにアクセスすると、デフォルトではこのドキュメントルートに指定した場所へと案内されます

つまり、「/var/www/html/index.html」のようにファイルを作成してHello World!の文字を書いておけば、ブラウザ上にそれが表示されるはずです。

実際にやってみましょう。

# ドキュメントルートに移動
$ cd /var/www/html

# 新規ファイルを作成
# sudoで作成すると所有者はrootになります
$ sudo touch index.html

# ファイルを編集(保存はescキーを押してから:wq)
$ sudo vi index.html

  <h1>Hello World!</h1>

保存できたら、先ほどのIPアドレスに直接アクセスしてみます。

Hello World 確認

Hello World!の文字が表示されれば成功です!

PHP7のインストール

PHPについては最新のPHP7.2をインストールします。

リポジトリはamzn2-coreで、、と言いたいところなのですが、実はこれではダメなんです。amzn2-coreのPHPバージョンを確認してみましょう。

$ sudo yum list | grep php
graphviz-php.x86_64                     2.30.1-19.amzn2               amzn2-core
php.x86_64                              5.4.16-43.amzn2.0.1           amzn2-core
php-bcmath.x86_64                       5.4.16-43.amzn2.0.1           amzn2-core
php-cli.x86_64                          5.4.16-43.amzn2.0.1           amzn2-core
php-common.x86_64                       5.4.16-43.amzn2.0.1           amzn2-core
php-dba.x86_64                          5.4.16-43.amzn2.0.1           amzn2-core
php-devel.x86_64                        5.4.16-43.amzn2.0.1           amzn2-core
php-embedded.x86_64                     5.4.16-43.amzn2.0.1           amzn2-core
php-enchant.x86_64                      5.4.16-43.amzn2.0.1           amzn2-core
php-fpm.x86_64                          5.4.16-43.amzn2.0.1           amzn2-core
php-gd.x86_64                           5.4.16-43.amzn2.0.1           amzn2-core
php-intl.x86_64                         5.4.16-43.amzn2.0.1           amzn2-core
php-ldap.x86_64                         5.4.16-43.amzn2.0.1           amzn2-core
php-mbstring.x86_64                     5.4.16-43.amzn2.0.1           amzn2-core
php-mysql.x86_64                        5.4.16-43.amzn2               amzn2-core
php-mysqlnd.x86_64                      5.4.16-43.amzn2.0.1           amzn2-core
php-odbc.x86_64                         5.4.16-43.amzn2.0.1           amzn2-core
php-pdo.x86_64                          5.4.16-43.amzn2.0.1           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-43.amzn2.0.1           amzn2-core
php-process.x86_64                      5.4.16-43.amzn2.0.1           amzn2-core
php-pspell.x86_64                       5.4.16-43.amzn2.0.1           amzn2-core
php-recode.x86_64                       5.4.16-43.amzn2.0.1           amzn2-core
php-snmp.x86_64                         5.4.16-43.amzn2.0.1           amzn2-core
php-soap.x86_64                         5.4.16-43.amzn2.0.1           amzn2-core
php-xml.x86_64                          5.4.16-43.amzn2.0.1           amzn2-core
php-xmlrpc.x86_64                       5.4.16-43.amzn2.0.1           amzn2-core
rrdtool-php.x86_64                      1.4.8-9.amzn2                 amzn2-core
uuid-php.x86_64                         1.6.2-26.amzn2                amzn2-core

なんということでしょう!このリポジトリではPHP5.4が最新バージョンです。

PHP5.4は2015年9月にセキュリティーサポートの期限がきれていますので、さすがにこれをインストールする気にはなれません。

ちなみにRubyも2.0なので少々古いですね。

実はPHPやRuby、Pythonなどの主要なパッケージについては、Amazon-Linux-Extrasという特別なリポジトリを使用するとこでより新しいバージョンをインストールすることができます。

これは以下のコマンド(そのまんま)で実行できます。

$ amazon-linux-extras
  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 ]

全部で15種類出てきました。

今回のお目当てはPHP7.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

OKですね。それでは同じコマンドを使ってインストールを開始します。

$ sudo amazon-linux-extras install php7.2

インストールが完了すると、先ほどの表記がenabledに変わっています。

念のため完了チェックも込みでバージョン確認しておきましょう。

$ amazon-linux-extras
 ~~
 13  php7.2   enabled  [ =7.2.0 ]
 ~~

$ php --version
PHP 7.2.0 (cli) (built: Dec 13 2017 00:38:30) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies

いやはや。とことん簡単ですね!

この流れで必要なモジュールをインストールしてしまいましょう。

PHP拡張モジュールのインストール

PHPには便利なモジュールがたくさん用意されていますが、最近では入ってないと話にならないようなものもいくつか存在します。

PHPインストール時点ではほとんどが付属されていないため、手動で入れていく必要があります。

Amazon Linux ExtrasでPHP7.2をインストールした場合は、amzn2extra-php7.2 リポジトリーが利用できるようになるので、これを利用して(指定しなくても勝手に利用されますが)インストールします。

まずは以下のコマンドで、どのような拡張モジュールが存在するのか確認してみましょう。

$ sudo yum list php* | grep amzn2extra-php7.2
php-cli.x86_64                   7.2.0-3.amzn2.1              @amzn2extra-php7.2
php-common.x86_64                7.2.0-3.amzn2.1              @amzn2extra-php7.2
php-fpm.x86_64                   7.2.0-3.amzn2.1              @amzn2extra-php7.2
php-json.x86_64                  7.2.0-3.amzn2.1              @amzn2extra-php7.2
php-mysqlnd.x86_64               7.2.0-3.amzn2.1              @amzn2extra-php7.2
php-pdo.x86_64                   7.2.0-3.amzn2.1              @amzn2extra-php7.2
php.x86_64                       7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-bcmath.x86_64                7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-dba.x86_64                   7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-dbg.x86_64                   7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-devel.x86_64                 7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-embedded.x86_64              7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-enchant.x86_64               7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-gd.x86_64                    7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-gmp.x86_64                   7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-intl.x86_64                  7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-ldap.x86_64                  7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-mbstring.x86_64              7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-odbc.x86_64                  7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-opcache.x86_64               7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-pgsql.x86_64                 7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-process.x86_64               7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-pspell.x86_64                7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-recode.x86_64                7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-snmp.x86_64                  7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-soap.x86_64                  7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-xml.x86_64                   7.2.0-3.amzn2.1              amzn2extra-php7.2 
php-xmlrpc.x86_64                7.2.0-3.amzn2.1              amzn2extra-php7.2 

必要なものを選んでyumでインストールしてください。右の列に「@」がついているものは、すでにインストールされているモジュールです。

$ sudo yum install php-cli php-common php-devel php-fpm php-gd php-mysql php-mysqlnd php-mbstring php-pdo php-xml

よく分からない場合は、php-common, php-gd, php-mysqlnd, php-mbstring, php-pdo, php-xmlあたりをとりあえず入れておいて、PHP7を使っていてエラーが出たら(インストール要請があったら)適宜導入する感じで全然構いません。

次はphpのiniファイルを設定していきましょう。

php.iniの設定

最初に変更しておくといい設定は以下の通りです。これだけやっておけば特に問題なくPHP7を利用できます。

今回に限らず、デフォルトのファイルを編集する前には必ずバックアップを取っておきます。

また、編集する箇所についても上書きせず、コメントアウトして次の行に新しく書くようにしましょう。

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 = php_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.language = Japanese
+ mbstring.language = Japanese

# 文字コード検出のデフォルト値を定義
- mbstring.detect_order = auto
+ mbstring.detect_order = auto

WordPressなどを利用する場合は、upload_max_filesizeが2Mであることによりアイキャッチをアップロードできないなどの問題に直面することが多々あります。

設定を変更する場合は、upload_max_filesize < post_max_size < memory_limit のサイズ順位を守りましょう。

php-fpmの設定(2019/02/19 追記)

PHP拡張モジュールとしてインストールしたphp-fpmについて、適切な設定を行なっていなかったことにより以下のようなエラーが発生することが判明しました。

# メモリー不足でFatal errorが発生する!(たった20KBで...!?)
[13-Feb-2019 04:27:28 UTC] PHP Fatal error:  Out of memory (allocated 4194304) (tried to allocate 20480 bytes) in /var/www/example.com/wp-includes/wp-db.php on line 1924
[13-Feb-2019 04:27:38 UTC] PHP Fatal error:  Out of memory (allocated 4194304) (tried to allocate 36864 bytes) in /var/www/example.com/wp-includes/wp-db.php on line 1924
[13-Feb-2019 04:27:49 UTC] PHP Fatal error:  Out of memory (allocated 10485760) (tried to allocate 40960 bytes) in /var/www/example.com/wp-includes/wp-db.php on line 1889
...

プロセスを確認したところ以下のような状態になっていました。

$ ps aux | grep php

apache     857  0.0  2.9 457452 58464 ?        S     2月08   4:23 php-fpm: pool www
apache     858  0.0  3.2 461816 65148 ?        S     2月08   5:06 php-fpm: pool www
apache     859  0.0  3.1 518992 63556 ?        S     2月08   4:04 php-fpm: pool www
...(あと30行くらい)

左から5つ目と6つ目の数値が、それぞれ「実メモリでの占有率」と「仮想分も含めた使用サイズ」になります。

こちら、単位がbytesかと思いきやKBなので、php-fpm 1プロセスあたりのメモリ使用量は40-60MBということになります。

EC2を無料枠で利用できるt2 microのような低スペックで運用していると、php-fpmのデフォルト設定ではメモリが追いつかなくて激重状態になったり、最悪の場合EC2が落ちる(もしくはフリーズ)してしまうような状況になりかねません。

これを回避するために、「/etc/php-fpm.d/www.conf」ファイルにて以下のような設定変更を行います。

簡単に言うと、php-fpmが利用するプロセス数を制御することでメモリーのオーバーフローを防ぐということです。

$ sudo vi /etc/php-fpm.d/www.conf

# dynamic:以下の設定の範囲内で子プロセスの数を動的に制御します(デフォルトのまま)
pm = dynamic

# 子プロセスの最大数を変更します
- pm.max_children = 50
+ pm.max_children = 10

# php-fpm起動時の初期プロセス数を変更します
- pm.start_servers = 5
+ pm.start_servers = 2

# 待機中の最小プロセス数を変更します
- pm.min_spare_servers = 5
+ pm.min_spare_servers = 2

# 待機中の最大プロセス数を変更します
- pm.max_spare_servers = 35
+ pm.max_spare_servers = 5

上のソース内でも説明した通り、pm.max_children, pm.start_servers, pm.min_spare_server, pm.max_spare_serverの設定を変更することで子プロセス数を制御することができます。

EC2 t2.microのメモリは1Gibなので最大10プロセスなら収まる予定です。

各種設定を反映する

最後にphp-fpmとhttpdを再起動して設定を反映させます。

# php-fpmの再起動
$ sudo systemctl restart php-fpm.service

# 記述ミスがないかどうかは、configtestで確認できます
# systemctlでは使えないので、以前のserviceを使います
$ sudo service httpd configtest (もしくは $ httpd -t)
Syntax OK

# エラーが出たらファイルの記述内容を確認しましょう。
# 再起動(どちらでも大丈夫です)
$ sudo systemctl restart httpd.service
$ sudo service httpd restart

以上でphp.iniの設定は完了です!素敵なPHPライフをご堪能ください!

もしこの時点で.phpファイルが表示できないようであれば、サーバーの再起動(AWSコンソールからEC2再起動もしくはrebootコマンド)を行えば、設定が正しければ見れるようになるはずです。

Composerのインストール(2020/06/17 追記)

ComposerはPHPライブラリ・パッケージ管理ツールで、Laravelなどのフレームワークを利用する場合には必須となります。

それ以外でも利用頻度が非常に高いので、あらかじめインストールしておきましょう。

# tmpディレクトリに移動
$ cd /tmp

# curlでComposerをダウンロード
$ sudo curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...
Composer (version 1.10.7) successfully installed to: /tmp/composer.phar
Use it: php composer.phar

# パスを通しておく(移動)
# /usr/local/bin/composer でもいいがrootユーザーはパスが通っていないので追加する必要がある
$ sudo mv composer.phar /usr/bin/composer

# 確認
$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.10.7 2020-06-03 10:03:56

以上でCompoer本体のインストールが完了しました。

これでようやく「composer create-project --prefer-dist laravel/laravel」のようなコマンドを利用することができるようになります。

Node.js, npmのインストール(2020/06/17 追記)

Web開発を行う上でnode.jsおよびnpmの利用は欠かせません。こちらもこの段階でサクッと入れておきましょう。

ここではNode.js(12.x)のインストール方法をご紹介します。npmはセットで利用できるようになります。

基本的な作業はNodesource公式にある説明の通りです。

# ビルドツール(gcc-c++)を入れておく
$ yum install gcc-c++ make

# リポジトリ取得
$ curl -sL https://rpm.nodesource.com/setup_12.x | bash -

# インストール
$ yum install nodejs

# Node.js確認
$ node -v
v12.18.0

# npm確認
$ npm -v
6.14.4

これだけです。rootユーザーで作業していない場合は、適宜sudoをつけてください。

以上でNode.jsとnpmが利用できるようになりました。

MySQLのインストール方法

最後にMySQLデータベースについてですが、今回はEDSなどは利用せず、Linuxに直接インストールします。

普通にyum install してもダメ!

冒頭でご紹介したように、Amazon Linux 2のデフォルトリポジトリであるamzn2-coreでは、yum install mysql を実行しても、mariaDBになってしまいます!

$ sudo yum install mysql
=======================================================================================================================================================================================================
 Package                                      Arch                                        Version                                                Repository                                       Size
=======================================================================================================================================================================================================
Installing:
 mariadb                                      x86_64                                      1:5.5.56-2.amzn2                                       amzn2-core                                      8.9 M

Transaction Summary
=======================================================================================================================================================================================================
Install  1 Package

お前じゃない。。

そもそもamzn2-coreリポジトリではMySQLをインストールできないので、公式のMySQLリポジトリをインストールして、そこからMySQLをインストールします。

Amazon Linux 2もCentOSなどと同様にRedHat系のディストリビューションなのでバグる可能性は少ないとは思いますが、以下のリポジトリはCentOS7用であるため若干の不安は残ります。

なので私が人柱になります(笑)ガンガンいこうぜ!

公式MySQLリポジトリをインストールして利用する

早速リポジトリをインストールします。2018年4月時点での最新版はmysql5.7でした。

(※余談ですが、CentOS7用でいけると思った理由は、Amazon Linux 2でのserviceコマンドがsystemctlコマンドにリダイレクトされるからです。これが起こるのはCentOS7以降なので。)

$ sudo yum install http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

これを使ってMySQLをインポートします。

$ sudo yum install --enablerepo=mysql57-community mysql-community-server

=======================================================================================================================================================================================================
 Package                                                    Arch                                  Version                                       Repository                                        Size
=======================================================================================================================================================================================================
Installing:
 mysql-community-libs                                       x86_64                                5.7.21-1.el7                                  mysql57-community                                2.1 M
     replacing  mariadb-libs.x86_64 1:5.5.56-2.amzn2
 mysql-community-libs-compat                                x86_64                                5.7.21-1.el7                                  mysql57-community                                2.0 M
     replacing  mariadb-libs.x86_64 1:5.5.56-2.amzn2
 mysql-community-server                                     x86_64                                5.7.21-1.el7                                  mysql57-community                                164 M
Installing for dependencies:
 mysql-community-client                                     x86_64                                5.7.21-1.el7                                  mysql57-community                                 24 M
 mysql-community-common                                     x86_64                                5.7.21-1.el7                                  mysql57-community                                272 k
 numactl-libs                                               x86_64                                2.0.9-6.amzn2                                 amzn2-core                                        29 k

Transaction Summary
=======================================================================================================================================================================================================
Install  3 Packages (+3 Dependent packages)

先ほどとは違いますね。--enablerepo を指定しているので、先ほど公式からインストールしたリポジトリが優先されます。

確認と各種設定

無事にインストールできたか確認して、実際に起動してみましょう。

// バージョン確認 兼 インストール確認
$ mysql --version

// サーバー起動時の自動起動をONにする
$ sudo chkconfig mysqld on

// MySQLを起動
$ sudo service mysqld start

Active: active (running) となっていればOKです。

最後にルートパスワードを設定しておきます。

今回インストールしたMySQL5.7からはデフォルトパスワードが設定されているので、まずはそちらを確認してコピーします(MySQL5.6以前はパスワード無しです)。

$ sudo cat /var/log/mysqld.log | grep "temporary password"
... [Note] A temporary password is generated for root@localhost: **********)

このパスワードを利用してログインします。

以下のコマンドを叩いてデフォルトパスワードをコピペしてください。セキュリティのためペーストしても表示されませんので、貼り付けた(と思ったら)そのままEnter。

$ mysql -u root -p
Enter password:

最後にパスワードを変更します。

僕はこちらのパスワードジェネレーターを利用しました。どうせ手打ちなんてしないので複雑にしておきましょう。

mysql> set password for root@localhost=password(‘**********');
Query OK, 0 rows affected, 1 warning (0.00 sec)

お疲れ様でした!出るときはquitかexitですので覚えておきましょう。

mysql> quit
Bye

第4回のまとめ

お疲れ様でした!ここまでの作業で、EC2にApache2.4を導入して設定を行い、Webサーバーとして稼働させHTTP経由でアクセスすることができました。

第4回の目標図

また、PHP7やMySQLを導入したことで、今後はデータベースを介した動的なコンテンツの製作も可能になります。

ここまでの流れで、WordPressでのブログ作成やCakePHP・Laravelなどのフレームワークを用いたWeb製作に取り掛かる準備が完了しました。

ただし、この状態だと稼働しているEC2インスタンスが直接インターネットと接続していることに加え、SSL接続(HTTPS)を設定していないため、高いセキュリティ下で運営されているとは言えません

次回(第5回)以降は、

  • 踏み台サーバーによるセキュリティの強化
  • ELB(ロードバランサー)を用いたHTTPS通信の実装

について解説していきます。

引き続きどうぞよろしくお願いいたします!

連載(知識ゼロからAWS VPCネットワークを構築してセキュアな環境にEC2 Webサーバーを設置・運営する)の記事一覧

この記事を書いた人

Webエンジニア PHPエンジニア HTML CSS JS jQuery PHP Laravel Python SQL WordPress AWS Linux Apache

【名前】 "みやび"

【関連】 株式会社PLAN / MIYABI Lab / JAPAN MENSA /

【MIYABI Lab】平日オフィスを勉強用に解放中!みんなで楽しくプログラミングを学べる環境を作る!詳しくはコチラ(https://miyabi-lab.space)◆HTML, CSS, JS, PHP, Python, SQL, AWS◆生物学系修士→製薬会社→Webエンジニア(株式会社PLAN)・MENSA会員

Twitterやってます

最新の技術ブログはこちら