一键上云:Vultr × Caddy 可直接部署模板(Terraform + Docker Compose + Caddyfile)

目标:一条命令把 Caddy 网关和你的应用部署到 Vultr,自动 HTTPS、反向代理、静态托管、日志可观测开箱即用。本文包含完整模板与操作步骤,直接复制即可落地。


🧭 方案概览

  • 基础设施即代码:用 Terraform 创建 Vultr 实例、防火墙组、SSH 公钥注入等。

  • 云端初始化:cloud-init 在首启时安装 Docker & Compose。

  • 应用编排:Docker Compose 起 Caddy(入口)+ 示例 app(Flask/Gunicorn)。

  • 自动 HTTPS:Caddy 通过 Let’s Encrypt 自动申请/续签证书(需域名 A 记录指向实例 IP)。

  • 可观测性:结构化访问日志(JSON)落盘,便于后续接入 Loki/ELK。

你可以把示例 app 替换成你的服务,Caddy 仍旧自动代理与签证书。


🗂 目录结构

vultr-caddy-starter/
├─ terraform/
│  ├─ main.tf
│  ├─ variables.tf
│  ├─ outputs.tf
│  └─ cloud-init.yaml
├─ compose/
│  ├─ docker-compose.yml
│  ├─ Caddyfile
│  ├─ app/            # 示例后端(可删换为你的)
│  │  ├─ Dockerfile
│  │  └─ wsgi.py
├─ .env.example
└─ Makefile

🔑 准备工作

  1. Vultr API Token:在 Vultr 控制台创建(只读不可用,需读写)。

  2. SSH 公钥ssh-keygen -t ed25519 生成,公钥内容填到 variables.tf.tfvars

  3. 域名解析:将你的域名(如 example.com)的 A 记录 指向后文输出的实例公网 IP(Terraform 输出中会显示)。

  4. 本地安装:terraformdockerdocker compose(仅用于本地构建镜像时需要)。


🧱 Terraform:创建 Vultr 资源

terraform/main.tf

terraform {
  required_version = ">= 1.6.0"
  required_providers {
    vultr = {
      source  = "vultr/vultr"
      version = "~> 2.18"
    }
  }
}

provider "vultr" {
  api_key = var.vultr_api_key
}

# 可选:上传你的 SSH 公钥到 Vultr 账户,供实例注入
resource "vultr_ssh_key" "main" {
  name    = "caddy-starter-key"
  ssh_key = var.ssh_public_key
}

# 防火墙组 & 规则(仅放行 22/80/443)
resource "vultr_firewall_group" "web" {
  description = "caddy web ingress"
}

resource "vultr_firewall_rule" "allow_ssh" {
  firewall_group_id = vultr_firewall_group.web.id
  protocol          = "tcp"
  port              = "22"
  subnet            = "0.0.0.0"
  subnet_size       = 0
}

resource "vultr_firewall_rule" "allow_http" {
  firewall_group_id = vultr_firewall_group.web.id
  protocol          = "tcp"
  port              =
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值