EC2でwebサーバーを構築する方法

このページでは、EC2にAmazonLinux2で立ち上げたインスタンスをLAMP構成のwebサーバーに変更する手順を解説します。

構成は、apache2.4 mysql5.6 php7.2で組み上げます。

LAMP環境をインストールする。

まずはsshで接続して管理者権限になります。

$ ssh -i サーバー鍵.pem ec2-user@xxx.xxx.xxx.xxx
[ec2-user@ ~]$ sudo su -

AmazonLinux2には、専用にExtrasというパッケージ管理ソフトが入っており、こちらからLAMP環境が簡単に構築可能です。

[root@ip-172-31-22-79 ~]# amazon-linux-extras list
  0  ansible2                 available  [ =2.4.2  =2.4.6 ]
  1  emacs                    available  [ =25.3 ]
  2  httpd_modules            available  [ =1.0 ]
  3  memcached1.5             available  [ =1.5.1 ]
  4  nginx1.12                available  [ =1.12.2 ]
  5  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  6  postgresql10             available  [ =10 ]
  7  python3                  available  [ =3.6.2 ]
  8  redis4.0                 available  [ =4.0.5  =4.0.10 ]
  9  R3.4                     available  [ =3.4.3 ]
 10  rust1                    available  \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2 ]
 11  vim                      available  [ =8.0 ]
 12  golang1.9                available  [ =1.9.2 ]
 13  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 14  nano                     available  [ =2.9.1 ]
 15  php7.2                   available  \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8 ]
 16  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 ]
 17  libreoffice              available  [ =5.0.6.2_15 ]
 18  gimp                     available  [ =2.8.22 ]
 19  docker=latest            enabled    \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 20  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 21  GraphicsMagick1.3        available  [ =1.3.29 ]
 22  tomcat8.5                available  [ =8.5.31  =8.5.32 ]
 23  epel                     available  [ =7.11 ]

lamp-mariadb10.2-php7.2がありますが、こちらはmariadbが入ってきます。mysqlの構築のほうがスタンダードなので、php7.2を入れて、mysqlは別でインストールします。

[root@ ~]# amazon-linux-extras install php7.2
Installed:
  php-cli.x86_64 0:7.2.8-3.amzn2.0.2        php-fpm.x86_64 0:7.2.8-3.amzn2.0.2        php-json.x86_64 0:7.2.8-3.amzn2.0.2        php-mysqlnd.x86_64 0:7.2.8-3.amzn2.0.2       
  php-pdo.x86_64 0:7.2.8-3.amzn2.0.2       

Dependency Installed:
  php-common.x86_64 0:7.2.8-3.amzn2.0.2                                                                                                                                         

Complete!
  0  ansible2                 available  [ =2.4.2  =2.4.6 ]
  1  emacs                    available  [ =25.3 ]
  2  httpd_modules            available  [ =1.0 ]
  3  memcached1.5             available  [ =1.5.1 ]
  4  nginx1.12                available  [ =1.12.2 ]
  5  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  6  postgresql10             available  [ =10 ]
  7  python3                  available  [ =3.6.2 ]
  8  redis4.0                 available  [ =4.0.5  =4.0.10 ]
  9  R3.4                     available  [ =3.4.3 ]
 10  rust1                    available  \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2 ]
 11  vim                      available  [ =8.0 ]
 12  golang1.9                available  [ =1.9.2 ]
 13  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 14  nano                     available  [ =2.9.1 ]
 15  php7.2=latest            enabled    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8 ]
 16  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 ]
 17  libreoffice              available  [ =5.0.6.2_15 ]
 18  gimp                     available  [ =2.8.22 ]
 19  docker=latest            enabled    \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 20  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 21  GraphicsMagick1.3        available  [ =1.3.29 ]
 22  tomcat8.5                available  [ =8.5.31  =8.5.32 ]
 23  epel                     available  [ =7.11 ]

mysqlは公式のレポジトリを追加して落としてきます。以下のコマンドで5.7のレポジトリを追加できます。

[root@ ~]# yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y
[root@ ~]# yum-config-manager --disable mysql80-community
[root@ ~]# yum-config-manager --enable mysql57-community

これで最新ソースのものを入れられるようになったので、インストールします。

[root@ ~]#yum install -y httpd php mysql-community-server

後はサーバーの起動と自動起動設定を入れてインストール完了です。

[root@ ~]# systemctl start httpd mysqld
[root@ ~]# systemctl enable mysqld httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

これでこのサーバーはwebサーバーとしての動作は行えるのですが、アクセスするためにはIPを固定して、ポートを開ける必要があります。

サーバーのIPを固定する

厳密に言えばこの作業は必須ではありません。

elastic IP アドレス (EIP) は、固定IPの取得です。

デフォルトの取得のままでは、再起動時などのタイミングでIPの変更が行われてしまいます。

webサーバーやメールサーバーとして動かす場合にはドメインの取得をして、IPと関連付けをすることになりますが、

頻繁にIPが変わってしまっては面倒なことになります。

その他の場合でも、sshアクセスなどで接続先をいちいち変えないといけないのは面倒なので、EIPを割り振って固定しましょう。

まずはEC2の画面より、ネットワーク&セキュリテイ→Elastic IPを選択。最初は以下画面になっています。

最初はこんな画面になっていますので、こちらから新しいアドレスの割当をクリック

こちらはそのままクリックしてEIPを作成します。次に作成されたEIPをインスタンスに関連付けします。

EIPのTOP画面に戻ると、先程追加したEIPが見えるかと思いますので、クリックしてアクション→アドレスの関連付けを押します。

こちらからインスタンスを指定してEIPを関連付けします。

これで、以後アクセスは固定されたEIPのアドレスで行えるようになりました。

サーバーのポートを開ける

ポートはhttpやhttps、sshなどを使ってやり取りするための窓口のようなものです。

基本的にはセキュリティのため閉じておいて、必要に応じてポートを開けます。

今回はwebサーバーを想定して、追加でhttp(80)とhttps(443)を開ける手順を紹介しますので、

他のポートを開けたい場合にはポート番号を調べるか、プロトコルのウェルノウンポートなどの番号を調べて設定しましょう。

インスタンスより、設定したいインスタンスの詳細画面からセキュリティグループ名をクリック、

もしくは左のセキュリティグループから必要なインスタンスに関連付けられているセキュリティグループを選択します。

下のタブをインバウンドの編集をクリック、以下の画面を出します。

こちらの状態の場合、sshの22番のみ開放されています。

こちらを、このサーバーが使うポートの設定へ変更して上げます。

こちらで80と443のポートを開けることができました。もし、自分のIPからのみのアクセスにしたい場合にはソースのアドレスを自分のIPへ変えて下さい。

アクセスしてみる

コンフィグでドキュメントルートを確認して、Hello, World!してみましょう。

[root@ ~]# cat /etc/httpd/conf/httpd.conf 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# 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"

#
# Relax access to content within /var/www.
#

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[root@ ~]# echo Hello, World > /var/www/html/index.html
[root@ ~]# cat /var/www/html/index.html
Hello, World

ブラウザからEIPのアドレスにアクセスしてみて表示されていれば完了です。