kukai88

垢 - やったことを残す -

02. サーバーを構築する ー WordPress 構築ハンズオン ー

参考書



構築の流れ


  • 1. パブリックサブネット内に仮想サーバーを作成する
  • 2. 仮想サーバーに対して SSH 接続ができるように設定する
  • 3. 仮想サーバーのパブリック IP アドレスを「動的 → 固定」に変更する


1. 仮想サーバーを作成する


AWS で仮想サーバーはインスタンスと呼ばれ、Amazon EC2 を利用して作成します。

Amazon EC2 とは?

Amazon Elastic Compute Cloud (Amazon EC2) は、安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービスです。

引用元:https://aws.amazon.com/jp/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 接続する


ローカル PC(macOS)から iTerm2 を利用してインスタンスSSH 接続したいと思います。

インスタンスのグローバル IP アドレスを確認する


  • 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
  • 2. 左側のサイドメニューから「インスタンス」をクリックし、作成したインスタンスを選択します。
  • 3. 画面下部の説明タブ内の「IPv4 パブリック IP」に記載されている IP アドレスをコピーしておきます。


ローカル PC から SSH 接続する


  • ダウンロードしたキーペアファイルのアクセス権を 644 → 400 に変更します。
  • SSH 接続をするために、以下のコマンドを入力します。
$ ssh -i my-key.pem ec2-user@{インスタンスのグローバル IP アドレス}


→ これでインスタンス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. パブリックサブネット/プライベートサブネットを作成する
  • 3. インターネットゲートウェイを作成する
  • 4. ルートテーブルを作成する


1. VPC を作成する


VPC とは?


VPC は「Amazon Virtual Private Cloud」の略です。
AWS に仮想的なクラウドVPC)を生成し、その VPC に対してネットワーク、サーバー、アプリケーション等のリソースを組み込みます。VPC は全てのリソースの基盤となります。

ユーザーが定義した仮想ネットワーク内で AWS リソースの起動が可能な、アマゾン ウェブ サービス (AWS) クラウドのローカルで隔離されたセクションのプロビジョニング。

引用元:https://aws.amazon.com/jp/vpc/

VPC を作成する


  • 1. AWS マネージメントコンソールから「VPC」をクリックします。
  • 2. 左側のサイドメニューから「VPC」をクリックし、「VPC の作成」をクリックします。
  • 3. 名前タグに「VPC」、IPv4 CIDR ブロックに「10.0.0.0/16」、IPv6 CIDR ブロックに「IPv6 CIDR ブロックなし」、テナンシーに「デフォルト」を選択して「作成」をクリックします。


→ これで 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 つのサブネットを作成することができました。

補足:アベイラビリティーゾーンを「指定なし」にすると、ランダムに指定されます。別々のアベイラビリティーゾーンを明示的に指定しておくと、片一方で障害が発生した際にでも継続してシステムを稼働することが可能になります。

3. インターネットゲートウェイを作成する


VPC 上にサブネットを作成しただけだと、サブネットはインターネットに接続できません。VPC 上にインターネットゲートウェイを作成する必要があります。

インターネットゲートウェイの作成方法


  • 1. AWS マネージコンソールから「VPC」をクリックします。
  • 2. 左側のサイドメニューから「インターネットゲートウェイ」をクリックし、「インターネットゲートウェイの作成」をクリックします。
  • 3. 名前タグを空にして「作成」をクリックします。


→ これでインターネットゲートウェイの作成は完了です。(次の項目でルーティング設定を行なっていきます。)

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 コマンドの学習/各種サーバー構築を実施。実施内容は下の記事を参照。

DB サーバー

"MySQL" を導入して、基本的な DB 操作(CRUD 処理)を実施。DB 単体でしか利用していないので、次は Web アプリと一緒に利用してみる。


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 つが故障してもデータを復旧できます

RAID 5


  • 複数のストレージにデータを分散させて書き込みます。
  • データの他に、データから計算した「パリティ」というデータも書き込みます。


RAID 0 の拡張版で、パリティが存在することで、構成するストレージの 1 つが故障してもデータを復旧できます

RAID 6


  • 複数のストレージにデータを分散させて書き込みます。
  • データの他に、データから計算した 2 種類の「パリティ」というデータも書き込みます。


RAID 5 の拡張版で、2 種類のパリティが存在することで、構成するストレージの 2 つ以上が故障してもデータを復旧できます

RAID の制御

制御の仕組みとして「ハードウェア RAID」と「ソフトウェア RAID」の 2 種類があります。

  • ハードウェア RAID
    • サーバーに「RAID コントローラ」という半導体チップを搭載して、RAID の全制御を RAID コントローラに任せます。
    • OS からは RAID の状態を監視します。


→ CPU、メモリ、OS などへの負担が小さくなるため、高速に処理できるのが特徴です。

  • ソフトウェア RAID
    • ソフトウェアの機能だけで RAID を制御・管理します。
    • 基本的な OS にはソフトウェア RAID が搭載されています。


→ CPU、メモリ、OS などへの負担が大きくなるため、処理は低速です。

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)を構築する

環境


【知識】プロキシサーバーとは?

プロキシサーバーは、ネットワーク内にある PC などのデバイスを直接インターネットにアクセスさせたくない場合に、代理(Proxy)でインターネットにアクセスします。
プロキシサーバーを経由することでインターネットにアクセスできるようになります。

1. Squid をインストールする

プロキシサーバーを構築するサービス「Squid」をインストールします。

$ sudo apt -y install squid


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] を選択します。


4. Windows 10 PC でインターネットにアクセスする

Windows 10 のブラウザを立ち上げて、インターネットにアクセスしてみます。
問題なくインターネットにアクセスできれば、プロキシサーバー経由でインターネットにアクセスできています。

5. プロキシサーバーのアクセスログを確認する

プロキシサーバーでインターネットにアクセスした後に、プロキシサーバーのアクセスログを確認してみます。

$ sudo cat /var/log/squid/access.log


Windows 10 からのアクセスを確認することができます。

アクティブモード/パッシブモード

アクティブモードとパッシブモードとは?

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 のデフォルトはパッシブモードでした。)