Terraform CloudInit Container Server 项目教程
1. 项目的目录结构及介绍
christippett/terraform-cloudinit-container-server
├── examples
│ └── ...
├── templates
│ └── ...
├── CHANGELOG.md
├── LICENSE
├── README.md
├── main.tf
├── outputs.tf
├── variables.tf
- examples: 包含示例配置文件。
- templates: 包含模板文件。
- CHANGELOG.md: 项目更新日志。
- LICENSE: 项目许可证。
- README.md: 项目介绍和使用说明。
- main.tf: 主配置文件。
- outputs.tf: 输出配置文件。
- variables.tf: 变量定义文件。
2. 项目的启动文件介绍
main.tf
main.tf
是项目的主配置文件,用于定义资源和模块。以下是文件的主要内容:
module "container-server" {
source = "github.com/christippett/terraform-cloudinit-container-server"
domain = var.domain
email = var.email
cloudinit_part = var.cloudinit_part
container = var.container
enable_webhook = var.enable_webhook
env = var.env
files = var.files
letsencrypt_staging = var.letsencrypt_staging
}
- source: 指定模块的来源。
- domain: 部署应用的域名。
- email: 用于请求证书的邮箱地址。
- cloudinit_part: 额外的 cloud-init 配置。
- container: 容器定义。
- enable_webhook: 是否启用 webhook 端点。
- env: 环境变量。
- files: 上传到服务器的文件。
- letsencrypt_staging: 是否使用 Let's Encrypt 的 staging 服务器。
3. 项目的配置文件介绍
variables.tf
variables.tf
文件定义了项目中使用的变量。以下是文件的主要内容:
variable "domain" {
description = "The domain to deploy applications under"
type = string
}
variable "email" {
description = "The email address used for requesting certificates from Lets Encrypt"
type = string
}
variable "cloudinit_part" {
description = "Supplementary cloud-init config used to customise the instance"
type = list(object({
content_type = string
content = string
}))
default = []
}
variable "container" {
description = "The container definition used to deploy a Docker image to the server"
type = any
default = {}
}
variable "enable_webhook" {
description = "Flag whether to enable the webhook endpoint on the server allowing updates to be made independent of Terraform"
type = bool
default = false
}
variable "env" {
description = "A list environment variables provided as key/value pairs. These can be used to interpolate values within Docker Compose files"
type = map(string)
default = {}
}
variable "files" {
description = "A list of files to upload to the server. Content must be base64 encoded. Files are available under the /run/app/ directory"
type = list(object({
filename = string
content = string
}))
default = []
}
variable "letsencrypt_staging" {
description = "Boolean flag to decide whether the Let's Encrypt staging server should be used"
type = bool
default = false
}
- domain: 部署应用的域名。
- email: 用于请求证书的邮箱地址。
- cloudinit_part: 额外的 cloud-init 配置。
- container: 容器定义。
- enable_webhook: 是否启用 webhook 端点。
- env: 环境变量。
- files: 上传到服务器的文件。
- letsencrypt_staging: 是否使用 Let's Encrypt 的 staging 服务器。
outputs.tf
outputs.tf
文件定义了项目的输出。以下是文件的主要内容: