
【本文由云服务器代理商:云枢国际yunshuguoji撰写;如果您在阅读后觉得这篇分享很有帮助,烦请您多多点赞。】
在 2026 年,云计算基础设施的自动化管理已成为运维标配。许多开发者在腾讯云国际(Cloud Tencent International)上部署传统 Web 应用时,仍习惯通过控制台逐台创建 CVM 实例、配置安全组、绑定负载均衡…… 这种 “手工” 方式不仅耗时易错,更难以保证环境一致性。尤其是需要搭建跨可用区高可用 WordPress 跨境独立站时,手动重复操作带来的风险成倍增加 —— 一次误配置就可能造成海外站点长时间中断,直接流失海外客户。

本文将带你通过 Terraform 在腾讯云国际上一键部署一套生产级双可用区高可用 WordPress 集群,完整覆盖 VPC 双子网、CVM 弹性 Web 节点、七层 CLB 负载均衡、多可用区主备 CDB MySQL、COS 媒体对象存储,以及远程 Terraform 状态管理全套资源。整套方案仅依靠一份标准化配置文件,几分钟即可完整复现合规、可容灾的线上环境。无论你是跨境独立站个人开发者,还是出海 SaaS 团队运维,这套 IaC 自动化方案都能大幅降低重复操作、显著提升线上业务稳定性。 方案架构与资源规划
整套架构采用双可用区容灾设计,彻底规避单机房故障全站宕机风险:
· 2 台 CVM 实例分属两个不同可用区组成 Web 节点,搭配公网七层 CLB 实现流量均衡分发、自动下线故障实例;
· 腾讯云 CDB MySQL 采用双可用区主备架构,系统自动完成故障切换,无需人工维护主从同步、数据备份;
· WordPress 图片、插件、短视频等静态素材全部托管 COS 对象存储,通过专用插件对接站点,减轻 CVM 本地磁盘 IO 与出口带宽压力;
· 全量资源由 Terraform 统一生命周期管理,状态文件存放至 COS 远端存储,开启版本控制与状态锁,多人团队协作不会出现资源冲突,误删资源支持一键回滚。
表格
资源类型 | 规格 / 配置 | 用途 | 生产备注 |
|---|---|---|---|
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 最低版本要求 1.6.3,tencentcloud 提供器锁定 2026 稳定版 1.82.90,所有镜像、可用区使用动态数据源获取,规避硬编码 ID 失效问题,补齐生产环境必备安全、高可用参数。
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}
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"}
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}
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
}}
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"}
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 源码包、分行业站点选型方案。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。