Come impostare gli host virtuali Apache sull'istanza di Ubuntu EC2 usando Terraform

Come impostare gli host virtuali Apache sull'istanza di Ubuntu EC2 usando Terraform

“Al fine di ospitare più siti Web, gli amministratori di solito configurano l'hosting virtuale su una singola macchina. Nell'hosting virtuale, possiamo utilizzare un hosting "basato su IP" o un "nome basato su nome."Nell'hosting" IP basato su IP, abbiamo distinti indirizzi IP per ogni sito Web. Nel caso dell'hosting "basato su nome", abbiamo più nomi in esecuzione su ciascun indirizzo IP."

Cosa copriremo?

In questa guida, vedremo come possiamo configurare gli host virtuali su un Amazon EC2 Ubuntu 22.04 istanza. In questo laboratorio, useremo l'hosting virtuale basato sui nomi. Useremo Terraform per distribuire l'infrastruttura desiderata.

Panoramica del laboratorio

In questo laboratorio, creeremo due host virtuali; DOMAIN1 e DOMAIN2. Installeremo un server Web Apache sulla nostra macchina Ubuntu. Ogni host virtuale ha un indice diverso.File HTML con il contenuto: “Questo è l'host virtuale 1."Per Domain1 e" Questo è virtuale host 2."Per Domain2.

Invece di registrare il nome di dominio per ciascun host, stiamo utilizzando l'indirizzo IP locale per mappare i nomi del dominio. Questo può essere fatto modificando il file "host". Per semplificare la distribuzione di questa infrastruttura, abbiamo diviso la configurazione complessiva in più file. In questo modo, ci salveremo dalla goffaggine del codice. Contorni dei file utilizzati qui:

  1. dati utente.sh: Contiene lo script necessario per l'installazione e la configurazione del server Web Apache sull'istanza Ubuntu.
  2. secgrp.tf: Crea un gruppo di sicurezza da utilizzare con l'istanza. Questo gruppo di sicurezza consentirà a SSH e HTTP di ingrandere il traffico verso l'istanza.
  3. dominio_2.conf e domain_1.conf: Contiene configurazione dell'host virtuale.
  4. principale.tf: Il punto di ingresso primario/principale per tutti i .file TF.

Configurazione dell'installazione

Passo 1. Creiamo prima una directory di lavoro che manterrà tutto il nostro .File TF:

demo $ mkdir

Passo 2. Crea UserData.File SH:

$ nano userdata.sh

Ora incolla le seguenti righe al suo interno:

#!/Bin/Bash
Sudo Apt-get Aggiornamento
SUDO APT -EGT Aggiornamento -y
sudo apt -get installa apache2 -y
Sudo SystemCtl Riavvia Apache2
sudo sh -c "echo 127.0.0.1 www.dominio1.com >> /etc /host "
sudo sh -c "echo 127.0.0.1 www.dominio2.com >> /etc /host "
sudo mkdir -p/var/www/domain_1/public_html
sudo mkdir -p/var/www/domain_2/public_html
sudo chown -r $ utente: $ utente/var/www/domain_1/public_html
sudo chown -r $ utente: $ utente/var/www/domain_2/public_html
sudo chmod -r 755 /var /www
sudo echo “Questo è l'host virtuale 1.">/Var/www/domain_1/public_html/indice.html
sudo echo “Questo è virtuale host 2.">/Var/www/domain_2/public_html/indice.html
Sudo CP/Home/Ubuntu/Domain_1.conf/etc/apache2/siti-disponibile/dominio_1.conf
Sudo CP/Home/Ubuntu/Domain_2.conf/etc/apache2/siti-disponibile/dominio_2.conf
sudo a2ensite Domain_1.conf
sudo a2ensite Domain_2.conf
sudo a2dissite 000-default.conf
Sudo SystemCtl Riavvia Apache2

Nello script sopra, abbiamo installato un server Web Apache e modificato il file dell'host per mappare l'indirizzo localhost sui nomi di dominio dei due host virtuali che vogliamo configurare. Inoltre, abbiamo configurato il server Web per i nuovi siti Web e disabilitato quello predefinito.

Passaggio 3. Crea il SECGRP.File TF per consentire il traffico di ingresso SSH e HTTP da qualsiasi luogo e traffico in uscita verso ovunque.

$ nano secgrp.tf

Incolla le seguenti righe al suo interno:

risorsa "aws_security_group" "demo-sg"
name = "SEC-GRPG"
Descrizione = "Consenti il ​​traffico HTTP e SSH tramite Terraform"
ingresso
da_port = 80
to_port = 80
Protocol = "TCP"
cidr_blocks = ["0.0.0.0/0 "]

ingresso
da_port = 22
to_port = 22
Protocol = "TCP"
cidr_blocks = ["0.0.0.0/0 "]

Egress
da_port = 0
to_port = 0
Protocol = "-1"
cidr_blocks = ["0.0.0.0/0 "]

Passaggio 4. Per la configurazione dell'host virtuale, crea due file: Domain_1.conf e domain_2.conf. Nota la posizione del root del documento in ciascun file.

IO. $ nano dominio_1.conf


ServerAdmin [email protected]
ServerName Domain1
Serveralias www.dominio1.com
DocumentRoot/var/www/domain_1/public_html
Errorlog $ apache_log_dir/errore.tronco d'albero

Ii. $ nano dominio_2.conf


ServerAdmin [email protected]
ServerName Domain2
Serveralias www.dominio2.com
DocumentRoot/var/www/domain_2/public_html
Errorlog $ apache_log_dir/errore.tronco d'albero
CustomLog $ apache_log_dir/access.Registro combinato

Passaggio 5. Infine, crea il principale.TF per completare la dichiarazione dell'infrastruttura:

$ nano main.tf
Provider "AWS"
regione = "US-EAST-1"

risorsa "aws_instance" "webserver"
AMI = "AMI-09D56F8956AB235B3"
Instance_Type = "T2.micro "
key_name = "nome-da-te-ec2-key-coperta"
vpc_security_group_ids = [aws_security_group.demo-sg.id]
Associate_public_ip_address = true
fornitore "file"
Source = "Domain_1.conf "
destinazione = "/home/ubuntu/domain_1.conf "
connessione
type = "ssh"
user = "Ubuntu"
private_key = "$ file ("/path/to // ec2-keyypair.pem ")"
host = "$ self.public_dns "


fornitore "file"
Source = "Domain_2.conf "
destinazione = "/home/ubuntu/domain_2.conf "
connessione
type = "ssh"
user = "Ubuntu"
private_key = "$ file ("/path/to // ec2-keyypair.pem ")"
host = "$ self.public_dns "


user_data = "$ file (" userdata.sh")"
tags =
Name = "virtualhosts"


output "iPaddress"
value = "$ aws_instance.server web.public_ip "

In quanto sopra .TF File, abbiamo utilizzato il fornitore di file per copiare il "dominio.conf"File dal nostro sistema locale all'istanza EC2. Questo "dominio.conf"Verrà utilizzato come file modello per creare file host virtuali specifici del dominio, i.e., “Domain_1.conf "e" domain_2.conflitto.

Passaggio 6. Tutti i nostri file di configurazione sono ora pronti; Ora è il momento di distribuire effettivamente questa configurazione. Inizializza la directory del progetto utilizzando:

$ Terraform init

Infine, crea il progetto eseguendo il comando:

$ Terraform si applica

Immettere "Sì" sul terminale quando gli viene chiesto. Dall'istanza EC2, usa il comando "Curl" per vedere cosa sta visualizzando ogni indirizzo del dominio:

Conclusione

L'hosting virtuale è una tecnica molto efficiente per la gestione di più siti Web da un singolo server. In questo laboratorio, abbiamo visto come Terraform può essere utilizzato per distribuire una semplice infrastruttura a due host. Prova a rendere questa configurazione più scalabile implementando i moduli Terraform.