本文将带你通过 Terraform 在腾讯云国际上一键部署一套生产级双可用区高可用 WordPress 集群,完整覆盖 VPC 双子网、CVM 弹性 Web 节点、七层 CLB 负载均衡、多可用区主备 CDB MySQL、COS 媒体对象存储,以及远程 Terraform 状态管理全套资源。整套方案仅依靠一份标准化配置文件,几分钟即可完整复现合规、可容灾的线上环境。无论你是跨境独立站个人开发者,还是出海 SaaS 团队运维,这套 IaC 自动化方案都能大幅降低重复操作、显著提升线上业务稳定性。
方案架构与资源规划
整套架构采用双可用区容灾设计,彻底规避单机房故障全站宕机风险:
- 2 台 CVM 实例分属两个不同可用区组成 Web 节点,搭配公网七层 CLB 实现流量均衡分发、自动下线故障实例;
- 腾讯云 CDB MySQL 采用双可用区主备架构,系统自动完成故障切换,无需人工维护主从同步、数据备份;
- WordPress 图片、插件、短视频等静态素材全部托管 COS 对象存储,通过专用插件对接站点,减轻 CVM 本地磁盘 IO 与出口带宽压力;
- 全量资源由 Terraform 统一生命周期管理,状态文件存放至 COS 远端存储,开启版本控制与状态锁,多人团队协作不会出现资源冲突,误删资源支持一键回滚。
资源清单(新加坡 ap-singapore 地域生产示例)
表格
| 资源类型 | 规格 / 配置 | 用途 | 生产备注 |
| VPC | 10.0.0.0/16 | 业务隔离私有网络 | 划分双可用区独立子网,实现机房容灾 |
| 子网 | 10.0.1.0/24、10.0.2.0/24 | 分属 AZ1、AZ2 部署 CVM 与数据库 | 每个可用区独立子网,故障互不影响 |
| Web 安全组 | 内网放行 80 端口;公网开放 80/443;22 端口仅办公 IP 白名单 | Web 节点访问权限管控 | 禁止全网开放 SSH,杜绝海外暴力扫描 |
| CVM | 2C4G S5.SMALL2,TencentOS Server 3 | WordPress Web 服务 | 2 台跨可用区部署,不分配公网 IP,使用 SSM 免密运维 |
| CLB 七层负载均衡 | 支持 HTTP/HTTPS、会话保持、健康检查 | 全球用户流量分发 | 可绑定免费 SSL 证书,适配海外 GDPR 合规 |
| CDB MySQL | 2C8G、100GB SSD、MySQL8.0、双可用区主备 | 站点业务数据库 | 开启每日自动全量备份,支持快照回滚 |
| COS Bucket | 标准存储、私有读写、开启版本控制 | 媒体素材持久存储 | 搭配 STS 临时授权,避免永久密钥泄露 |
| Terraform State COS 桶 | 开启版本控制 + 原生状态锁 | IaC 配置文件远程存储 | 区分开发、生产环境目录,避免线上误操作 |
注意:以上规格为中小跨境独立站基准配置,黑五、流量突增场景可搭配弹性伸缩 AS 自动扩容;腾讯云国际控制台可实时查询新加坡、法兰克福、美西节点按量、抢占式实例最新定价。
实战:Terraform 配置文件完整核心片段
Terraform 最低版本要求 1.6.3,tencentcloud 提供器锁定 2026 稳定版 1.82.90,所有镜像、可用区使用动态数据源获取,规避硬编码 ID 失效问题,补齐生产环境必备安全、高可用参数。
1. 顶层 Terraform 配置、Provider 与 COS 远程后端
hcl
terraform {
required_version = “>= 1.6.3”
required_providers {
tencentcloud = {
source = “tencentcloudstack/tencentcloud”
version = “>= 1.82.90”
}
random = {
source = “hashicorp/random”
version = “>= 3.5.0”
}
}
# COS远端状态存储,自带状态锁防多人并发冲突,建议桶开启版本控制
backend “cos” {
bucket = “my-terraform-state-2026-sg”
prefix = “wordpress/prod/cluster”
region = “ap-singapore”
}}
# 通用变量定义variable “region” {
type = string
default = “ap-singapore”}variable “az_1” {
type = string
default = “ap-singapore-1”}variable “az_2” {
type = string
default = “ap-singapore-2”}variable “db_password” {
type = string
sensitive = true}
provider “tencentcloud” {
region = var.region
# 密钥通过系统环境变量注入,禁止明文写在配置文件内
secret_id = env(“TENCENTCLOUD_SECRET_ID”)
secret_key = env(“TENCENTCLOUD_SECRET_KEY”)}
# 动态拉取地域可用区、官方长期支持操作系统镜像data “tencentcloud_availability_zones” “default” {}data “tencentcloud_images” “tencentos” {
image_type = [“PUBLIC_IMAGE”]
os_name = “TencentOS Server”
most_recent = true}
2. 双可用区 VPC、双子网、分层安全组
hcl
# 业务专属VPCresource “tencentcloud_vpc” “main” {
name = “wordpress-vpc-prod”
cidr_block = “10.0.0.0/16”}
# 可用区1子网resource “tencentcloud_subnet” “az1” {
name = “web-subnet-az1”
vpc_id = tencentcloud_vpc.main.id
cidr_block = “10.0.1.0/24”
availability_zone = var.az_1}# 可用区2容灾子网resource “tencentcloud_subnet” “az2” {
name = “web-subnet-az2”
vpc_id = tencentcloud_vpc.main.id
cidr_block = “10.0.2.0/24”
availability_zone = var.az_2}
# Web服务安全组resource “tencentcloud_security_group” “web_sg” {
name = “wordpress-web-sg”
description = “分层管控CLB内网流量与公网访问”}# 允许VPC内网CLB访问80业务端口resource “tencentcloud_security_group_rule” “intranet_http” {
security_group_id = tencentcloud_security_group.web_sg.id
type = “ingress”
cidr_ip = “10.0.0.0/16”
ip_protocol = “tcp”
port_range = “80”
policy = “accept”}# 公网放行80、443,仅用于CLB流量转发resource “tencentcloud_security_group_rule” “public_web” {
security_group_id = tencentcloud_security_group.web_sg.id
type = “ingress”
cidr_ip = “0.0.0.0/0”
ip_protocol = “tcp”
port_range = “80,443”
policy = “accept”}# SSH仅放行企业办公固定公网IP,消除全网开放风险resource “tencentcloud_security_group_rule” “ssh_office” {
security_group_id = tencentcloud_security_group.web_sg.id
type = “ingress”
cidr_ip = “你的办公公网IP/32”
ip_protocol = “tcp”
port_range = “22”
policy = “accept”}
# 数据库独立安全组,仅允许Web内网网段访问3306resource “tencentcloud_security_group” “db_sg” {
name = “wordpress-db-sg”}resource “tencentcloud_security_group_rule” “db_intranet” {
security_group_id = tencentcloud_security_group.db_sg.id
type = “ingress”
cidr_ip = “10.0.0.0/16”
ip_protocol = “tcp”
port_range = “3306”
policy = “accept”}
3. 跨可用区 CVM Web 节点,幂等初始化脚本
hcl
resource “tencentcloud_instance” “web” {
count = 2
instance_name = “wordpress-web-${count.index + 1}”
image_id = data.tencentcloud_images.tencentos.images[0].id
instance_type = “S5.SMALL2”
vpc_id = tencentcloud_vpc.main.id
# 两台实例分属不同可用区,实现机房容灾
subnet_id = count.index == 0 ? tencentcloud_subnet.az1.id : tencentcloud_subnet.az2.id
security_groups = [tencentcloud_security_group.web_sg.id]
internet_max_bandwidth_out = 0
allocate_public_ip = false
disable_monitor_service = false
# 强制开启IMDSv2,防御SSRF高危漏洞
metadata_options {
http_tokens = “required”
}
# 幂等UserData脚本,重复执行不会产生冲突,海外稳定源部署WordPress
user_data = <<-EOF
#!/bin/bash
set -e
if ! command -v nginx &> /dev/null;then
yum clean all && yum makecache
yum install -y nginx php-fpm php-mysqli wget
systemctl enable –now nginx php-fpm
# 海外稳定官方WordPress安装包
wget https://cn.wordpress.org/latest-zh_CN.tar.gz -O /tmp/wp.tar.gz
mkdir -p /var/www/html
tar -zxvf /tmp/wp.tar.gz -C /var/www/html –strip-components=1
chown -R nginx:nginx /var/www/html
fi
# 自动填充数据库连接配置
cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
sed -i “s/database_name_here/wordpress/” /var/www/html/wp-config.php
sed -i “s/username_here/wp_user/” /var/www/html/wp-config.php
sed -i “s/password_here/${var.db_password}/” /var/www/html/wp-config.php
sed -i “s/localhost/${tencentcloud_mysql_instance.wp_mysql.intranet_ip}/” /var/www/html/wp-config.php
EOF}
4. CLB 七层负载均衡完整配置(含健康检查、会话保持)
hcl
resource “tencentcloud_clb_instance” “wp_clb” {
clb_name = “wordpress-clb-prod”
network_type = “OPEN”
vpc_id = tencentcloud_vpc.main.id
project_id = 0}
# 80端口HTTP监听,完善健康检测规则,解决WordPress登录丢失问题resource “tencentcloud_clb_listener” “http” {
clb_id = tencentcloud_clb_instance.wp_clb.id
listener_name = “http-80-wordpress”
port = 80
protocol = “HTTP”
session_expire_time = 1800
health_check_switch = true
health_check_path = “/”
health_check_interval = 10
healthy_threshold = 2
unhealthy_threshold = 3}
# 域名转发规则resource “tencentcloud_clb_listener_rule” “main” {
clb_id = tencentcloud_clb_instance.wp_clb.id
listener_id = tencentcloud_clb_listener.http.listener_id
domain = “shturl.cc/aF1t”
url = “/”}
# 将双可用区两台CVM绑定至CLB后端resource “tencentcloud_clb_attachment” “web_backend” {
clb_id = tencentcloud_clb_instance.wp_clb.id
listener_id = tencentcloud_clb_listener.http.listener_id
rule_id = tencentcloud_clb_listener_rule.main.id
targets {
instance_id = tencentcloud_instance.web[0].id
port = 80
weight = 100
}
targets {
instance_id = tencentcloud_instance.web[1].id
port = 80
weight = 100
}}
5. 双可用区主备 CDB MySQL
hcl
resource “tencentcloud_mysql_instance” “wp_mysql” {
instance_name = “wordpress-db-prod”
mem_size = 2
cpu = 2
volume_size = 100
engine_version = “8.0”
charge_type = “POSTPAID_BY_HOUR”
vpc_id = tencentcloud_vpc.main.id
subnet_id = tencentcloud_subnet.az1.id
root_password = var.db_password
availability_zone = var.az_1
standby_zone = var.az_2
parameters = {
character_set_server = “utf8mb4”
}
security_group_ids = [tencentcloud_security_group.db_sg.id]
backup_period = “everyday”}
6. COS 媒体存储桶(随机后缀防重、开启版本控制)
hcl
resource “random_id” “bucket_suffix” {
byte_length = 4}resource “tencentcloud_cos_bucket” “media” {
bucket = “wordpress-media-${var.region}-${random_id.bucket_suffix.hex}”
acl = “private”
versioning_status = “Enabled”}
一键部署执行命令
本地安装 Terraform 1.6.3 及以上版本,提前配置环境变量存放 API 密钥:
bash
运行
export TENCENTCLOUD_SECRET_ID=”你的API SecretId”export TENCENTCLOUD_SECRET_KEY=”你的API SecretKey”
terraform init
terraform plan
terraform apply -auto-approve
最佳实践总结
经过大量跨境独立站生产落地验证,整理一套可直接复用的标准化运维规范:
Terraform 远程状态管控 所有线上环境强制使用 COS 远端状态存储,开启桶版本控制,利用原生状态锁规避多人同时执行 apply 造成资源冲突;API 密钥仅通过环境变量注入,禁止写入配置文件;按 dev/test/prod 划分独立存储前缀,隔离多套环境资源,防止误删线上集群。
CVM 标准化镜像与初始化 不依赖 UserData 批量安装依赖,正式生产推荐使用 Packer 打包预制 TencentOS 镜像,预装 Nginx、PHP、WordPress 全套环境,扩容实例秒级就绪;UserData 仅用于覆盖站点配置,脚本增加幂等判断,避免重复执行导致服务冲突;运维优先使用 SSM 会话管理器,尽量关闭公网 22 端口访问。
分层安全加固,满足海外合规要求 三层安全组隔离流量:CLB 公网入口、Web 内网业务端口、数据库仅内网子网访问;CVM 强制启用 IMDSv2 防御 SSRF 漏洞;CLB 绑定 ACM 免费 SSL 证书,全站配置 HTTP 强制跳转 HTTPS,符合 GDPR、跨境支付合规;COS 私有桶搭配 STS 临时授权给 WordPress 媒体插件,杜绝永久密钥泄露风险;配套 CLB 内置 WAF、基础 DDoS 防护,拦截爬虫与 CC 攻击。
高可用架构硬性标准 Web 节点、数据库必须跨双可用区部署,单一机房故障可自动切换流量;CLB 开启完整健康检测,异常实例自动下线;流量波动较大的电商、资讯站点,可搭配弹性伸缩 AS,基于 CPU 利用率自动增减实例,黑五大促无需人工值守扩容。
FinOps 低成本优化(2026 腾讯云国际主推方案) 日常平稳流量使用按量实例保障业务稳定,峰值流量自动调度抢占式 Spot 实例,整体算力成本降低 40%-60%;长期稳定运营站点可搭配节省计划 Savings Plan,月度支出额外再省 45%;夜间低峰时段配置定时伸缩,自动下调最小实例数量,削减闲置资源账单。
数据持久化与灾备方案 WordPress 缓存、会话数据搭配 Redis 内存数据库,不落地 CVM 本地磁盘;CDB 开启每日自动全量备份,支持跨地域快照灾备;媒体图片全部存入 COS 并开启版本控制,文件误删可一键回滚;全站访问、错误日志统一投递 CLS 日志服务,方便故障溯源审计。
写在最后
通过 Terraform 在腾讯云国际一键部署跨可用区高可用 WordPress 集群,彻底摆脱人工控制台重复操作,基础设施代码化支持版本管理、一键回滚、批量复制多站点环境,大幅降低中小团队运维人力投入。这套 IaC 架构具备通用性,Nextcloud、Joomla、跨境商城等 PHP 类 Web 应用均可复用,仅替换 UserData 站点初始化脚本即可快速落地。
腾讯云国际控制台提供完整监控大盘,可实时观测 CLB 访问延迟、CVM CPU / 内存负载、CDB 慢查询、COS 存储流量等指标,方便持续调优实例规格与伸缩阈值。
补充混合多云落地方案:如果业务同时服务欧美本地用户与国内运营团队,可搭建 AWS + 腾讯云国际混合架构,AWS 承载全球突发弹性前端流量,WordPress 站点、私有 AI 知识库部署新加坡腾讯云国际机房,依托云联网打通两端私有内网,兼顾弹性能力与亚太低延迟访问。
如果你在 Terraform 自动化部署、跨境站点高可用架构、Spot 混合实例成本测算方面遇到问题,可领取完整模块化 Terraform 源码包、分行业站点选型方案。本文由翼龙云@yilongcloud撰写。
