Nan atik sa a nou pral gade nan ki sa Terraform konsiste de, epi tou piti piti lanse pwòp enfrastrikti nou an
Sou tout bagay an detay ak nan twa etap:
1. Terraform - deskripsyon, avantaj ak konpozan
Terraform se yon zouti IaC (Infrastructure-as-Code) pou konstwi ak jere enfrastrikti vityèl lè l sèvi avèk kòd.
Nou te note plizyè avantaj nan travay ak zouti a:
-
Vitès deplwaman nouvo lokatè yo (anviwònman vityèl koutim). Tipikman, plis nouvo kliyan gen plis "klik" anplwaye sipò teknik yo bezwen fè pou pibliye nouvo resous yo. Avèk Terraform, itilizatè yo ka chanje anviwònman machin vityèl (pa egzanp, otomatikman fèmen OS la epi ogmante patisyon ki gen kapasite vityèl la) san yo pa bezwen sipò teknik oswa fèmen machin nan tèt li.
-
Verifikasyon enstantane nan plan deklanchman an nouvo Tennant. Sèvi ak deskripsyon kòd enfrastrikti a, nou ka imedyatman tcheke sa yo pral ajoute ak nan ki lòd, osi byen ke nan ki eta final sa a oswa sa a machin vityèl oswa rezo vityèl ki gen koneksyon ak machin vityèl yo pral.
-
Kapasite pou dekri platfòm nwaj ki pi popilè yo. Ou ka itilize zouti a soti nan Amazon ak Google Cloud, nan platfòm prive ki baze sou VMware vCloud Director, ki ofri sèvis nan solisyon IaaS, SaaS ak PaaS.
-
Jere plizyè founisè nwaj epi distribye enfrastrikti a ant yo pou amelyore tolerans fay, lè l sèvi avèk yon sèl konfigirasyon pou kreye, fè dyagnostik ak jere resous nwaj yo.
-
Itilizasyon pratik pou kreye stands Demo pou tès lojisyèl ak debogaj. Ou ka kreye epi transfere kanpe pou depatman tès la, teste lojisyèl nan diferan anviwònman an paralèl, epi imedyatman chanje ak efase resous lè w kreye yon sèl plan pou konstwi resous.
"Terrarium" Terraform
Nou te pale yon ti tan sou avantaj ki genyen nan zouti a, kounye a se pou yo kraze li nan eleman li yo
Founisè yo.
Nan Terraform, prèske nenpòt kalite enfrastrikti ka reprezante kòm yon resous. Koneksyon ant resous ak platfòm API a bay modil founisè yo, ki pèmèt ou kreye resous nan yon platfòm espesifik, pou egzanp, Azure oswa VMware vCloud Director.
Kòm yon pati nan pwojè a, ou ka kominike avèk diferan founisè sou platfòm diferan.
Resous (deskripsyon resous).
Deskripsyon resous pèmèt ou jere konpozan platfòm, tankou machin vityèl oswa rezo.
Ou ka kreye yon deskripsyon resous pou founisè VMware vCloud Director tèt ou epi sèvi ak deskripsyon sa a pou kreye resous ak nenpòt founisè hosting ki itilize vCloud Director. Ou sèlman bezwen chanje paramèt otantifikasyon yo ak paramèt koneksyon rezo a bay founisè hosting obligatwa a
Founisè yo.
Eleman sa a fè li posib pou fè operasyon pou enstalasyon inisyal la ak antretyen nan sistèm operasyon an apre yo fin kreye machin vityèl. Yon fwa ou te kreye yon resous machin vityèl, ou ka itilize pwovizyon pou konfigirasyon ak konekte atravè SSH, mete ajou sistèm operasyon an, epi telechaje epi kouri yon script.
Varyab Antre ak Sòti.
Varyab antre - varyab antre pou nenpòt ki kalite blòk.
Varyab pwodiksyon pèmèt ou sove valè apre ou fin kreye resous epi yo ka itilize kòm varyab antre nan lòt modil, pou egzanp nan blòk Pwovizyonè yo.
Etazini.
Fichye Etazini yo estoke enfòmasyon sou konfigirasyon resous platfòm founisè yo. Lè platfòm la kreye premye, pa gen okenn enfòmasyon sou resous ak anvan nenpòt operasyon, Terraform mete ajou eta a ak enfrastrikti reyèl resous yo deja dekri.
Objektif prensipal eta yo se pou konsève pou yon pakèt bagay nan resous deja kreye yo konpare konfigirasyon an nan resous te ajoute ak objè yo nan lòd pou fè pou evite repete kreyasyon ak chanjman nan platfòm la.
Pa default, enfòmasyon eta yo estoke nan fichye terraform.tfstate lokal la, men si sa nesesè, li posib pou itilize depo aleka pou travay ekip.
Ou kapab tou enpòte resous platfòm aktyèl yo nan eta a plis kominike avèk lòt resous ki te nan vire kreye san èd nan Terraform.
2. Kreyasyon enfrastrikti
Konpozan yo te klase soti, kounye a lè l sèvi avèk Terraform nou pral piti piti kreye yon enfrastrikti ak twa machin vityèl. Premye a ak sèvè proxy nginx enstale, dezyèm lan ak depo dosye ki baze sou Nextcloud ak twazyèm lan ak CMS Bitrix.
Nou pral ekri kòd epi egzekite li lè l sèvi avèk egzanp nou an
Premyèman, ann kreye yon anyè pou nouvo pwojè nou an kote yo pral mete dosye ki dekri enfrastrikti a.
mkdir project01
Apre sa, nou dekri eleman enfrastrikti yo. Terraform kreye relasyon ak trete dosye ki baze sou deskripsyon ki nan dosye yo. Fichye yo tèt yo ka nonmen baze sou objektif blòk yo dekri, pou egzanp, network.tf - dekri paramèt rezo a pou enfrastrikti a.
Pou dekri eleman enfrastrikti nou an, nou te kreye dosye sa yo:
Lis fichye yo.
main.tf - deskripsyon paramèt pou anviwònman an vityèl - machin vityèl, resipyan vityèl;
network.tf - deskripsyon paramèt rezo vityèl ak règ NAT ak Firewall;
variables.tf - lis varyab ke nou itilize;
vcd.tfvars - valè varyab pwojè pou modil VMware vCloud Director.
Lang konfigirasyon nan Terraform se deklaratif ak lòd blòk yo pa gen pwoblèm, eksepte pou blòk pwovizyon yo, paske nan blòk sa a nou dekri kòmandman yo dwe egzekite lè w ap prepare enfrastrikti a epi yo pral egzekite nan lòd.
Estrikti blòk.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
Pou dekri blòk yo, yo itilize pwòp langaj pwogramasyon HCL (HashiCorp Configuration Language) ; li posib pou dekri enfrastrikti a lè l sèvi avèk JSON. Ou ka aprann plis sou sentaks la
Konfigirasyon varyab anviwònman an, variables.tf ak vcd.tfvars
Premyèman, ann kreye de fichye ki dekri lis tout varyab yo itilize ak valè yo pou modil VMware vCloud Director. Premyèman, ann kreye fichye variables.tf.
Sa ki nan fichye variables.tf.
variable "vcd_org_user" {
description = "vCD Tenant User"
}
variable "vcd_org_password" {
description = "vCD Tenant Password"
}
variable "vcd_org" {
description = "vCD Tenant Org"
}
variable "vcd_org_vdc" {
description = "vCD Tenant VDC"
}
variable "vcd_org_url" {
description = "vCD Tenant URL"
}
variable "vcd_org_max_retry_timeout" {
default = "60"
}
variable "vcd_org_allow_unverified_ssl" {
default = "true"
}
variable "vcd_org_edge_name" {
description = "vCD edge name"
}
variable "vcd_org_catalog" {
description = "vCD public catalog"
}
variable "vcd_template_os_centos7" {
description = "OS CentOS 7"
default = "CentOS7"
}
variable "vcd_org_ssd_sp" {
description = "Storage Policies"
default = "Gold Storage Policy"
}
variable "vcd_org_hdd_sp" {
description = "Storage Policies"
default = "Bronze Storage Policy"
}
variable "vcd_edge_local_subnet" {
description = "Organization Network Subnet"
}
variable "vcd_edge_external_ip" {
description = "External public IP"
}
variable "vcd_edge_local_ip_nginx" {}
variable "vcd_edge_local_ip_bitrix" {}
variable "vcd_edge_local_ip_nextcloud" {}
variable "vcd_edge_external_network" {}
Valè varyab ke nou resevwa nan men founisè a.
-
vcd_org_user — non itilizatè ki gen dwa Administratè Òganizasyon,
-
vcd_org_password — modpas itilizatè,
-
vcd_org - non òganizasyon an,
-
vcd_org_vdc — non sant done vityèl la,
-
vcd_org_url - API URL,
-
vcd_org_edge_name - non routeur vityèl la,
-
vcd_org_catalog — non anyè a ak modèl machin vityèl,
-
vcd_edge_external_ip — adrès IP piblik,
-
vcd_edge_external_network — non rezo ekstèn lan,
-
vcd_org_hdd_sp — non politik depo HDD a,
-
vcd_org_ssd_sp — non politik depo SSD la.
Epi antre varyab nou yo:
-
vcd_edge_local_ip_nginx — adrès IP machin vityèl la ak NGINX,
-
vcd_edge_local_ip_bitrix - adrès IP machin vityèl la ak 1C: Bitrix,
-
vcd_edge_local_ip_nextcloud — adrès IP machin vityèl la ak Nextcloud.
Avèk dezyèm fichye a nou kreye epi presize varyab pou modil la VMware vCloud Director nan fichye vcd.tfvars la: Ann sonje ke nan egzanp nou an nou itilize
Sa ki nan fichye vcd.tfvars.
vcd_org_url = "https://vcloud.mclouds.ru/api"
vcd_org_user = "orgadmin"
vcd_org_password = "*"
vcd = "org"
vcd_org_vdc = "orgvdc"
vcd_org_maxretry_timeout = 60
vcd_org_allow_unverified_ssl = true
vcd_org_catalog = "Templates"
vcd_templateos_centos7 = "CentOS7"
vcd_org_ssd_sp = "Gold Storage Policy"
vcd_org_hdd_sp = "Bronze Storage Policy"
vcd_org_edge_name = "MCLOUDS-EDGE"
vcd_edge_external_ip = "185.17.66.1"
vcd_edge_local_subnet = "192.168.110.0/24"
vcd_edge_local_ip_nginx = "192.168.110.1"
vcd_edge_local_ip_bitrix = "192.168.110.10"
vcd_edge_local_ip_nextcloud = "192.168.110.11"
vcd_edge_external_network = "NET-185-17-66-0"
Rezo konfigirasyon, network.tf.
Varyab anviwònman yo mete, kounye a nou pral mete konplo koneksyon machin vityèl - nou pral bay yon adrès IP prive nan chak machin vityèl epi sèvi ak Destination NAT pou "voye" pò yo nan rezo ekstèn lan. Pou limite aksè nan pò jesyon, nou pral mete aksè sèlman pou adrès IP nou an.
Dyagram rezo pou platfòm Terraform ap kreye
Nou kreye yon rezo òganizasyonèl vityèl ak non net_lan01, pòtay default la: 192.168.110.254, epi tou ak espas adrès la: 192.168.110.0/24.
Nou dekri yon rezo vityèl.
resource "vcd_network_routed" "net" {
name = "net_lan01"
edge_gateway = var.vcd_org_edge_name
gateway = "192.168.110.254"
dns1 = "1.1.1.1"
dns2 = "8.8.8.8"
static_ip_pool {
start_address = "192.168.110.1"
end_address = "192.168.110.253"
}
}
Ann kreye règ firewall ki pèmèt machin vityèl jwenn aksè nan entènèt la. Nan blòk sa a, tout resous vityèl nan nwaj la pral gen aksè a Entènèt:
Nou dekri règ yo pou aksè VM sou entènèt la.
resource "vcd_nsxv_firewall_rule" "fw_internet_access" {
edge_gateway = var.vcdorgedgename
name = "Internet Access"
source {
gateway_interfaces = ["internal"]
}
destination {
gateway_interfaces = ["external"]
}
service {
protocol = "any"
}
depends_on = [vcdnetworkrouted.net]
}
Èske w gen etabli depandans la ke apre trete blòk la vcdnetworkrouted.net, nou kontinye nan konfigirasyon blòk la vcdnsxvfirewallrule., lè l sèvi avèk depann. Nou itilize opsyon sa a paske kèk depandans yo ka rekonèt implicite nan konfigirasyon an.
Apre sa, nou pral kreye règ ki pèmèt aksè nan pò soti nan rezo a ekstèn epi endike adrès IP nou an pou konekte via SSH nan sèvè yo. Nenpòt itilizatè entènèt gen aksè a pò 80 ak 443 sou sèvè entènèt la, epi yon itilizatè ki gen yon adrès IP 90.1.15.1 gen aksè a pò SSH nan sèvè vityèl yo.
Pèmèt aksè nan pò soti nan rezo ekstèn lan.
resource "vcd_nsxv_firewall_rule" "fwnatports" {
edge_gateway = var.vcd_org_edge_name
name = "HTTPs Access"
source {
gateway_interfaces = ["external"]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "80"
}
service {
protocol = "tcp"
port = "443"
}
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {
edge_gateway = var.vcd_org_edge_name
name = "Admin Access"
source {
ip_addresses = [ "90.1.15.1" ]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "58301"
}
service {
protocol = "tcp"
port = "58302"
}
service {
protocol = "tcp"
port = "58303"
}
depends_on = [vcd_network_routed.net]
}
Nou kreye règleman Source NAT pou jwenn aksè nan entènèt la nan yon rezo lokal nwaj:
Nou dekri règ Sous NAT yo.
resource "vcd_nsxv_snat" "snat_local" {
edge_gateway = var.vcd_org_edge_name
network_type = "ext"
network_name = var.vcdedgeexternalnetwork
original_address = var.vcd_edge_local_subnet
translated_address = var.vcd_edge_external_ip
depends_on = [vcd_network_routed.net]
}
Epi pou konplete konfigirasyon blòk rezo a, nou ajoute règ Destination NAT pou jwenn aksè nan sèvis ki soti nan rezo ekstèn lan:
Ajoute règ NAT destinasyon yo.
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTPs"
original_address = var.vcd_edge_external_ip
original_port = 443
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTP"
original_address = var.vcd_edge_external_ip
original_port = 80
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Ajoute yon règ NAT pou tradiksyon pò sou sèvè SSH la anba Nginx.
resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH NGINX"
original_address = var.vcd_edge_external_ip
original_port = 58301
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Ajoute yon règ NAT pou tradiksyon pò sou sèvè SSH la ak 1C-Bitrix.
resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Bitrix"
original_address = var.vcd_edge_external_ip
original_port = 58302
translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Ajoute yon règ NAT pou tradiksyon pò sou sèvè SSH la ak Nextcloud.
resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Nextcloud"
original_address = var.vcd_edge_external_ip
original_port = 58303
translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Main.tf konfigirasyon anviwònman vityèl
Kòm nou te planifye nan kòmansman atik la, nou pral kreye twa machin vityèl. Yo pral prepare lè l sèvi avèk "Personalizasyon envite". Nou pral mete paramèt rezo yo dapre paramèt nou espesifye yo, epi modpas itilizatè a pral pwodwi otomatikman.
Ann dekri vApp kote machin vityèl yo pral lokalize ak konfigirasyon yo.
Konfigirasyon machin vityèl
Ann kreye yon veso vApp. Pou nou ka imedyatman konekte vApp ak VM nan rezo vityèl la, nou ajoute tou paramèt depends_on:
Kreye yon veso
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
Ann kreye yon machin vityèl ak yon deskripsyon
resource "vcd_vapp_vm" "nginx" {
vapp_name = vcd_vapp.vapp.name
name = "nginx"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nginx
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
Paramèt prensipal nan deskripsyon VM:
-
non - non machin vityèl la,
-
vappname - non vApp a pou ajoute yon nouvo VM,
-
cataloguename / templatename - non katalòg ak non modèl machin vityèl,
-
storageprofile - règleman depo default.
Paramèt blòk rezo:
-
kalite - kalite rezo konekte,
-
non - ki rezo vityèl pou konekte VM a,
-
isprimary - adaptè rezo prensipal,
-
ipallocation_mode — Mòd alokasyon adrès MANYÈL / DHCP / POOL,
-
ip — adrès IP pou machin vityèl la, nou pral presize li manyèlman.
override_template_disk blòk:
-
sizeinmb — gwosè disk bòt pou machin vityèl la
-
storage_profile — politik depo pou disk la
Ann kreye yon dezyèm VM ak yon deskripsyon depo dosye Nextcloud la
resource "vcd_vapp_vm" "nextcloud" {
vapp_name = vcd_vapp.vapp.name
name = "nextcloud"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nextcloud
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
resource "vcd_vm_internal_disk" "disk1" {
vapp_name = vcd_vapp.vapp.name
vm_name = "nextcloud"
bus_type = "paravirtual"
size_in_mb = "102400"
bus_number = 0
unit_number = 1
storage_profile = var.vcd_org_hdd_sp
allow_vm_reboot = true
depends_on = [ vcd_vapp_vm.nextcloud ]
}
Nan seksyon vcdvminternal_disk nou pral dekri yon nouvo disk vityèl ki konekte ak machin vityèl la.
Eksplikasyon pou blòk vcdvmininternaldisk la:
-
bustype - kalite kontwolè disk
-
sizeinmb — gwosè disk
-
busnumber / unitnumber - kote koneksyon nan adaptè a
-
storage_profile — politik depo pou disk la
Ann dekri dènye VM sou Bitrix
resource "vcd_vapp_vm" "bitrix" {
vapp_name = vcd_vapp.vapp.name
name = "bitrix"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_bitrix
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "81920"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
Mete ajou eksplwatasyon an ak enstale scripts adisyonèl
Rezo a prepare, machin vityèl yo dekri. Anvan enpòte enfrastrikti nou an, nou ka fè premye pwovizyon davans lè l sèvi avèk blòk pwovizyon epi san nou pa itilize Ansible.
Ann gade ki jan yo mete ajou OS la epi kouri script enstalasyon CMS Bitrix lè l sèvi avèk blòk pwovizyon an.
Premyèman, ann enstale pakè aktyalizasyon CentOS.
resource "null_resource" "nginx_update_install" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip" ]
}
}
}
Deziyasyon eleman yo:
-
pwovizyon "remote-exec" - konekte blòk pwovizyon aleka
-
Nan blòk koneksyon an nou dekri kalite a ak paramèt pou koneksyon an:
-
tip - pwotokòl, nan ka nou an SSH;
-
itilizatè — non itilizatè;
-
modpas - modpas itilizatè. Nan ka nou an, nou lonje dwèt sou paramèt vcdvappvm.nginx.customization[0].admin_password, ki estoke modpas ki pwodui pou itilizatè sistèm lan.
-
host - ekstèn adrès IP pou koneksyon;
-
pò — pò pou koneksyon, ki te deja espesifye nan anviwònman DNAT yo;
-
inline - lis lis kòmandman yo pral antre. Kòmandman yo pral antre nan lòd jan sa endike nan seksyon sa a.
Kòm yon egzanp, ann anplis egzekite script enstalasyon 1C-Bitrix la. Pwodiksyon rezilta ekzekisyon script la ap disponib pandan plan an ap kouri. Pou enstale script la, premye nou dekri blòk la:
Ann dekri enstalasyon 1C-Bitrix.
provisioner "file" {
source = "prepare.sh"
destination = "/tmp/prepare.sh"
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"
]
}
Epi nou pral imedyatman dekri aktyalizasyon Bitrix la.
Yon egzanp pwovizyon 1C-Bitrix.
resource "null_resource" "install_update_bitrix" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.bitrix.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58302"
timeout = "60s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip",
"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",
"chmod +x /tmp/bitrix-env.sh",
"/tmp/bitrix-env.sh"
]
}
}
Enpòtan! Script la ka pa travay si ou pa enfim SELinux davans! Si ou bezwen yon atik detaye sou enstale ak konfigirasyon CMS 1C-Bitrix lè l sèvi avèk bitrix-env.sh, oo ou kapab
3. Inisyalizasyon enfrastrikti
Inisyalize modil ak grefon
Pou travay, nou itilize yon senp "twos mesye": yon laptop ak Windows 10 OS ak yon twous distribisyon ki soti nan sit entènèt ofisyèl la. terraform.exe init
Apre nou fin dekri enfrastrikti enfòmatik ak rezo a, nou lanse planifikasyon pou teste konfigirasyon nou an, kote nou ka wè sa ki pral kreye ak kijan li pral konekte youn ak lòt.
-
Egzekite kòmandman an
- terraform plan -var-file=vcd.tfvars
. -
Nou jwenn rezilta a
- Plan: 16 to add, 0 to change, 0 to destroy.
Sa vle di, dapre plan sa a, 16 resous yo pral kreye. -
Nou lanse plan an sou lòd
- terraform.exe apply -var-file=vcd.tfvars
.
Yo pral kreye machin vityèl, epi apre pakè nou te site yo pral egzekite nan seksyon pwovizyon - OS la pral mete ajou epi CMS Bitrix pral enstale.
Resevwa enfòmasyon sou koneksyon
Apre egzekite plan an, nou vle resevwa done nan fòm tèks pou konekte ak sèvè yo, pou sa nou pral fòma seksyon pwodiksyon an jan sa a:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
Ak pwodiksyon sa a di nou modpas la pou machin vityèl kreye a:
Outputs: nginx_password = F#4u8!!N
Kòm yon rezilta, nou jwenn aksè nan machin vityèl ak yon sistèm opere aktyalize ak pakè pre-enstale pou plis travay nou an. Tout pare!
Men, e si ou deja genyen enfrastrikti ki egziste deja?
3.1. Travay Terraform ak enfrastrikti ki egziste deja
Li senp, ou ka enpòte machin vityèl aktyèl yo ak kontenè vApp yo lè l sèvi avèk lòd enpòte a.
Ann dekri resous vAPP ak machin vityèl la.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
Pwochen etap la se enpòte pwopriyete resous vApp nan fòma a vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
, kote:
-
vApp - non vApp;
-
org — non òganizasyon an;
-
org_vdc — non sant done vityèl la.
Enpòte pwopriyete resous vAPP
Ann enpòte pwopriyete resous VM yo nan fòma a: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, nan ki:
-
VM - Non VM;
-
vApp - non vApp;
-
org — non òganizasyon an;
-
orgvdc se non sant done vityèl la.
Enpòte te gen siksè
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Import prepared!
Prepared vcd_vapp_vm for import
vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
Koulye a, nou ka gade nan nouvo resous enpòte:
Resous enpòte
> terraform show
...
# vcd_vapp.Monitoring:
resource "vcd_vapp" "Monitoring" {
guest_properties = {}
href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"
id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"
ip = "allocated"
metadata = {}
name = "Monitoring"
org = "mClouds"
status = 4
status_text = "POWERED_ON"
vdc = "mClouds"
}
…
# vcd_vapp_vm.Zabbix:
resource "vcd_vapp_vm" "Zabbix" {
computer_name = "Zabbix"
cpu_cores = 1
cpus = 2
expose_hardware_virtualization = false
guest_properties = {}
hardware_version = "vmx-14"
href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
internal_disk = [
{
bus_number = 0
bus_type = "paravirtual"
disk_id = "2000"
iops = 0
size_in_mb = 122880
storage_profile = "Gold Storage Policy"
thin_provisioned = true
unit_number = 0
},
]
memory = 8192
metadata = {}
name = "Zabbix"
org = "mClouds"
os_type = "centos8_64Guest"
storage_profile = "Gold Storage Policy"
vapp_name = "Monitoring"
vdc = "mClouds"
customization {
allow_local_admin_password = true
auto_generate_password = true
change_sid = false
enabled = false
force = false
join_domain = false
join_org_domain = false
must_change_password_on_first_login = false
number_of_auto_logons = 0
}
network {
adapter_type = "VMXNET3"
ip_allocation_mode = "DHCP"
is_primary = true
mac = "00:50:56:07:01:b1"
name = "MCLOUDS-LAN01"
type = "org"
}
}
Koulye a, nou definitivman pare - nou fini ak dènye pwen an (enpòte nan enfrastrikti ki egziste deja) epi yo te konsidere tout pwen prensipal yo nan travay ak Terraform.
Zouti a te tounen trè pratik epi li pèmèt ou dekri enfrastrikti ou kòm kòd, kòmanse nan machin vityèl nan yon founisè nwaj pou dekri resous eleman rezo yo.
An menm tan, endepandans nan anviwònman an fè li posib pou travay ak resous lokal yo, nwaj, e menm jere platfòm la. Men, si pa gen okenn platfòm sipòte epi ou vle ajoute yon nouvo, ou ka ekri founisè pwòp ou a epi sèvi ak li.
Sous: www.habr.com