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

加载更多搜索结果...

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

如何使用 Terraform 在 Ubuntu 上配置 Apache 虚拟主机

在此页

  1. 我们将涵盖哪些内容?
  2. 飞行前检查
  3. 设置实验室
  4. 测试设置
  5. 结论

为了托管多个网站,管理员通常依赖“虚拟托管”技术。虚拟主机使用一台机器托管多个网站。它可以通过“基于 IP”的方法或“基于名称”的方法来实现。在“基于 IP”的托管中,我们为每个网站提供不同的 IP 地址。在“基于名称”的托管情况下,我们在每个 IP 地址上运行多个名称。

今天有许多工具可用于自动化基于云的基础设施。 Terraform 就是这样一种工具,最近在 DevOps 世界中大受欢迎。 Terraform 是由 HashiCorp 开发和维护的开源工具。它使用自己的 Hashicorp 配置语言 - HCL 来配置多个云服务提供商。基本上,Terraform 会将您当前的基础设施配置与所需状态进行比较,并且仅修改达到所需状态所需的基础设施部分。

我们将介绍什么?

在本教程中,我们将了解如何使用 Terraform 在 Ubuntu 22.04 系统上托管两个虚拟主机。我们将使用 Apache Web 服务器来执行此实验。

飞行前检查

在继续之前,请检查执行本指南的要求:

  1. Terraform 基础知识。
  2. Terraform 应该安装在您的本地系统上。
  3. 在您的本地系统上配置的 AWS 帐户。
  4. 使用 Apache 网络服务器设置虚拟主机的基础知识。

设置实验室

在我们的 Ubuntu 22.04 服务器上,我们将继续安装 Apache Web 服务器,然后我们将配置虚拟主机,每个主机都有不同的 index.html 文件:\Webpage from: Virtual Host 1.\ for vhost1 和 \Webpage from:虚拟主机 2.\ 对于 vhost2。

同样为了简单起见,我们将两个虚拟主机(虚拟主机)的域名映射到本地主机 IP 地址(127.0.0.1)。本实验使用多个文件来创建一个清晰的工作环境。这些文件的描述如下:

  1. userdata.sh:这是一个 bash 脚本,将设置 EC2 服务器并为虚拟主机配置 Web 服务器。
  2. sec-grp.tf:它定义了用于创建安全组的资源。
  3. vhost-template.tf:包含要使用的实际配置的文件。
  4. main.tf:这里声明了网络服务器资源和基础设施的其余部分。

也可以合并多个文件,但这会导致代码审查更加复杂。现在让我们继续主要步骤:

第 1 步。让我们从创建一个目录开始,我们将在其中放置所有项目文件:

$ mkdir virtual-hosts-terraform

第 2 步。要为虚拟主机设置 EC2 实例,我们将使用用户数据脚本。这也将自动化我们的通用服务器配置:

$ 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

Step 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 的条目。同样,第二个对应vhost2vhost2。您可以在此处添加更多虚拟主机条目:

$ vi vhost-template.conf

<VirtualHost *:80>


    ServerAdmin

    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 名称。同样,文件命令执行用户数据脚本。

第 6 步。现在使用 init 命令初始化项目目录,然后使用 apply 命令:

$ terraform init
$ terraform apply

测试设置

现在通过 SSH 连接到您的实例并运行命令:

$ curl www.vhost1.com

上面的命令应该返回来自虚拟主机 1 索引页的消息,类似地,下面的命令应该显示来自虚拟主机 2 的消息:

$ curl www.vhost2.com

结论

我们终于成功了,我们的虚拟主机按预期工作。我们也可以使用 Terraform 执行本教程,试试吧。

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