目标:一条命令把 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
🔑 准备工作
-
Vultr API Token:在 Vultr 控制台创建(只读不可用,需读写)。
-
SSH 公钥:
ssh-keygen -t ed25519生成,公钥内容填到variables.tf或.tfvars。 -
域名解析:将你的域名(如
example.com)的 A 记录 指向后文输出的实例公网 IP(Terraform 输出中会显示)。 -
本地安装:
terraform、docker、docker 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 =

最低0.47元/天 解锁文章
977

被折叠的 条评论
为什么被折叠?



