もっと詳しく

複数のウェブサイトをホストするために、管理者は一般的に「仮想ホスティング」技術に依存しています。 仮想ホスティングは、単一のマシンを使用して複数のWebサイトをホストします。 これは、「IPベース」の方法または「名前ベース」のアプローチのいずれかによって実現できます。 「IPベース」のホスティングでは、Webサイトごとに異なるIPアドレスがあります。 「名前ベース」のホスティングの場合、各IPアドレスで複数の名前が実行されます。

クラウドベースのインフラストラクチャを自動化するために、今日利用できるツールはたくさんあります。 Terraformは、DevOpsの世界で最近絶大な人気を得ているそのようなツールの1つです。 Terraformは、HashiCorpによって開発および保守されているオープンソースツールです。 独自のHashicorp構成言語-HCLを使用して、複数のクラウドサービスプロバイダーをプロビジョニングします。 基本的に、Terraformは、現在のインフラストラクチャ構成を目的の状態と比較し、目的の状態に到達するために必要なインフラストラクチャの部分のみを変更します。

何をカバーしますか?

このチュートリアルでは、Terraformを使用してUbuntu22.04システムで2つの仮想ホストをホストする方法を説明します。 このラボを実行するには、ApacheWebサーバーを使用します。

飛行前チェック

先に進む前に、このガイドを実行するための要件を確認してください。

  1. テラフォームの基本。
  2. Terraformはローカルシステムにインストールする必要があります。
  3. ローカルシステムで設定されたAWSアカウント。
  4. ApacheWebサーバーを使用した仮想ホストのセットアップの基本。

ラボのセットアップ

Ubuntu 22.04サーバーでは、Apache Webサーバーをインストールしてから、それぞれが異なるindex.htmlファイル「Webpagefrom:VirtualHost1」を持つ仮想ホストを構成します。 vhost1および「Webページfrom:仮想ホスト2」の場合。 vhost2の場合。

また、簡単にするために、2つのvhost(仮想ホスト)のドメイン名をローカルホストのIPアドレス(127.0.0.1)にマップしました。 このラボでは、複数のファイルを使用して、明確な作業環境を作成します。 ファイルの説明は次のとおりです。

  1. userdata.sh:EC2サーバーをセットアップし、仮想ホスト用にWebサーバーを構成するbashスクリプトです。
  2. sec-grp.tf:セキュリティグループを作成するためのリソースを定義します。
  3. vhost-template.tf:使用される実際の構成を含むファイル。
  4. main.tf:ここで、Webサーバーリソースと残りのインフラストラクチャが宣言されます。

複数のファイルをマージすることも可能ですが、コードのレビューがさらに複雑になります。 次に、主な手順に進みましょう。

ステップ1.すべてのプロジェクトファイルを配置するディレクトリの作成から始めましょう。

$ mkdir virtual-hosts-terraform

ステップ2.仮想ホスティング用にEC2インスタンスをセットアップするには、userdataスクリプトを使用します。 これにより、一般的なサーバー構成も自動化されます。

$ vi userdata.sh
#!/bin/bash

sudo apt-get update

sudo apt-get upgrade -y

sudo apt-get install apache2 -y

sudo systemctl restart apache2

sudo sh -c "echo 127.0.0.1 www.vhost1.com >> /etc/hosts"

sudo sh -c "echo 127.0.0.1 www.vhost2.com >> /etc/hosts"

sudo mkdir -p /var/www/vhost_1/public_html

sudo mkdir -p /var/www/vhost_2/public_html

sudo chown -R $USER:$USER /var/www/vhost_1/public_html

sudo chown -R $USER:$USER /var/www/vhost_2/public_html

sudo chmod -R 755 /var/www

sudo echo "Webpage from: Virtual Host 1." > /var/www/vhost_1/public_html/index.html

sudo echo "Webpage from: Virtual Host 2." > /var/www/vhost_2/public_html/index.html

sudo cp /home/ubuntu/vhosts.conf /etc/apache2/sites-available/vhosts.conf

sudo a2ensite vhosts.conf

sudo a2dissite 000-default.conf

sudo systemctl restart apache2

ステップ3.次に、セキュリティグループリソースを構成して、着信および発信トラフィックルールを設定します。 すべての側からのSSHおよびHTTP着信トラフィックと、あらゆる場所への出力(送信)を許可します。

$ vi sec-grp.tf
resource "aws_security_group" "ec2-sg" {

  name = "ec2-grp"

  description = "Set Ingress and Egress Rules "

  ingress {

    from_port   = 80

    to_port     = 80

    protocol    = "tcp"

    cidr_blocks = ["0.0.0.0/0"]

  }

  ingress {

    from_port   = 22

    to_port     = 22

    protocol    = "tcp"

    cidr_blocks = ["0.0.0.0/0"]

  }

  egress {

    from_port   = 0

    to_port     = 0

    protocol    = "-1"

    cidr_blocks = ["0.0.0.0/0"]

  }

}

ステップ4.このファイルには、各仮想ホストの実際の構成が含まれています。 最初の「」セクションには、vhost1のエントリが含まれています。 同様に、2番目のものはvhost2vhost2に対応します。 ここでさらにvhostエントリを追加できます。

$ vi vhost-template.conf

<VirtualHost *:80>

    ServerAdmin [email protected]

    ServerName vhost1

    ServerAlias www.vhost1.com

    DocumentRoot /var/www/vhost_1/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

<VirtualHost *:80>

    ServerAdmin [email protected]

    ServerName vhost2

    ServerAlias www.vhost2.com

    DocumentRoot /var/www/vhost_2/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

手順5.main.tfファイルで、Webサーバーリソースを宣言し、残りのインフラストラクチャを設定します。

$ vi main.tf
provider "aws" {

  region ="us-east-1"

}

resource "aws_instance" "webserver" {

  ami ="ami-09d56f8956ab235b3"

  instance_type = "t2.micro"

  key_name = "Name-of-EC2-Key-Pair"

  vpc_security_group_ids = [aws_security_group.demo-sg.id]

  associate_public_ip_address = true

      

     provisioner "file" {

        source      = "vhost-template.conf"

        destination = "/home/ubuntu/vhosts.conf"

        

        connection {

      type        = "ssh"

      user        = "ubuntu"

      private_key = "${file("/Path/to/EC2-Key-Pair")}"

      host        = "${self.public_dns}"

    }

      }

user_data = "${file("userdata.sh")}"

 

  tags = {

    Name = "VirtualHostTutorial"

  }

}

     

output "IPAddress" {

  value = "${aws_instance.webserver.public_dns}"

}

ファイルプロビジョナーは、「vhost-template.conf」ファイルをEC2インスタンスにアップロードするために使用されます。 出力ブロックは、インスタンスのパブリックDNS名を出力します。 同様に、「file」コマンドはuserdataスクリプトを実行します。

ステップ6.次に、「init」コマンドに続いて「apply」コマンドを使用してプロジェクトディレクトリを初期化します。

$ terraform init
$ terraform apply

プロジェクトディレクトリを初期化しています

Terraformセットアップの適用

セットアップが正常に完了しました

セットアップのテスト

次に、インスタンスにSSHで接続し、次のコマンドを実行します。

$ curl www.vhost1.com

上記のコマンドは仮想ホスト1のインデックスページからのメッセージを返す必要があります。同様に、以下のコマンドは仮想ホスト2からのメッセージを表示する必要があります。

$ curl www.vhost2.com

セットアップのテスト

結論

ようやく完成しました。仮想ホスティングは期待どおりに機能しています。 Terraformを使用してこのチュートリアルを実行することもできます。試してみてください。

The post Terraformを使用してUbuntuでApache仮想ホストを構成する方法 appeared first on Gamingsym Japan.