【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
この記事が気に入ったらサポートをしてみませんか?