Help us understand the problem. What is going on with this article?

AWS EC2上にPHPサイトを立ち上げて、独自ドメインでアクセスできるようにするまでの全手順

はじめに

AWSにまったく触れたことがない人、サーバーを立てたことがない人を対象とした記事です。
AWSのEC2にPHPファイルを置いて、独自ドメインでWebサイトを公開するまでの手順をまとめました。AWSのアカウント取得は以下の記事を参照してください。
AWS上に静的なWebサイトを公開して、「Hello World」を表示するまでの全手順

AWSとは

AWSとは、Amazon Web Serviceの略で、Amazon社が提供する世界最大のクラウドサービスの名称です。
クラウドサービスとは、ネットワーク上にあるさまざまなサービスを必要に応じて利用するシステム形態のことです。

EC2とは

amazon elastic compute cloudの略で、Amazonが提供する仮想サーバーサービスの名称です。PHPを動かすことができるレンタルサーバーサービスがEC2です。Elasticは「しなやかな」という意味です。

全体の流れ

1. サーバーを作る
2. SSHでサーバーに接続する
3. Webサーバーをインストールする
4. PHPをインストールする
5. ファイルをサーバーに転送する
6. データベースをインストールする
7. データベースを作る
8. 独自ドメインでアクセスできるようにする
9. httpsでアクセスできるようにする (更新中)

サーバーを作る

EC2は最初、サーバーがないため、自分でサーバーを作る必要があります。EC2上に作った仮想サーバーをインスタンスといいます。ここで、インスタンスを作成します。

ECダッシュボードを開く

AWSのコンソールにログインします。検索ボックスに「EC2」と入力し、EC2のダッシュボードを検索します。
image.png

リージョンを選ぶ

EC2のダッシュボードを開きます。右上のリージョンを「東京」に変更します。地理的に近いリージョンの方が、Webページの表示速度が速いので、日本向けのWebページは東京を使うことがほとんどです。
image.png

インスタンスを作る

「インスタンス」をクリック->「インスタンスを作成」をクリック
image.png
image.png

AMIを選ぶ

AMIとは、Amazon Machine Imageの略で、初期設定が済んだディスクイメージを意味しています。
AMIを使用することで、あらかじめソフトがインストールされたサーバーを簡単につくることができます。
AWSでは、OSはLinuxがよく使われています。今回は、広く使用されている「Amazon Linux 2 AMI」というAMIを使用します。
image.png

インスタンスタイプを選ぶ

無料の「t2.macro」を選び、「次のステップ:インスタンスの詳細の設定」をクリックします。
image.png

インスタンスの詳細の設定

デフォルトの設定のまま、「次のステップ:ストレージの追加」をクリックします。
「ネットワーク」の項目はVPCを選びます。「vpc-XXXX(デフォルト)」を選択します。XXXXの部分はランダムな値が自動で生成されます。
サブネット」の項目は、今回はひとつのインスタンスしか使わないため、「優先順位なし」を選びます。
「自動割り当てパブリックIP」項目は、パブリックIPを設定します。「サブネット設定を使用(有効)」を選ぶと、上記で設定したサブネットがパブリックIPのデフォルト値になります。「サブネット設定を使用(有効)」を選ぶことがほとんどです。
「次のステップ:ストレージの追加」をクリックします。
image.png

ストレージの追加

デフォルトの設定のまま、「次のステップ:タグの追加」をクリックします。
image.png
image.png

タグの追加

「クリックしてNameタグを追加します」をクリックして、インスタンスの名称を入力します。「次のステップ:セキュリティグループの設定」をクリックします。
image.png

セキュリティグループの設定

セキュリティグループ名、説明に任意のテキストを入力します。警告メッセージは、「どこからでもアクセスできるがよいか」というものです。今回は個人情報を含まない一般的なサイトなため、問題ありません。
「ルールの追加」をクリックし、HTTP、HTTPSを追加します。これで、HTTPSのサイトを作ることができます。
「確認と作成」をクリックします。
image.png
「起動」をクリックします。
image.png

キーペアの作成

インスタンスにログインするためにログインするときの公開キーと秘密キーを設定します。公開キーと秘密キーの組み合わせをキーペアといいます。「キーペアのダウンロード」をクリックします。ダウンロードしたmyserverkey.pemファイルはインスタンスにSSHでログインするときに必要になります。
「インスタンスの作成」をクリックします。数分待ちます。
image.png
「インスタンスの表示」をクリックします。
image.png
「インスタンスの状態」が「running」になっていれば実行中です。
「パブリックDNS(IPv4)」、「IPv4パブリックIP」はSSHで接続する場合に使用するので、メモしておきます。
image.png

SSHでサーバーに接続する

インスタンスに繋ぐにはSSHを使います。
SSHを使うには、SSHクライアントが必要です。

SSHクライアント「Tera Term」をインストールする

WindowsにはSSHクライアントがインストールされていないため、SSHクライアントをインストールします。今回は、国産のオープンソースSSHクライアントである「Tera Term」を使います。ユーザーが非常に多く、さまざまな場所で使われています。

Tera Termダウンロードサイト
https://ja.osdn.net/projects/ttssh2/
image.png
image.png
ダウンロードしたexeファイルをダブルクリックし、インストールします。「コンポーネントの選択」では、標準インストールを選びます。

Tera Termを使ってインスタンスに接続する

デスクトップに作成されたTera Termのアイコンをダブルクリックして起動します。
TCP/IPのホストには先ほどメモしておいたAWSのパブリックDNS(IPv4)か、IPv4パブリックIPを入力し、OKボタンをクリックします。セキュリティ警告画面に遷移し、「続行」をクリックします。
SSH認証画面のユーザ名に「ec2-user」と入力します。先ほどダウンロードしたキーペアファイルを指定し、OKボタンをクリックします。
image.png
image.png
image.png

SSHに接続できました。もし、画面が真っ暗な場合は、Tera Termを再起動してください。

Webサーバーをインストールする

WebサーバであるApacheをインストールします。

管理者権限に切り替える

Tera Termに最初に接続したときのユーザは先ほど入力した「ec2-user」です。ec2-userは管理者権限がないため、Apacheをインストールできません。sudo -iと入力して、管理者権限であるrootに切り替えます。sudoコマンドとは、管理者権限でプログラムを実行するコマンドです。
image.png
exitと入力し、Enterを押すと、ec2-userに戻ります。
さらにexitを入力すると、SSHの接続が切れます。
ec2-userで捜査しているときは「$」が表示され、rootユーザのときは「#」が表示されます。

Apacheをインストールする

rootユーザに切り替え、yum install httpdと入力して、Apacheをインストールします。「httpd」はApacheのソフト名です。
image.png
インストールしてよいか聞かれるので、yを入力して、Enterを押します。
image.png

Apacheを起動する

systemctl start httpdと入力して、Apacheを起動します。
image.png
Enterを押しても何も画面に変化はありません。systemctl status httpdと入力し、「active」と表示されれば、起動できています。
image.png

ブラウザから接続してみる

ブラウザにパブリックIPアドレスを入力し、Webサーバとして稼働していることを確認します。
image.png

PHPをインストールする

sudo -iと入力して、rootユーザに切り替えます。
image.png

yum install phpと入力して、Enterを押します。インストールしてよいか聞かれるので、yを入力し、Enterを押します。これでPHPがダウンロードできました。
image.png

php -vと入力し、PHPがインストールされているかを確認します。
バージョンが表示されれば、問題なくPHPがインストールされています。
image.png

image.png

PHPを有効化する

systemctl restart httpdと入力して、Apacheを再起動し、PHPを有効化します。
image.png

ファイルをサーバーに転送する

PHPファイルを作る

PHPファイルを作ります。今回はPHPのバージョンを表示するシンプルなPHPファイルを作りました。

<?php
  echo "Hello world";
?>

アクセス権限の付与

作成したPHPファイルを「/var/www/html」のディレクトリに保存します。
デフォルトでは「/var/www/html」へのアクセス権限がないため、sudo chown -R ec2-user /var/www/htmlと入力し、ec2-userに書き込み権限を与えます。
image.png

PHPファイルをサーバーに転送する

Tera Termを使って、さきほど作ったPHPファイルをサーバーにアップロードします。
image.png
image.png

PHPで作ったWebサイトが表示されました。
image.png

データベースをインストールする

Amazon Linux 2では、MariaDBというデータベースが採用されてるため、MariaDBをインストールします。MariaDBはMySQLと完全な互換性を持ったデータベースで、phpMyAdminも使うことができます。
MariaDBはすべての機能を無料で使えるため、MySQLの代わりに使われることが増えています。

MariaDBをインストールする

yum install mariadb mariadb-serverと入力して、MariaDBをインストールします。インストールするか聞かれるので、yを押します。
image.png

MariaDBを起動する

systemctl start mariadbと入力して、MariaDBを初期化し、起動します。
image.png

systemctl status mariadbと入力して、「active」と表示されていることを確認します。
image.png

データベースとユーザーを作る

MariaDBは、SQLコマンドで操作します。

管理者権限でログインする

mysql -u root -pと入力して、rootユーザーでログインします。
パスワードは設定されていないため、何も入力せずに、Enterを押します。
image.png

管理者権限(rootユーザー)のパスワードを設定する。

update mysql.user set password=password('新しいパスワード') where user ='root' ; flush privileges;と入力し、rootユーザーのパスワードを設定します。
image.png

データベースを作る

create database 新しいデータベースの名前;と入力し、データベースを作ります。
image.png

rootユーザーに権限を付与する

grant all privileges on 上記で作ったデータベースの名前.* to 'root'@'localhost' ; FLUSH PRIVILEGES;
image.png

show databases;と入力して、データベースが作られたことを確認します。
image.png

exitと入力して、SQLモードを終了します。
image.png

ApacheとMariaDBを自動起動するよう設定を変える

現状、EC2インスタンスを起動すると、ApacheとMariaDBを手動で起動する必要があります。systemctl enable httpdsystemctl enable mariadbと入力します。これで、EC2インスタンスを再起動時に、自動でApacheとMariaDBを起動するようになりました。
image.png

独自ドメインでアクセスできるようにする

独自ドメインを設定する流れ

www.example.com のような独自ドメイン名でアクセスできるようにするには以下を行う必要があります。

1. ドメインを取得する
AWSのAmazon Route 53という機能で独自ドメインを取得します。

2. 固定IPアドレスを割り当てる
EC2インスタンスのパブリックIPアドレスは、ずっと同じであることが保証されていないため、変わってしまう可能性があります。Elastic IPという機能を使って、パブリックIPアドレスを固定化します。
Elastic IPは1ヶ月で3~4ドルかかるため、Elastic IPアドレスは使わなくなったら解放します。ただし、一度解放すると、二度と同じIPアドレスでアクセスできなくなります。Webサイトを再開する可能性がある場合は解放しないようにします。

3. ドメインを関連付ける
固定IPアドレスと独自ドメインを関連付けます。

ドメインを取得する

Amazon Route 53というDNS(ドメインネームサービス)を用いて、独自ドメインを取得します。
image.png
「Domain registration」をクリックします。取得したいドメインの名称を入力し、カートに入れます。
image.png
年数を入力し、「続行」をクリックします。登録者の連絡先を入力し、「続行」をクリックします。個人の場合、プライバシーの保護は「有効化」を選びます。メール認証が終わればドメイン申請は完了です。

固定のIPアドレスを割り当てる

EC2インスタンスのElastic IP機能を使って、固定のIPアドレスを設定します。
image.png

image.png

image.png

image.png

image.png

Aレコードを設定する

DNSサーバーで、IPアドレスとドメインを結びつける項目をAレコードといいいます。
Route 53を開き、ホストゾーンを選択します。さきほど取得したドメインを選択して、「レコードセットに移動」をクリックします。
image.png

「レコードセットの作成」をクリックします。
image.png

名前はブランク、タイプは「A-IPv4 アドレス」、値はさきほどメモしたElastic IPアドレスを入力し、「作成」をクリックします。10分ほど待てば、独自ドメインにアクセスできるようになります。
image.png

http://www.example.com/ や http://www.example.com/ でアクセスできるようになりました。
image.png

#httpsでアクセスできるようにする

(更新中)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away