如何使用 Terraform 在 Ubuntu EC2 实例上设置 Apache 虚拟主机如何使用 Terraform 在 Ubuntu EC2 实例上设置 Apache 虚拟主机如何使用 Terraform 在 Ubuntu EC2 实例上设置 Apache 虚拟主机如何使用 Terraform 在 Ubuntu EC2 实例上设置 Apache 虚拟主机
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 Terraform 在 Ubuntu EC2 实例上设置 Apache 虚拟主机

“为了托管多个网站,管理员通常在一台计算机上配置虚拟主机。在虚拟主机中,我们可以使用“基于IP”的主机或“基于名称的”主机。在“基于 IP”的托管中,我们为每个网站提供不同的 IP 地址。在“基于名称”托管的情况下,我们在每个 IP 地址上运行多个名称。 ”

我们将涵盖什么?

在本指南中,我们将了解如何在 Amazon EC2 Ubuntu 22.04 实例上配置虚拟主机。在本实验中,我们将使用基于名称的虚拟主机。我们将使用 Terraform 部署所需的基础设施。

实验室概况

在本实验中,我们将创建两个虚拟主机;域 1 和域 2。我们将在 Ubuntu 机器上安装 apache Web 服务器。每个虚拟主机都有一个不同的 index.html 文件,其内容为:“这是虚拟主机 1”(对于域 1)和“这是虚拟主机 2”(对于域 2)。

我们没有为每个主机注册域名,而是使用本地主机 IP 地址来映射域名。这可以通过修改“hosts”文件来完成。为了简化该基础设施的部署,我们将整体配置分为多个文件。通过这种方式,我们就能避免代码笨拙。这里使用的文件概要:

  1. userdata.sh:包含在 Ubuntu 实例上安装和配置 Apache Web 服务器所需的脚本。

  2. secgrp.tf:创建要与实例一起使用的安全组。此安全组将允许 SSH 和 HTTP 将流量传入实例。

  3. domain_2.conf和domain_1.conf:包含虚拟主机配置。

  4. main.tf:所有 .tf 文件的主要/主要入口点。

配置设置

步骤 1. 首先创建一个工作目录来保存所有 .tf 文件:

$ mkdir demo

步骤2.创建userdata.sh文件:

$ nano 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.domain1.com >> /etc/hosts"

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

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

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

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

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

sudo chmod -R 755 /var/www

sudo echo “This is Virtual Host 1.” > /var/www/domain_1/public_html/index.html

sudo echo “This is Virtual Host 2.” > /var/www/domain_2/public_html/index.html

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

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

sudo a2ensite domain_1.conf

sudo a2ensite domain_2.conf

sudo a2dissite 000-default.conf

sudo systemctl restart apache2

在上面的脚本中,我们安装了一个 apache Web 服务器并修改了主机的文件,将 localhost 地址映射到我们要配置的两个虚拟主机的域名。此外,我们还为新网站配置了 Web 服务器并禁用了默认服务器。

步骤 3. 创建 secgrp.tf 文件以允许来自任何地方的 SSH 和 HTTP 入口流量以及到任何地方的传出流量。

$ nano secgrp.tf

将以下行粘贴到其中:

resource "aws_security_group" "demo-sg" {
  name = "sec-grpg"
  description = "Allow HTTP and SSH traffic via Terraform"

  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. 对于虚拟主机配置,创建两个文件:domain_1.conf 和domain_2.conf。请注意每个文件中的文档根位置。

一、$nanodomain_1.conf

<VirtualHost *:80>

    ServerAdmin admin@domain1.com
    ServerName domain1
    ServerAlias www.domain1.com
    DocumentRoot /var/www/domain_1/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log


</VirtualHost>

二. $纳米域_2.conf

<VirtualHost *:80>

    ServerAdmin admin@domain2.com
    ServerName domain2
    ServerAlias www.domain2.com
    DocumentRoot /var/www/domain_2/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>

步骤5.最后,创建main.tf以完成基础设施声明:

$ nano main.tf

provider "aws" {
  region ="us-east-1"
}

resource "aws_instance" "webserver" {
  ami ="ami-09d56f8956ab235b3"
  instance_type = "t2.micro"
  key_name = "Name-of-your-Ec2-Key-pair"
  vpc_security_group_ids = [aws_security_group.demo-sg.id]
  associate_public_ip_address = true

   provisioner "file" {
        source      = "domain_1.conf"
        destination = "/home/ubuntu/domain_1.conf"
     
        connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = "${file("/Path/to//EC2-keyPair.pem")}"
    host        = "${self.public_dns}"
    }
    }
     
    provisioner "file" {
        source      = "domain_2.conf"
        destination = "/home/ubuntu/domain_2.conf"
     
        connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = "${file("/Path/to//EC2-keyPair.pem")}"
    host        = "${self.public_dns}"
    }
    }


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

output "IPAddress" {
  value = "${aws_instance.webserver.public_ip}"
}

在上面的 .tf 文件中,我们使用文件配置程序将“domain.conf”文件从本地系统复制到 EC2 实例。该“domain.conf”将用作模板文件,用于制作特定于域的虚拟主机文件,即“domain_1.conf”和“domain_2.conf”。

步骤6.现在我们所有的配置文件都准备好了;现在是实际部署此配置的时候了。使用以下命令初始化项目目录:

$ terraform init

最后,通过运行以下命令构建项目:

$ terraform apply

当询问时,在终端上输入“yes”。在您的 EC2 实例中,使用“curl”命令查看每个域地址显示的内容:

结论

虚拟主机是一种非常有效的技术,可以从单个服务器管理多个网站。在本实验中,我们了解了如何使用 Terraform 来部署简单的双主机基础设施。尝试通过实施 Terraform 模块来使此配置更具可扩展性。

©2015-2025 艾丽卡 support@alaica.com