WordPress-i paigaldamine Pilviosse Docker Compose'iga, kasutades Terraformi
Sissejuhatus
Selles juhendis kasutame Terraformi, et täielikult automatiseerida produktsioonivalmis WordPressi lehe paigaldus Pilvio virtuaalmasinasse. Me ei paigalda ainult virtuaalmasinat, vaid seadistame ka kogu tarkvaralise lahenduse, mis koosneb WordPressist, MySQL andmebaasist ja Caddy veebiserverist. Kõik need komponendid töötavad eraldiseisvates Docker konteinerites, mida haldab Docker Compose. Lisaks seadistab Caddy automaatselt Let's Encrypt abil tasuta HTTPS-sertifikaadi, tagades turvalise ühenduse.
Lõpptulemusena on sul kood, mis suudab mõne minutiga luua täielikult toimiva WordPressi lehe ja selle ka hiljem sama lihtsalt eemaldada.
Eeltingimused
Enne alustamist veendu, et sul on olemas järgmised asjad:
- Pilvio konto: Sul peab olema aktiveeritud arveldusega Pilvio konto.
- Pilvio API võti: Loodud ja salvestatud API võti. Selle leiad Pilvio halduspaneelist.
- Pilvio arvelduskonto ID: Sinu konto unikaalne ID. Ka selle leiad halduspaneelist.
- Domeen: Registreeritud domeeninimi (nt
minublogi.ee), mille DNS-kirjeid sa saad muuta. - Terraform: Sinu arvutisse peab olema paigaldatud Terraform.
- SSH võtmepaar: Toimiv SSH võtmepaar (avalik ja privaatne võti), mida kasutada virtuaalmasinaga ühendumiseks.
Samm 1 — Floating-IP loomine ja domeeni suunamine
Enne Terraformiga alustamist peame looma floating-IP ja suunama oma domeeni sellele IP-aadressile. See on vajalik, sest Caddy veebiserver üritab kohe pärast käivitamist hankida domeenile SSL-sertifikaati. Selleks peab domeen juba viitama serveri korrektsele IP-aadressile.
- Mine Pilvio halduspaneeli: Network → Floating IPs.
- Loo uus floating-IP ja anna talle nimeks
wp_caddy_ip. Pilvio omistab sulle staatilise IP-aadressi, näiteks176.112.152.224. Salvesta see aadress, sest seda läheb hiljem vaja. - Mine oma domeeni registripidaja (või DNS-teenuse pakkuja) halduspaneeli ja loo uus A-kirje:
- Tüüp:
A - Nimi / Host:
blogi.sinudomeen.ee(või@, kui soovid kasutada juurdomeeni) - Väärtus / Points to:
176.112.152.224(Sinu Pilviost saadud ujuv-IP) - TTL:
3600(või jäta vaikimisi väärtus)
- Tüüp:
Nüüd, kui DNS on seadistatud, võime hakata looma oma Terraformi konfiguratsiooni.
Samm 2 — Terraformi failide ettevalmistamine
Loo oma projekti jaoks uus kaust (nt wordpress-pilvio) ja loo sinna sisse järgmised failid.
versions.tf
See fail määrab ära Terraformi enda ja vajalike providerite versioonid. See tagab, et konfiguratsioon töötab ka tulevikus ootuspäraselt.
terraform {
required_version = ">= 1.3.0"
required_providers {
pilvio = {
source = "pilvio-com/pilvio"
version = ">= 1.0.0"
}
}
}
provider "pilvio" {
apikey = var.apikey
host = "api.pilvio.com"
location = var.location
}terraform {}plokk nõuab, et kasutatav Terraformi versioon oleks vähemalt1.3.0.required_providers {}plokk defineerib, et me kasutamepilvioproviderit, mis laetakse alla otse Terraformi registrist.provider "pilvio" {}plokk konfigureerib Pilvio provideri. See kasutab muutujaid (var.apikey,var.location), et autentida end API vastu ja valida andmekeskuse asukoht.
variables.tf
See fail deklareerib kõik muutujad, mida meie projektis kasutatakse. Muutujate kasutamine teeb konfiguratsiooni paindlikuks ja korduvkasutatavaks. Tegelikud väärtused anname ette eraldi terraform.tfvars failis.
variable "apikey" {
description = "Pilvio API key"
type = string
sensitive = true
}
variable "billing_account_id" {
description = "Your Pilvio billing account ID"
type = number
}
variable "location" {
description = "Pilvio region"
type = string
default = "tll01"
}
variable "vm_name" {
description = "Name of the VM"
type = string
default = "wordpress-caddy"
}
variable "vm_username" {
type = string
default = "admin"
}
variable "vm_password" {
description = "VM login password (still required by API even if you use SSH)"
type = string
sensitive = true
}
variable "public_key" {
description = "SSH public key"
type = string
}
variable "wp_caddy_ip" {
description = "Existing floating IP address"
type = string
}
variable "domain_name" {
description = "Your domain pointing to the floating IP"
type = string
}
variable "vm_memory" {
type = number
default = 2048
}
variable "vm_vcpu" {
type = number
default = 2
}
variable "vm_disk_size" {
type = number
default = 25
}
variable "bucket_name" {
description = "Name of S3-compatible bucket"
type = string
default = "wordpress-assets"
}
variable "db_user" {
type = string
default = "wordpress"
}
variable "db_password" {
type = string
sensitive = true
}
variable "db_name" {
type = string
default = "wordpress"
}sensitive = trueatribuut tagab, et paroolide ja API-võtmete väärtusi ei kuvata Terraformi väljundis.defaultväärtused on eeltäidetud, kuid neid saabterraform.tfvarsfailis üle kirjutada.
main.tf
See on meie infrastruktuuri peamine kirjeldusfail. Siin defineerime kõik ressursid, mida soovime luua: virtuaalvõrgu, virtuaalmasina, S3-ühilduva bucketi ja seome floating-IP serveriga.
resource "pilvio_vpc" "main" {
name = "wordpress-vpc"
}
resource "pilvio_vm" "wordpress" {
name = var.vm_name
os_name = "ubuntu"
os_version = "22.04"
memory = var.vm_memory
vcpu = var.vm_vcpu
username = var.vm_username
password = var.vm_password
disks = var.vm_disk_size
billing_account_id = var.billing_account_id
network_uuid = pilvio_vpc.main.uuid
public_key = var.public_key
cloud_init = jsonencode({
packages = ["docker.io", "docker-compose"]
write_files = [
{
path = "/home/${var.vm_username}/docker-compose.yml"
permissions = "0644"
encoding = "b64"
content = base64encode(templatefile("${path.module}/docker-compose.tpl", {
db_user = var.db_user,
db_password = var.db_password,
db_name = var.db_name,
domain_name = var.domain_name
}))
},
{
path = "/home/${var.vm_username}/Caddyfile"
permissions = "0644"
content = "${var.domain_name} {\n reverse_proxy wordpress:80\n}"
}
],
runcmd = [
"usermod -aG docker ${var.vm_username}",
"usermod -aG sudo ${var.vm_username}",
"chown ${var.vm_username}:${var.vm_username} /home/${var.vm_username}/*.yml /home/${var.vm_username}/Caddyfile",
"cd /home/${var.vm_username}",
"sudo docker-compose up -d"
]
})
}
data "pilvio_floatingip" "wp_caddy" {
address = var.wp_caddy_ip
}
resource "pilvio_floatingip_assignment" "attach_wp_caddy" {
address = data.pilvio_floatingip.wp_caddy.address
assigned_to = pilvio_vm.wordpress.uuid
}
resource "pilvio_bucket" "assets" {
name = var.bucket_name
billing_account_id = var.billing_account_id
}resource "pilvio_vpc" "main": Loob privaatse virtuaalvõrgu (VPC), et meie virtuaalmasin saaks võrguühenduse.resource "pilvio_vm" "wordpress": See on peamine ressurss, mis loob virtuaalmasina. Parameetrid naguos_name,memory,vcpujne on siin defineeritud.cloud_init: See on kõige maagilisem osa.cloud-initon standard, mis võimaldab käivitada skripte virtuaalmasina esimesel käivitusel.packages: Anname korralduse paigaldadadocker.iojadocker-compose.write_files: Loob virtuaalmasinasse kaks faili. Esimene ondocker-compose.yml, mille sisu võetaksedocker-compose.tplmallifailist ja täidetakse muutujatega. Sisu kodeeritaksebase64formaati. Teine onCaddyfile, mis on Caddy veebiserveri lihtne konfiguratsioonifail.runcmd: Käivitab rea käske pärast failide loomist. Need käsud lisavad kasutajadockerjasudogruppidesse, seavad õiged omanikud failidele ja lõpuks käivitavaddocker-compose up -dkäsuga kogu meie WordPressi lahenduse.
data "pilvio_floatingip" "wp_caddy": See ei loo uut ressurssi, vaid loeb andmeid juba olemasoleva ujuv-IP kohta, mille me esimeses sammus käsitsi lõime.resource "pilvio_floatingip_assignment" "attach_wp_caddy": Seob eelnevalt loetud ujuv-IP äsja loodudwordpressvirtuaalmasinaga.resource "pilvio_bucket" "assets": Loob S3-ühilduva objektisalvestuse bucket'i, mida saab tulevikus kasutada näiteks WordPressi meediafailide hoidmiseks.
docker-compose.tpl
See on mallifail, mitte valmis yml-fail. Terraform kasutab seda malli, et genereerida docker-compose.yml fail, asendades ${...} kohatäited tegelike väärtustega variables.tf failist.
YAML
version: '3.7'
services:
wordpress:
image: wordpress:latest
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: ${db_user}
WORDPRESS_DB_PASSWORD: ${db_password}
WORDPRESS_DB_NAME: ${db_name}
WORDPRESS_CONFIG_EXTRA: |
define('WP_HOME','https://${domain_name}');
define('WP_SITEURL','https://${domain_name}');
volumes:
- wp_data:/var/www/html
expose:
- "80"
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: ${db_name}
MYSQL_USER: ${db_user}
MYSQL_PASSWORD: ${db_password}
MYSQL_RANDOM_ROOT_PASSWORD: "1"
volumes:
- db_data:/var/lib/mysql
caddy:
image: caddy:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- caddy_data:/data
- caddy_config:/config
- ./Caddyfile:/etc/caddy/Caddyfile
depends_on:
- wordpress
volumes:
wp_data:
db_data:
caddy_data:
caddy_config:services: Defineerib kolm teenust (konteinerit):wordpress: Ametlik WordPressi konteiner.environmentsektsioon seadistab andmebaasi ühenduse parameetrid ja WordPressi aadressi.db: MySQL 5.7 andmebaasi konteiner.caddy: Caddy veebiserveri konteiner. See avab pordid 80 ja 443 ning kasutabCaddyfilefaili, et suunata liiklus WordPressi konteinerile ja hankida automaatselt HTTPS-sertifikaat.
volumes: Need loovad püsivad andmekettad (Docker volumes), et WordPressi failid, andmebaas ja Caddy sertifikaadid säiliksid ka siis, kui konteinerid taaskäivitatakse.
outputs.tf
See fail määrab, millised andmed kuvatakse kasutajale pärast Terraformi edukat käivitamist. See on kasulik, et saada kiire ülevaade loodud infrastruktuuri olulistest parameetritest.
Terraform
output "wordpress_domain" {
value = var.domain_name
}
output "wordpress_ip" {
value = data.pilvio_floatingip.wp_caddy.address
}
output "bucket_name" {
value = pilvio_bucket.assets.name
}Samm 3 — Muutujate konfigureerimine (terraform.tfvars)
Nüüd, kus kõik mallid ja konfiguratsioonid on paigas, peame andma Terraformile ette konkreetsed väärtused. Loo samasse kausta fail nimega terraform.tfvars. ÄRA KUNAGI lisa seda faili avalikku koodihoidlasse (nagu GitHub), sest see sisaldab sinu saladusi!
Kopeeri allolev sisu faili terraform.tfvars ja asenda väärtused enda omadega.
# Asenda väärtused enda omadega
# Pilvio seaded
apikey = "sinu-pilvio-api-võti-tuleb-siia"
billing_account_id = 123456
vm_password = "VägaTugevParool123!"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
# Infrastruktuuri seaded
wp_caddy_ip = "sinu-loodud-floating-ip-väärtus"
domain_name = "blogi.sinudomeen.ee"
# Andmebaasi seaded
db_user = "wordpress"
db_password = "turvaline-andmebaasi-parool"
db_name = "wordpress"Juhised väärtuste täitmiseks:
apikey: Kopeeri siia oma Pilvio API võti.billing_account_id: Sisesta oma Pilvio arvelduskonto ID (numbrina).vm_password: Mõtle välja ja sisesta turvaline parool virtuaalmasina jaoks. Kuigi kasutame sisselogimiseks SSH-võtit, nõuab Pilvio API parooli olemasolu.public_key: Kopeeri siia oma avaliku SSH-võtme sisu. See näeb tavaliselt väljassh-rsa AAAA...ja asub sinu arvutis failis~/.ssh/id_rsa.pub.wp_caddy_ip: Sisesta siia 1. sammus loodud ujuv-IP aadress.domain_name: Sisesta täpne domeeninimi, mille suunasid ujuv-IP-le (ntwordpress.minufirma.ee).db_user,db_password,db_name: Võid jätta need vaikimisi väärtustele või muuta, kui soovid.db_passwordpeaks kindlasti olema tugev ja unikaalne.
Samm 4 — Infrastruktuuri paigaldamine
Nüüd on kõik valmis! Ava terminal, navigeeri oma projekti kausta ja käivita järgmised Terraformi käsud.
Initsialiseeri Terraform: See käsk laeb alla Pilvio provideri ja valmistab töökataloogi ette.
Bash
terraform initLoo ja vaata tegevusplaani: See käsk analüüsib sinu
.tffaile ja näitab, milliseid ressursse (VPC, VM jne) ta kavatseb luua, muuta või kustutada. See on turvaline samm, mis ei tee veel reaalseid muudatusi.Bash
terraform plan -out=tfplanRakenda tegevusplaan: See käsk viib eelmises sammus loodud plaani ellu. Terraform küsib sinult viimast kinnitust, enne kui hakkab Pilviosse ressursse looma.
Bash
terraform apply tfplan
Protsess võtab mõne minuti. Terraform loob järjest kõik ressursid ja konfigureerib virtuaalmasina. Kui kõik on valmis, näed terminali väljundis outputs.tf failis defineeritud väärtusi.
Samm 5 — WordPressi lehele ligipääsemine
Kui terraform apply on edukalt lõppenud, oota mõned minutid, et cloud-init saaks vastloodud serveris oma paigaldused lõpetada. Seejärel ava veebilehitseja ja mine oma domeeni aadressile, mille sisestasid terraform.tfvars faili.
https://blogi.sinudomeen.ee
Sind peaks ees ootama WordPressi kuulus viieminutiline paigaldusaken. Caddy on taustal juba hankinud ja seadistanud HTTPS-sertifikaadi, seega on sinu leht kohe turvaline. Vali keel ja loo oma administraatori kasutaja.
Infrastruktuuri eemaldamine (Valikuline)
Terraformi üks suurimaid eeliseid on see, et kogu loodud infrastruktuuri saab sama lihtsalt ka eemaldada. Kui soovid oma WordPressi lehe ja kõik sellega seotud ressursid (VM, VPC, Bucket) kustutada, käivita lihtsalt üks käsk:
Bash
terraform destroyTerraform küsib taas kinnitust ja pärast seda kustutab kõik, mis selle konfiguratsiooniga loodi. Ujuv-IP jääb alles, kuna seda ei loonud Terraform.
Kokkuvõte
Palju õnne! Sa oled edukalt kasutanud Terraformi, et paigaldada täielikult funktsioneeriv ja turvaline WordPressi veebileht Pilvio pilveplatvormile.
Sa seadistasid:
- Infrastruktuuri kui koodi (IaC) lahenduse Terraformiga.
- WordPressi, mis töötab Docker Compose'i abil.
- Automaatse HTTPS-i Caddy veebiserveriga.
- Modulaarse ja turvalise konfiguratsiooni, mida on lihtne hallata ja taaskasutada.
Nüüd on sul olemas võimas ja automatiseeritud viis veebiprojektide käivitamiseks ja haldamiseks.