Поиск по сайту:

Как настроить виртуальные хосты Apache в Ubuntu с помощью Terraform


На этой странице

  1. Что мы рассмотрим?
  2. Проверка перед полетом
  3. Настройка лаборатории
  4. Проверка установки
  5. Заключение

Для размещения нескольких веб-сайтов администраторы обычно полагаются на метод «виртуального хостинга». Виртуальный хостинг размещает несколько веб-сайтов на одной машине. Это может быть достигнуто либо методом «на основе IP», либо методом «на основе имени». В хостинге на основе IP у нас есть разные IP-адреса для каждого веб-сайта. В случае хостинга на основе имени у нас есть несколько имен, работающих на каждом IP-адресе.

На сегодняшний день существует множество инструментов для автоматизации облачной инфраструктуры. Terraform — один из таких инструментов, который в последнее время приобрел огромную популярность в мире DevOps. Terraform — это инструмент с открытым исходным кодом, разработанный и поддерживаемый HashiCorp. Он использует собственный язык конфигурации Hashicorp — HCL для предоставления нескольких поставщиков облачных услуг. По сути, Terraform сравнит вашу текущую конфигурацию инфраструктуры с желаемым состоянием и изменит только те части инфраструктуры, которые необходимы для достижения желаемого состояния.

Что мы будем освещать?

В этом руководстве мы увидим, как мы можем разместить два виртуальных хоста в системе Ubuntu 22.04 с помощью Terraform. Мы будем использовать веб-сервер Apache для выполнения этой лабораторной работы.

Проверка перед полетом

Прежде чем продолжить, проверьте требования для выполнения этого руководства:

  1. Основы Terraform.
  2. Terraform должен быть установлен в вашей локальной системе.
  3. Учетная запись AWS, настроенная в вашей локальной системе.
  4. Основы настройки виртуального хоста с использованием веб-сервера Apache.

Настройка лаборатории

На нашем сервере Ubuntu 22.04 мы продолжим установку веб-сервера Apache, затем настроим виртуальные хосты, каждый из которых будет иметь свой файл index.html:  \Веб-страница из: Виртуальный хост 1.\ для vhost1 и \Веб-страница из: Виртуальный хост 2.\ для vhost2.

Также для простоты мы сопоставили доменное имя двух vhosts (виртуальных хостов) с IP-адресом локального хоста (127.0.0.1). В этой лабораторной работе используется несколько файлов для создания четкой рабочей среды. Описание файлов такое:

  1. userdata.sh: это сценарий bash, который установит сервер EC2 и настроит веб-сервер для виртуальных хостов.
  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

Шаг 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. Вы можете добавить больше записей vhost здесь:

$ 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 объявите ресурс веб-сервера и задайте остальную инфраструктуру:

$ 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, просто попробуйте.