【AWS】Web/DBサーバ構築してみた

1.EC2サーバ構築

  • 構築したサーバにSSH接続

  • 接続した後、22番ポートが開いてることを確認してみた

  • sudo lsof -i -n -P
    lsof:"list open files"の略オープンされているファイルやネットワークソケットに関する情報を表示
    -i: このオプションは、インターネット関連の情報を表示するためのもので、TCP/IPやUDPのポート、IPアドレス、ネットワーク接続に関する情報を表示
    -n: ネットワークアドレスの解決を無効にする
    -P: ポート番号の解決を無効にするものです。通常、lsofはポート番号をサービス名に変換しようとしますが、-Pオプションを使用することで、ポート番号をそのまま表示することが可能

[ec2-user@ip-10-0-1-10 ~]$ sudo lsof -i -n -P
COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-n 1949 systemd-network   17u  IPv4  16646      0t0  UDP 10.0.1.10:68
systemd-n 1949 systemd-network   19u  IPv6  16644      0t0  UDP [fe80::c9e:2fff:fe34:ae4b]:546
sshd      2160            root    5u  IPv4  17247      0t0  TCP *:22 (LISTEN)
sshd      2160            root    7u  IPv6  17262      0t0  TCP *:22 (LISTEN)
chronyd   2190          chrony    7u  IPv4  17435      0t0  UDP 127.0.0.1:323
chronyd   2190          chrony    8u  IPv6  17436      0t0  UDP [::1]:323
sshd      2298            root    5u  IPv4  18159      0t0  TCP 10.0.1.10:22->133.32.226.170:8597 (ESTABLISHED)
sshd      2316        ec2-user    5u  IPv4  18159      0t0  TCP 10.0.1.10:22->13

2.Apache HTTP Serverのインストール

Apacheをインストールする

yumコマンドでもいけるらしい

[ec2-user@ip-10-0-1-10 ~]$ sudo dnf -y install httpd
Last metadata expiration check: 0:15:32 ago on Sun Dec 31 09:49:10 2023.
Dependencies resolved.
================================================================================
 Package               Arch     Version                     Repository     Size
================================================================================
Installing:
 httpd                 x86_64   2.4.58-1.amzn2023           amazonlinux    47 k
Installing dependencies:
 apr                   x86_64   1.7.2-2.amzn2023.0.2        amazonlinux   129 k
 apr-util              x86_64   1.6.3-1.amzn2023.0.1        amazonlinux    98 k
 generic-logos-httpd   noarch   18.0.0-12.amzn2023.0.3      amazonlinux    19 k
 httpd-core            x86_64   2.4.58-1.amzn2023           amazonlinux   1.4 M
 httpd-filesystem      noarch   2.4.58-1.amzn2023           amazonlinux    14 k
 httpd-tools           x86_64   2.4.58-1.amzn2023           amazonlinux    81 k
 libbrotli             x86_64   1.0.9-4.amzn2023.0.2        amazonlinux   315 k
 mailcap               noarch   2.1.49-3.amzn2023.0.3       amazonlinux    33 k
Installing weak dependencies:
 apr-util-openssl      x86_64   1.6.3-1.amzn2023.0.1        amazonlinux    17 k
 mod_http2             x86_64   2.0.11-2.amzn2023           amazonlinux   150 k
 mod_lua               x86_64   2.4.58-1.amzn2023           amazonlinux    61 k

Transaction Summary
================================================================================
<以下略>

httpdサービスを起動する
httpdサービスを自動起動にする

[ec2-user@ip-10-0-1-10 ~]$ sudo systemctl start httpd.service
[ec2-user@ip-10-0-1-10 ~]$ sudo systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/ht

httpdサービスが自動起動になっているかを確認する

[ec2-user@ip-10-0-1-10 /]$ sudo systemctl list-unit-files -t service | grep httpd
httpd.service                          enabled         disabled
httpd@.service                         disabled        disabled

Apacheのプロセスを確認する

[ec2-user@ip-10-0-1-10 ~]$ ps -ax | grep httpd
  25932 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND
  25933 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
  25934 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
  25935 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
  25936 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
  26416 pts/0    S+     0:00 grep --color=auto http

ちなみにサービスとプロセスは別物です!!
サービスは通常はバックグラウンドで実行され、特定の役割や機能を提供する永続的なソフトウェアコンポーネントを指す。
一方、プロセスは実行中の個々のプログラムやタスクを表し、それは一時的で起動と終了が発生する。

ポートの状況を確認する

[ec2-user@ip-10-0-1-10 ~]$ sudo lsof -i -n -P
COMMAND     PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-n  1949 systemd-network   17u  IPv4  16646      0t0  UDP 10.0.1.10:68
systemd-n  1949 systemd-network   19u  IPv6  16644      0t0  UDP [fe80::c9e:2fff:fe34:ae4b]:546
sshd       2160            root    5u  IPv4  17247      0t0  TCP *:22 (LISTEN)
sshd       2160            root    7u  IPv6  17262      0t0  TCP *:22 (LISTEN)
chronyd    2190          chrony    7u  IPv4  17435      0t0  UDP 127.0.0.1:323
chronyd    2190          chrony    8u  IPv6  17436      0t0  UDP [::1]:323
httpd     25932            root    4u  IPv6  47300      0t0  TCP *:80 (LISTEN)
httpd     25934          apache    4u  IPv6  47300      0t0  TCP *:80 (LISTEN)
httpd     25935          apache    4u  IPv6  47300      0t0  TCP *:80 (LISTEN)
httpd     25936          apache    4u  IPv6  47300      0t0  TCP *:80 (LISTEN)

Apacheはポート80番で待ち受けていることを確認

この状態になって初めてブラウザでhttp://IPアドレスを開けるようになりました!!!
(セキュリティグループで80番ポートを開ける必要はあります)

3.DNS設定

インスタンの名前解決を有効にする方法は、超簡単です!
対象のインスタンスがあるVPCを選択→アクション→VPCの設定を編集で、
「DNSホスト名を有効化」にチェックをいれるだけです。
チェックをいれると、インスタンスにパブリックDNSとプライベートDNSが割り当てられる。
前者はインターネット上から参照、後者はVPC内でしか参照できない。

正引きでも逆引きでも名前解決できることを確認!

4.HTTP

ここは一旦飛ばします。

5.プライベートサブネット構築(DBサーバ)

プライベートサブネット構築

10.0.2.0/24で作成
要領はパブリックと一緒

DBサーバ用サーバ構築

  • IPを固定で10.0.2.10を割り当てる

  • SGで22番、3306番(MariaDB用)、ICMPの穴あけ

SSH接続

踏み台サーバとして入るために、秘密鍵をwebサーバにWinSCPを使用して設置。
以下のコマンドでDBサーバへのSSH接続を確認!(実際のログは省略)

ssh -i my-key.pem ec2-user@10.0.2.10

NATを構築する

NATの仕組み

NATはIPアドレスを変換する装置で、2つのNICを持っている。
片方のNICは「パブリックIPアドレス」を設定し、もう片方は「プライベートIP」を設定する。
NATは送信元IPアドレスを、自身のパブリックIPアドレスに変換する。
そうすることで、プライベートサブネットに存在するホストは、インターネットと通信できるようになる。

2つのNAT

①NATインスタンス
NATソフトウェアがインストールされたAMIから起動できる。
インスタンスを起動→その他のAMIを閲覧する→コミュニティAMI→検索「
ami-vpc-nat」で表示するいくつかのAMIが対象。

NATゲートウェイ

  • 負荷に応じてスケーリング

  • 従量課金

  • 停止するためには、NATGWを削除する必要がある

  • 削除した場合は、ElasticIPを解放するのを忘れずに!

  • 手順はNATGWをパブリックに作成する
    ルートテーブル(メイン)に0.0.0.0/0 に対してNATGWを対象となるよう設定

NATゲートウェイ経由の疎通確認

DBサーバ(10.0.2.10)に接続して、curlコマンドを使用して対象サイトのファイルをダウンロードできるか確認する。
HTMLをダウンロードできたら問題なし!

[ec2-user@ip-10-0-2-10 ~]$ curl https://www.kantei.go.jp
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:site_name" content="首相官邸ホームページ">
<meta property="og:description" content="首相官邸のホームページです。内閣や総理 大臣に関する情報をご覧になれます。">
<以下略>

DBサーバにMariaDBをインストール

後ほど記載します。。(更新失敗しました)

WebサーバーにWordPressをインストール

PHPの最新バージョンをインストール

WordPressの最新バージョンは、PHP7.4以上を推奨しているので、
今回は8.1をインストールする。

[ec2-user@ip-10-0-1-10 ~]$ sudo dnf -y install php8.1
Last metadata expiration check: 17:30:30 ago on Sun Dec 31 09:49:10 2023.
Dependencies resolved.
================================================================================
 Package             Arch      Version                     Repository      Size
================================================================================
Installing:
 php8.1              x86_64    8.1.23-1.amzn2023.0.1       amazonlinux     12 k
Installing dependencies:
 libxslt             x86_64    1.1.34-5.amzn2023.0.2       amazonlinux    241 k
 nginx-filesystem    noarch    1:1.24.0-1.amzn2023.0.2     amazonlinux    9.1 k
 php8.1-cli          x86_64    8.1.23-1.amzn2023.0.1       amazonlinux    3.5 M
 php8.1-common       x86_64    8.1.23-1.amzn2023.0.1       amazonlinux    680 k
 php8.1-process      x86_64    8.1.23-1.amzn2023.0.1       amazonlinux     45 k
 php8.1-xml          x86_64    8.1.23-1.amzn2023.0.1       amazonlinux    148 k
Installing weak dependencies:
<以下略>

PHPやMariaDBのライブラリをインストール

参考書記載のコマンドだと該当のものがないとかでエラー返ってきてしまいます。

[ec2-user@ip-10-0-1-10 ~]$ sudo dnf -y install php8.1--mbstring php-mysql
Last metadata expiration check: 17:41:20 ago on Sun Dec 31 09:49:10 2023.
No match for argument: php8.1--mbstring
No match for argument: php-mysql
Error: Unable to find a match: php8.1--mbstring php-mysql

どうやらパッケージのスペルに誤りがあったようです。
(ChatGPT君に教えてもらいましたw)

[ec2-user@ip-10-0-1-10 ~]$ sudo dnf -y install php8.1-mbstring php-mysqlnd
Last metadata expiration check: 18:21:14 ago on Sun Dec 31 09:49:10 2023.
Package php8.1-mbstring-8.1.23-1.amzn2023.0.1.x86_64 is already installed.
Dependencies resolved.
================================================================================
 Package            Arch       Version                    Repository       Size
================================================================================
Installing:
 php8.1-mysqlnd     x86_64     8.1.23-1.amzn2023.0.1      amazonlinux     149 k

MariaDBコマンドをインストール

[ec2-user@ip-10-0-1-10 ~]$ sudo dnf -y install mariadb105-server
Last metadata expiration check: 17:48:04 ago on Sun Dec 31 09:49:10 2023.
Dependencies resolved.
================================================================================
 Package                  Arch   Version                      Repository   Size
================================================================================
Installing:
 mariadb105-server        x86_64 3:10.5.20-1.amzn2023.0.1     amazonlinux  11 M
Installing dependencies:
 mariadb-connector-c      x86_64 3.1.13-1.amzn2023.0.3        amazonlinux 196 k
 mariadb-connector-c-config

MariaDBに接続できるかを確認
(MariaDB上でgrantコマンド使用して設定したパスワード)

[ec2-user@ip-10-0-1-10 ~]$ mysql -h 10.0.2.10 -u wordpress -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 10.5.20-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

WordPressのダウンロード
提供サイトからwgetコマンド使用して、直接ダウンロードする。

[ec2-user@ip-10-0-1-10 ~]$ wget https://ja.wordpress.org/latest-ja.tar.gz
--2024-01-01 03:45:30--  https://ja.wordpress.org/latest-ja.tar.gz
Resolving ja.wordpress.org (ja.wordpress.org)... 198.143.164.252
Connecting to ja.wordpress.org (ja.wordpress.org)|198.143.164.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25321083 (24M) [application/octet-stream]
Saving to: ‘latest-ja.tar.gz’

latest-ja.tar.gz    100%[===================>]  24.15M  7.56MB/s    in 3.8s

ダウンロードしたファイルの展開

[ec2-user@ip-10-0-1-10 ~]$ tar xzvf latest-ja.tar.gz wordpress/
wordpress/
wordpress/wp-login.php
wordpress/wp-cron.php
wordpress/xmlrpc.php
wordpress/wp-load.php
wordpress/wp-admin/

ファイルの確認

[ec2-user@ip-10-0-1-10 ~]$ cd wordpress/
[ec2-user@ip-10-0-1-10 wordpress]$ ls
index.php        wp-blog-header.php    wp-includes        wp-settings.php
license.txt      wp-comments-post.php  wp-links-opml.php  wp-signup.php
readme.html      wp-config-sample.php  wp-load.php        wp-trackback.php
wp-activate.php  wp-content            wp-login.php       xmlrpc.php
wp-admin         wp-cron.php           wp-mail.php

ファイルをApacheのディレクトリに移動
権限を変更

[ec2-user@ip-10-0-1-10 wordpress]$ sudo cp -r * /var/www/html/
[ec2-user@ip-10-0-1-10 wordpress]$ sudo chown apache:apache /var/www/html -R

MariaDBを起動
再起動も忘れずに!

[ec2-user@ip-10-0-1-10 html]$ sudo systemctl start httpd
[ec2-user@ip-10-0-1-10 html]$ sudo systemctl restart httpd

WordPressを設定

WEBサーバのパブリックIP or DNS名に接続する。

サイトのタイトルや管理者情報などを入力すれば、WordPressへのダッシュボードへ遷移する。
これで一通りの設定完了となる。

構成図

パワーポイントで簡単に構成図を描いてみた。
といってもほとんど参考書を真似しただけですがw


この記事が気に入ったらサポートをしてみませんか?