複数のウェブサイトをホストするために、管理者は一般的に「仮想ホスティング」技術に依存しています。 仮想ホスティングは、単一のマシンを使用して複数のWebサイトをホストします。 これは、「IPベース」の方法または「名前ベース」のアプローチのいずれかによって実現できます。 「IPベース」のホスティングでは、Webサイトごとに異なるIPアドレスがあります。 「名前ベース」のホスティングの場合、各IPアドレスで複数の名前が実行されます。
クラウドベースのインフラストラクチャを自動化するために、今日利用できるツールはたくさんあります。 Terraformは、DevOpsの世界で最近絶大な人気を得ているそのようなツールの1つです。 Terraformは、HashiCorpによって開発および保守されているオープンソースツールです。 独自のHashicorp構成言語-HCLを使用して、複数のクラウドサービスプロバイダーをプロビジョニングします。 基本的に、Terraformは、現在のインフラストラクチャ構成を目的の状態と比較し、目的の状態に到達するために必要なインフラストラクチャの部分のみを変更します。
何をカバーしますか?
このチュートリアルでは、Terraformを使用してUbuntu22.04システムで2つの仮想ホストをホストする方法を説明します。 このラボを実行するには、ApacheWebサーバーを使用します。
飛行前チェック
先に進む前に、このガイドを実行するための要件を確認してください。
- テラフォームの基本。
- Terraformはローカルシステムにインストールする必要があります。
- ローカルシステムで設定されたAWSアカウント。
- ApacheWebサーバーを使用した仮想ホストのセットアップの基本。
ラボのセットアップ
Ubuntu 22.04サーバーでは、Apache Webサーバーをインストールしてから、それぞれが異なるindex.htmlファイル「Webpagefrom:VirtualHost1」を持つ仮想ホストを構成します。 vhost1および「Webページfrom:仮想ホスト2」の場合。 vhost2の場合。
また、簡単にするために、2つのvhost(仮想ホスト)のドメイン名をローカルホストのIPアドレス(127.0.0.1)にマップしました。 このラボでは、複数のファイルを使用して、明確な作業環境を作成します。 ファイルの説明は次のとおりです。
- userdata.sh:EC2サーバーをセットアップし、仮想ホスト用にWebサーバーを構成するbashスクリプトです。
- sec-grp.tf:セキュリティグループを作成するためのリソースを定義します。
- vhost-template.tf:使用される実際の構成を含むファイル。
- main.tf:ここで、Webサーバーリソースと残りのインフラストラクチャが宣言されます。
複数のファイルをマージすることも可能ですが、コードのレビューがさらに複雑になります。 次に、主な手順に進みましょう。
ステップ1.すべてのプロジェクトファイルを配置するディレクトリの作成から始めましょう。
$ mkdir virtual-hosts-terraform
ステップ2.仮想ホスティング用にEC2インスタンスをセットアップするには、userdataスクリプトを使用します。 これにより、一般的なサーバー構成も自動化されます。
$ vi userdata.sh
#!/bin/bashsudo 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.このファイルには、各仮想ホストの実際の構成が含まれています。 最初の「
$ 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
セットアップのテスト
次に、インスタンスにSSHで接続し、次のコマンドを実行します。
$ curl www.vhost1.com
上記のコマンドは仮想ホスト1のインデックスページからのメッセージを返す必要があります。同様に、以下のコマンドは仮想ホスト2からのメッセージを表示する必要があります。
$ curl www.vhost2.com
結論
ようやく完成しました。仮想ホスティングは期待どおりに機能しています。 Terraformを使用してこのチュートリアルを実行することもできます。試してみてください。
The post Terraformを使用してUbuntuでApache仮想ホストを構成する方法 appeared first on Gamingsym Japan.