02. サーバーを構築する ー WordPress 構築ハンズオン ー
参考書
- Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
- https://www.amazon.co.jp/dp/4822237443/ref=cm_sw_r_tw_dp_U_x_k3p3Cb7VX47T4
構築の流れ
- 1. パブリックサブネット内に仮想サーバーを作成する
- 2. 仮想サーバーに対して SSH 接続ができるように設定する
- 3. 仮想サーバーのパブリック IP アドレスを「動的 → 固定」に変更する
1. 仮想サーバーを作成する
AWS で仮想サーバーはインスタンスと呼ばれ、Amazon EC2 を利用して作成します。
Amazon EC2 とは?
Amazon Elastic Compute Cloud (Amazon EC2) は、安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービスです。
インスタンスの生成方法
- 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
- 2. 左側のサイドメニューから「インスタンス」をクリックし、「インスタンスの作成」をクリックします。
- 3. Amazon マシンイメージ(AMI)一覧から「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」にある「選択」をクリックします。
- 4. インスタンス一覧からタイプが「t2.micro(無料利用枠の対象)」を選択し、「次の手順」をクリックします。
- 5. インスタンスの詳細設定画面で、ネットワークを「既に作成済みの VPC」、サブネットを「既に作成済みのパブリックサブネット」、自動割り当てパブリック IP を「有効」、プライマリ IP を「10.0.1.10」にして「次の手順」をクリックします。
- 6. ストレージの設定画面で、特にデフォルト値のままで問題ないため、そのまま「次の手順」をクリックします。
- 7. タグの入力画面で「タグの追加」をクリックして、キーを「Name」、値を「Webサーバー」として「次の手順」をクリックします。
- 8. セキュリティグループの設定画面で、セキュリティグループ名を「WEB-SG」にして「確認と作成」をクリックします。
- 9. 確認画面が表示されるので「起動」をクリックします。
「起動」をクリックすると、SSH 接続をするためのキーペアを作成するポップアップが表示されます。
- 10. 「新しいキーペアの作成」を選択し、キーペア名を「my-key」にして「キーペアのダウンロード」をクリックします。
- 11. キーペアのダンロードが完了後、「インスタンスの作成」をクリックします。
→ これでパブリックサブネット上にインスタンスを作成できました。作成には数十秒〜数分かかります。
注意:インスタンスを使用していない場合は「停止」することもできますが、停止してもストレージ Amazon Elastic Block Store(EBS)の容量を確保したままなので課金されてしまいます。
2. インスタンスに SSH 接続する
3. インスタンスのパブリック IP アドレスを固定 IP アドレスに変更する
デフォルトではインスタンスのパブリック IP アドレスは動的になっています。そのため、インスタンスを起動したり、停止したりするたびにパブリック IP アドレスが変わってしまいます。
- 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
- 2. 左側のサイドメニューから「Elastic IP」をクリックし、「新しいアドレスの割り当て」をクリックします。
- 3. デフォルトのまま「割り当て」をクリックします。
→ これで、固定 IP アドレスの作成が完了しました。次の、作成した固定 IP アドレスをインスタンスに適用します。
- 4. Elastic IP アドレス一覧から作成した IP アドレスを選択し、アクションの中から「アドレスの関連付け」をクリックします。
- 5. アドレス関連付け画面で、リソースタイプを「インスタンス」、インスタンスを「パブリックサブネット上に作成したインスタンス」、プライベート IP を「パブリックサブネット上に作成したインスタンスのプライベート IP アドレス」として「関連付け」をクリックします。
→ これで、パブリックサブネット上に作成したインスタンスのパブリック IP アドレスが「動的 → 固定」になりました。
補足:SSH 接続時にインスタンスのパブリック IP アドレスが必要でしたが、固定パブリック IP アドレスを使用することができます。
01. ネットワークを構築する ー WordPress 構築ハンズオン ー
参考書
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
https://www.amazon.co.jp/dp/4822237443/ref=cm_sw_r_tw_dp_U_x_k3p3Cb7VX47T4
1. VPC を作成する
2. パブリックサブネット/プライベートサブネットを作成する
どのようなインフラ構成にするのか?
パブリックサブネット(インターネットに公開)と プライベートサブネット(インターネットに非公開)の 2 つのサブネットを作成します。
WEB サーバーをパブリックサブネットに配置、DB サーバーをプライベートサブネットに配置します。
なぜ作成する必要があるのか?
- 1. 物理的な理由
- どちらかのサブネットに障害が発生しても、他のサブネットに影響が出る可能性が低いため、システムを継続することができます。
- 2. セキュリティに関する理由
- それぞれのサブネットに別々ネットワークを設定できるため、柔軟なネットワーク構成にすることができます。
どのような設定にするのか?
- パブリックサブネット:10.0.1.0/24
- プライベートサブネット:10.0.2.0/24
サブネットの作成方法
パブリックサブネット
- 1. AWS マネージコンソールから「VPC」をクリックします。
- 2. 左側のサイドメニューから「サブネット」をクリックし、「サブネット の作成」をクリックします。
- 3. 名前タグを「パブリックサブネット」、VPC を「1. で作成した VPC」、アベイラビリティーゾーンを「指定なし」、IPv4 CIDR ブロックを「10.0.1.0/24」で作成をクリックします。
プライベートサブネット
- 1. AWS マネージコンソールから「VPC」をクリックします。
- 2. 左側のサイドメニューから「サブネット」をクリックし、「サブネット の作成」をクリックします。
- 3. 名前タグを「プライベートサブネット」、VPC を「1. で作成した VPC」、アベイラビリティーゾーンを「指定なし」、IPv4 CIDR ブロックを「10.0.2.0/24」で作成をクリックします。
→ これで VPC 上に 2 つのサブネットを作成することができました。
補足:アベイラビリティーゾーンを「指定なし」にすると、ランダムに指定されます。別々のアベイラビリティーゾーンを明示的に指定しておくと、片一方で障害が発生した際にでも継続してシステムを稼働することが可能になります。
4. ルートテーブルを作成する
パブリックサブネットに適用されているルートテーブルを確認する
VPC を作成した時点でルートテーブル(デフォルトルートテーブル)が 1 つ生成されます。パブリックサブネットを作成したときに、そのルートテーブルが適用されるようになっています。
- 1. AWS マネージコンソールから「VPC」をクリックします。
- 2. 左側のサイドメニューから「サブネット」をクリックし、作成したサブネットを選択します。
- 3. 画面下部の説明タブ内に「ルートテーブル」という項目に表示されているのが、現在適用されているルートテーブルになります。(※ デフォルトルートテーブルが適用されているはずです。)
パブリックサブネット専用のルートテーブルを作成する
既に適用されているデフォルトルートテーブルを変更せずに、バプリックサブネット専用のルートテーブルを生成します。
- 1. AWS マネージコンソールから「VPC」をクリックします。
- 2. 左側のサイドメニューから「サブネット」をクリックし、「ルートテーブルの作成」をクリックします。
- 3. 名前タグを「パブリックルートテーブル」、VPC を「1. で作成した VPC」にして「作成」をクリックします。
これで、ルートテーブルの作成が完了しました。
現時点では、まだパブリックサブネットのルートテーブルには適用されていないので、次でルートテーブルをパブリックサブネットに適用する設定を行います。
- 4. ルートテーブル一覧画面で、作成したルートテーブルを選択し、画面下部のサブネットの関連付けタブ内にある「サブネットの関連付けの編集」をクリックします。
- 5. 表示されたサブネット一覧からルートテーブルを適用したいサブネットを選択して「保存」をクリックします。
これで、作成したルートテーブルをパブリックサブネットに適用できました。
しかし、ルートテーブルの設定はデフォルトのままになっているので、次でルートテーブルの設定をパブリックサブネット用に変更します。
- 6. ルートテーブル一覧画面で、作成したルートテーブルを選択し、画面下部のサブネットのルートタブ内にある「ルートの編集」をクリックします。
- 7. 送信先を「0.0.0.0/0」、ターゲットを「Internet Gateway → 3. で作成したインターネットゲートウェイ」として「ルートの保存」をクリックします。
補足 1:送信先「0.0.0.0/0」、ターゲット「Internet Gateway」にすることは、全ての通信(0.0.0.0/0)をインターネットゲートウェイに送るという意味になります。全ての通信を送る先なので、インターネットゲートウェイがデフォルトゲートウェイになります。
補足 2:デフォルト設定の、送信先「10.0.0.0/16」、ターゲット「local」は、10.0.0.0/16 宛の通信をすべてのサブネット(10.0.1.0/24, 10.0.2.0/24, ... = local)に送るということになります。
【まとめ】Linux サーバー構築
仮想環境に Ubuntu Server を導入して、基本的な Linux コマンドの学習/各種サーバー構築を実施。実施内容は下の記事を参照。
Web サーバー
"apache" を利用して Web サーバーを構築。今後、実際にインターネットに公開して運用してみたい。
- Web サーバー(Apache HTTP Server)を構築する ー 導入・起動 ー - kukai88
- Web サーバー(Apache HTTP Server)を構築する ー web アプリ作成 ー - kukai88
- Web サーバー(Apache HTTP Server)を構築する ー ベーシック認証 ー - kukai88
DB サーバー
"MySQL" を導入して、基本的な DB 操作(CRUD 処理)を実施。DB 単体でしか利用していないので、次は Web アプリと一緒に利用してみる。
- DB サーバー(MySQL)の構築 ー 導入・起動 ー - kukai88
- DB サーバー(MySQL)の構築 ー DB とテーブルの作成 ー - kukai88
- DB サーバー(MySQL)の構築 ー DB/テーブルの権限設定 ー - kukai88
SSH
- Ubuntu Server に ssh 接続をする - kukai88
- ホストベース認証(RSA 公開鍵認証)による ssh 接続 - kukai88
- リモートサーバーとファイルを送受信する ー scp コマンド編 ー - kukai88
- リモートサーバーとファイルを送受信する ー クライアントアプリ Cyberduck 編 ー - kukai88
用語/設定
Linux の基本的な用語/設定で不明だったところを確認。確認のみで実際には試用できていないところもあるが、今後、学習していく中で試してみる。
RAID(Redundant Arrays of Inexpensive/ Independent Disks)
RAID とは?
- Redundant(冗長な) Arrays(配置) of Inexpensive(安易な)/ Independent(自由な) Disks の略です。
- ハードディスクが故障しても 他のハードディスクでシステムの稼働を継続する仕組み のことです。
- そのため、同じデータを複数のハードディスクに書き込みます。
→ システム稼働の継続性(可用性)を向上することができます。
RAID の種類
RAID 0 ~ 6 までの 7 つのレベルに分けられています。一般的に利用されるのは「RAID 0」「RAID 1」「RAID 5」「RAID 6」です。
RAID 0
- ストライピング(Striping)
- 複数のストレージにデータを分散させて並列的に書き込むため、ストレージの書き込みが非常に速いです。
- 利用可能なストレージの容量は、構成するストレージの合計容量になります。
→ データを分散させて高速に書き込むことができますが、その一方で、構成するストレージの 1 つが故障するとデータを復旧できません。
RAID 1
- ミラーリング(Mirroring)
- 複数のストレージに同じデータを書き込みます。
- 同じデータを複数のストレージに書き込むため、利用可能なストレージ容量は、構成するストレージの合計容量の半分以下になります。
→ データを複数のストレージに同じデータを書き込んでいるため、構成するストレージの 1 つが故障してもデータを復旧できます。
LVM(Logical Volume Manager)/ スナップショット機能
LVM とは?
- Logical(論理的な) Volume(容量) Manager(管理)の略です。
- 「物理ボリューム(PV、Physical Volume)」「ボリュームグループ(VG、Volume Group)」「論理ボリューム(LV、Logical Volume)」の 3 階層から成り立ちます。
- 1. 物理的なストレージ(HDD、SSD)内をいくつかの 物理ボリューム(PV) で分けます。
- 2. 分けた物理ボリュームを束ねて論理的なストレージを形成するのが ボリュームグループ(VG) です。
- 3. ボリュームグループから必要な容量だけ切り出して 論理ボリューム(LV) として使用します。
→ ファイルシステムの容量不足の際に、柔軟にストレージを増設して容量を増やすことができます。
どうやって LVM を使用するのか?
Ubuntu Server のインストールの初期設定時に「Use An Entire Disk And Set Up LVM」を選択しておく必要があります。
【補足】スナップショット
スナップショットとは、
- LVM の論理ボリューム(LV)を丸ごとバックアップすることができます。(その時点のデータを静的に固定します。)
- スナップショット機能を利用するためには LVM でファイルシステムを構築している必要があります。
→ バックアップは時間がかかるため、バックアップ中にデータの変更があると一貫性のあるバックアップができません。
→ スナップショットはその時点のデータを静的に固定するため、バックアップする前にスナップショットでデータを固定し、スナップショットに対してバックアップすることで一貫性のあるバックアップが可能です。
プロキシサーバー(Squid)を構築する
環境
- Parallels Desktop 14 for Mac
- macOS Mojave
- Ubuntu Server 18.04.2 LTS(プロキシサーバー)
- Windows 10(プロキシサーバー経由でアクセスする PC)
【知識】プロキシサーバーとは?
プロキシサーバーは、ネットワーク内にある PC などのデバイスを直接インターネットにアクセスさせたくない場合に、代理(Proxy)でインターネットにアクセスします。
プロキシサーバーを経由することでインターネットにアクセスできるようになります。
2. Squid の設定ファイルを調整する
Squid の設定ファイルは /etc/squid 直下にある squid.conf ファイルです。この設定ファイルに以下の内容を追加します。
acl LOCALNETWORK src xxx.xxx.xxx.xxx/24 # 追加行 acl SSL_ports port 443 acl Safe_ports port 80 ... http_access allow localhost http_access allow LOCALNETWORK # 追加行
変更内容を反映させるために、Squid を再起動しておきます。
$ sudo systemctl restart squid
3. プロキシサーバーにアクセスする設定を行う
プロキシサーバー経由でインターネットにアクセスする PC をプロキシサーバーと同じネットワーク内に用意します。今回は Windows 10 の PC を用意しました。
設定方法
- 1. コントロールパネルにある [インターネットオプション] を選択します。
- 2. [接続] タブをクリックし、その中にある [LAN の設定] を選択します。
- 3. [LAN にプロキシサーバーを使用する(これらの設定はダイアルアップまたは VPN 接続には適用されません)] にチェックを入れます。
- 4. プロキシサーバーの IP アドレスとポート番号を入力します。(ポート番号は Squid の設定ファイルに記載されていますが、デフォルトでは "3128" です。)
- 5. [ローカルアドレスにはプロキシサーバーを利用しない] にチェックを入れます。
- 6. [OK] を選択します。
アクティブモード/パッシブモード
アクティブモードとパッシブモードとは?
FTP 通信では 2 つのポートを使用して通信します。1 つは「制御用」、もう 1 つは「データ転送用」です。FTP 通信を行う際にクライアントとサーバでコネクションを確立します。
アクティブモードとパッシブモードでは、このコネクションの張り方・向きに違いがあります。
コネクションの向きの違い
データ転送用のコネクションの向きに違いがあります。アクティブモードはサーバーからですが、パッシブモードはクライアントからになります。
- アクティブモード
- 制御(FTP/FTPS 通信の開始):クライアント →→→ サーバー
- データ転送:クライアント ←←← サーバー
- パッシブモード
- 制御(FTP/FTPS 通信の開始):クライアント →→→ サーバー
- データ転送:クライアント →→→ サーバー
ポート番号の違い
データ転送用のポート番号に違いがあります。アクティブモードは 22 番ポートですが、パッシブモードは任意のポート番号を使用します。
- アクティブモード
- 制御(FTP/FTPS 通信の開始):クライアント →→ 21 番ポート →→ サーバー
- データ転送:クライアント ←← 22 番ポート ←← サーバー
- パッシブモード
- 制御(FTP/FTPS 通信の開始):クライアント →→ 21 番ポート →→ サーバー
- データ転送:クライアント →→ (任意のポート番号) →→ サーバー
任意のポート番号の指定方法
任意のポート番号を指定するには /etc/proftps/proftps.conf ファイル を下のように変更します。パッシブモードのポートを有効にして、使用するポート番号の範囲を指定します。
# PassivePorts 49152 65634 ↓ PassivePorts 49152 65634
注:クライアントアプリの設定がパッシブモードになっている場合、上記の設定をしていないとデータ転送が行えません。(私の環境では Cyberduck のデフォルトはパッシブモードでした。)