Obi Madu 的博客
返回所有文章
InfrastructureDevOpsProjects

通过 Terraform 在 Digital Ocean 上部署服务器 (指南)

使用 Terraform 和基本的“基础设施即代码”(IaC) 实践来配置 DigitalOcean droplet 的分步指南。

通过 Terraform 在 Digital Ocean 上部署服务器 (指南)

大家好,欢迎!今天我们将带大家了解如何通过 Terraform 在 Digital Ocean 上创建一个服务器(也称为 droplet)。这是 Terraform 能够实现的最简单的事情之一,但它有助于阐明对基本概念的理解,例如基础设施即代码 (IaC)、Terraform 本身、Terraform 模块、云服务器以及基本的网络和安全实践。

iTip+

你可以在 Github 上找到本教程的代码库 此处

事不宜迟,让我们直接开始吧 🚀

iTip+

为了能够使用 Terraform 做任何事情,我们首先需要在我们的系统上安装它。Terraform 官方文档中有一份详尽的列表,介绍了在不同系统上安装 Terraform 的不同方法。请参阅此指南 此处

Acquire Digital Ocean Credentials

为了能够验证和授权 Terraform 在 Digital Ocean 上创建我们的服务器,我们需要适当的凭证。根据所使用的 Terraform 提供商,Terraform 需要不同类型的凭证。为了对负责应用我们配置的提供商进行身份验证和授权,我们将需要一个 Digital Ocean API Token,你可以从下方屏幕中获取。

iTip+

在已通过身份验证的 Digital Ocean 帐户上,其网页地址为 https://cloud.digitalocean.com/account/api/tokens

iWarning+

在 Digital Ocean 上创建你的 API Token 时,请务必为你的令牌启用 Write 权限范围。如果没有这个权限,Terraform 将无法为你创建资源。别忘了同时设置一个合适的过期时间。

Setup the Digital Ocean Terraform provider

现在我们已经拥有了用于 Terraform 身份验证和授权的 API Token,我们可以开始创建我们的 Terraform 配置了。首先,我们将创建一个 providers.tf 文件。在这个文件内,我们将提供必要的配置来设置 Digital Ocean (digitalocean) 提供商。

iTip+

要了解有关 Terraform 提供商的更多信息,请访问 https://developer.hashicorp.com/terraform/language/providers

我们将以以下内容开始我们的文件:

terraform {
  required_providers {
    digitalocean = {
      source  = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }
}

这里设置了 terraform block。在这个区块中,我们将 digitalocean 提供商配置为必需的提供商。

iTip+

有关 digitalocean 提供商的详细信息,可以在其文档页面中找到 https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs

接下来,我们将通过将以下代码追加到我们的 providers.tf 文件中来配置提供商本身:

# Configure the DigitalOcean Provider
provider "digitalocean" {
  token = var.do_token
}

这段代码使用访问令牌 token 来配置 digitalocean 提供商。这与我们在第 1 步中获取的令牌相同。

iTip+

作为一项最佳实践,千万不要将帐户的机密信息直接作为值提供给你的 Terraform 配置文件,因为这会使其完全暴露在潜在的恶意使用中。在上面我们的代码中,我们将 API 密钥作为 Terraform 变量 var.do_token 提供。

有几种方法可以将我们 API 密钥的真实值提供给 Terraform。

  • 我们可以创建一个 terraform.tfvars 文件,并像这样填入我们变量的值:
do_token=real_key_value
  • 我们可以 在我们的主机上创建一个名为 TF_VAR_do_token 的环境变量,并将其值设置为我们密钥的值,如下所示:
export TF_VAR_do_token=real_key_value

在每种情况下,请将 real_key_value 替换为你的 API 密钥的适当值。

通过这两种方法,Terraform 在执行我们的配置时都将能够找到我们变量的值。

iWarning+

如果你将通过 terraform.tfvars 文件向你的变量提供值,请确保 永远不要 将其提交到版本控制中。始终只能在本地使用此文件。

iTip+

如果没有使用上述任何一种方法将值传递给我们的变量,Terraform 在每次执行我们的配置时,都会在命令提示符处提示输入每个变量的值。

Initialize Terraform

在完成我们的提供商配置后,现在是时候初始化我们的 Terraform 配置了。

我们只需在命令行中运行以下命令即可:

terraform init

在初始化期间,Terraform 会为我们的配置下载所需的提供商文件,并初始化我们的后端。

iTip+

为了使本教程保持简单,我们将使用默认的本地 Terraform 后端。要了解有关 Terraform 后端的更多信息,请访问 https://developer.hashicorp.com/terraform/language/settings/backends/configuration

Setup the server deploy configuration

在 Terraform 初始化之后,是时候真正创建部署我们服务器(在 Digital Ocean 术语中也称为 droplet)的配置了。

我们将从创建一个新文件 server.tf 开始。我们的配置如下:

resource "digitalocean_vpc" "server_vpc" {
  name     = "server-vpc"
  region   = var.do_region
  ip_range = "10.10.10.0/24"
}

resource "digitalocean_droplet" "server" {
  name     = "server"
  size     = "s-1vcpu-1gb"
  image    = "ubuntu-22-04-x64"
  region   = var.do_region
  vpc_uuid = digitalocean_vpc.server_vpc.id
}

我们的代码创建了两个 Terraform 资源区块。第一个是 digitalocean_vpc 资源,它创建了我们服务器在 Digital Ocean 上将驻留的虚拟专用网络。

  • name 属性配置了我们 vpc 网络的名称
  • region 属性通过 var.do_region 变量,配置了我们希望 vpc 部署在世界上的哪个区域
  • ip_range 属性配置了我们网络首选的 IP 地址范围
  • vpc_uuid 属性指示我们的服务器被放置在我们第一步创建的 server-vpc 网络中

第二个区块创建了一个 Terraform 的 digitalocean_droplet 资源,并为其配置了 name、size、image 和 region 属性。这些属性对于在 Digital Ocean 上创建我们的服务器来说是强制性的。

顾名思义:

  • name 属性配置了我们在 Digital Ocean 上的服务器的名称
  • size 属性配置了我们服务器的处理器 (cpu) 和内存 (RAM) 组合
  • image 属性配置了我们希望服务器自带的特定操作系统镜像
  • region 属性配置了我们希望服务器部署在世界上什么位置。
iTip+

你可能猜到了,这些属性可以具有许多其他非我们在此处指定的值。访问 Digital Ocean 文档将会产生更完整的值列表以供进一步使用。

iWarning+

这里你需要根据我们资源区块的要求创建 var.do_region 变量。根据你选择向 terraform 传递变量值的方法,你需要创建第二个变量。 如果你选择通过文件配置,请将以下行包含到你的 terraform.tfvars 文件中;

do_region=fra1

或者按照如下方式创建一个额外的环境变量;

export TF_VAR_do_region=fra1

注意: fra1 指的是 Digital Ocean 的法兰克福数据中心。访问 Digital Ocean 文档以找出可以使用的可能替代数据中心。

Apply the Terraform configuration

现在是时候应用我们的 terraform 配置并在 Digital Ocean 上创建我们的资源了。为了确认我们将做的事情正如我们所愿,我们将首先运行 terraform plan 命令。 此命令的输出应类似于以下内容;

查看输出底部,将会显示 2 to add, 0 to change, 0 to destroy。这意味着我们一切正常,因为我们将添加两个资源,不更改任何资源,也不销毁任何资源。

如果我们的输出与上面图示匹配,那么我们可以继续运行 terraform apply 来应用我们的配置。

将会出现一个类似于下方的确认屏幕,我们应该回答 yes

成功后,我们应该会从 Terraform 获得类似如下的输出;

太棒了!!🎉 🎉 你已通过 Terraform 成功地将服务器部署到 Digital Ocean。

iWarning+

恭喜你通过基础设施即代码在 Digital Ocean 上创建你的服务器。重要的是,你要记得在不再使用服务器时销毁它,以避免对你的支付信息产生意外计费。

在你不再需要服务器的那一刻,请运行 terraform destroy 命令并确认 yes 以销毁你的服务器。

希望你觉得这篇文章有帮助!再见!!