Ricerca nel sito web

Come configurare gli host virtuali Apache su Ubuntu utilizzando Terraform


Su questa pagina

  1. Di cosa parleremo?
  2. Controllo pre-volo
  3. Impostazione del laboratorio
  4. Testare l'installazione
  5. Conclusione

Per l'hosting di più siti Web, gli amministratori si affidano comunemente alla tecnica dell'hosting virtuale. L'hosting virtuale ospita più siti Web utilizzando una singola macchina. Può essere raggiunto con un metodo basato su IP o un approccio basato sul nome. Nell'hosting basato su IP abbiamo indirizzi IP distinti per ogni sito web. In caso di hosting basato sul nome, abbiamo più nomi in esecuzione su ciascun indirizzo IP.

Oggi sono disponibili molti strumenti per automatizzare l'infrastruttura basata su cloud. Terraform è uno di questi strumenti che ha recentemente guadagnato un'enorme popolarità nel mondo DevOps. Terraform è uno strumento open source sviluppato e gestito da HashiCorp. Utilizza il proprio linguaggio di configurazione Hashicorp - HCL per fornire più fornitori di servizi cloud. Fondamentalmente, Terraform confronterà la tua attuale configurazione dell'infrastruttura con lo stato desiderato e modificherà solo quelle parti dell'infrastruttura necessarie per raggiungere lo stato desiderato.

Cosa copriremo?

In questo tutorial vedremo come possiamo ospitare due host virtuali su un sistema Ubuntu 22.04 utilizzando Terraform. Useremo il web server Apache per eseguire questo lab.

Controllo pre-volo

Prima di procedere oltre, verifica i requisiti per l'esecuzione di questa guida:

  1. Nozioni di base di Terraform.
  2. Terraform dovrebbe essere installato sul tuo sistema locale.
  3. Account AWS configurato sul tuo sistema locale.
  4. Nozioni di base sulla configurazione di un host virtuale utilizzando il server Web Apache.

Allestimento del laboratorio

Sul nostro server Ubuntu 22.04, procederemo con l'installazione del server web Apache, quindi configureremo gli host virtuali con ciascuno con un diverso file index.html:  \Webpage from: Virtual Host 1.\ per vhost1 e  \Webpage from: Host virtuale 2.\ per vhost2.

Inoltre, per semplificare le cose, abbiamo mappato il nome di dominio per i due vhost (host virtuali) all'indirizzo IP dell'host locale (127.0.0.1). Questo laboratorio utilizza più file per creare un ambiente di lavoro chiaro. La descrizione dei file è come:

  1. userdata.sh: è uno script bash che imposterà il server EC2 e configurerà il server Web per gli host virtuali.
  2. sec-grp.tf: definisce una risorsa per la creazione di un gruppo di sicurezza.
  3. vhost-template.tf: il file contenente la configurazione effettiva da utilizzare.
  4. main.tf: qui vengono dichiarate la risorsa del server Web e il resto dell'infrastruttura.

È anche possibile unire più file, ma ciò causerà maggiori complicazioni nella revisione del codice. Passiamo ora ai passaggi principali:

Passaggio 1. Iniziamo con la creazione di una directory in cui posizioneremo tutti i file di progetto:

$ mkdir virtual-hosts-terraform

Passaggio 2. Per configurare l'istanza EC2 per l'hosting virtuale, utilizzeremo uno script userdata. Questo automatizzerà anche la nostra configurazione del server comune:

$ 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

Passaggio 3. Successivamente, configureremo una risorsa del gruppo di sicurezza per impostare le regole del traffico in entrata e in uscita. Consenti il traffico in entrata SSH e HTTP da tutti i lati e l'uscita (in uscita) ovunque:

$ 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"]

  }

}

Passaggio 4. Questo file contiene la configurazione effettiva per ciascun host virtuale. La prima sezione contiene la voce per vhost1. Allo stesso modo, il secondo corrisponde a vhost2vhost2. Puoi aggiungere più voci vhost qui:

$ 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>

Passaggio 5. Nel file main.tf, dichiarare una risorsa del server Web e impostare il resto dell'infrastruttura:

$ 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}"

}

Il file provisioner viene utilizzato per caricare il file vhost-template.conf nell'istanza EC2. Il blocco di output stampa il nome DNS pubblico dell'istanza. Allo stesso modo, il comando file esegue lo script userdata.

Passo 6. Ora inizializza la directory del progetto con il comando init seguito dal comando apply:

$ terraform init
$ terraform apply

Testare l'installazione

Ora SSH alla tua istanza ed esegui il comando:

$ curl www.vhost1.com

Il comando precedente dovrebbe restituire il messaggio dalla pagina indice dell'host virtuale1, allo stesso modo il comando seguente dovrebbe visualizzare il messaggio dall'host virtuale2:

$ curl www.vhost2.com

Conclusione

Finalmente ce l'abbiamo fatta, il nostro hosting virtuale funziona come previsto. Possiamo anche eseguire questo tutorial utilizzando Terraform, basta provarlo.