首页 > 科技周边 > IT业界 > 如何在包装工和Terraform中毫不费力地部署应用程序

如何在包装工和Terraform中毫不费力地部署应用程序

尊渡假赌尊渡假赌尊渡假赌
发布: 2025-02-16 13:12:44
原创
1009 人浏览过

How to Deploy Apps Effortlessly with Packer and Terraform

Packer和Terraform:高效DevOps部署的利器

本文探讨如何利用开源DevOps工具Packer和Terraform协同构建和管理基础设施,实现高效的应用部署。

核心要点:

  • Packer和Terraform的结合:Packer用于创建包含所需软件和配置的机器镜像,Terraform则利用这些镜像构建实际基础设施(例如服务器或容器)。
  • DevOps实践:文章以构建PHP应用为例,演示了使用Packer构建镜像,并用Terraform部署基础设施的完整流程,有效简化发布周期管理、基础设施更新,并提升系统可用性。
  • 挑战与优势:Packer和Terraform虽然功能强大且灵活,但也需要一定的技术知识才能有效使用,并需谨慎管理配置文件和状态文件,在大型部署中可能会变得复杂。然而,它们在节省时间、减少错误和提高部署稳定性方面仍具有显着优势。

阿里云发布了一份关于DevOps的精彩白皮书,其中指出:“DevOps不仅仅是简单地实施敏捷原则来管理基础设施,John Willis和Damon Edwards用CAMS(文化、自动化、度量和共享)来定义DevOps。DevOps旨在促进开发和运维团队之间的协作。” 这体现了DevOps中连接软件开发和基础设施管理的新角色或思维模式,需要同时掌握两方面的知识,并充分利用日益重要的云计算模式。但DevOps实践并非仅限于大型企业,开发者也能轻松将其融入日常工作。本教程将演示如何仅使用少量配置文件轻松编排整个部署流程,并在阿里云弹性计算服务(ECS)实例上运行应用程序。

Packer简介:

Packer是HashiCorp开发的开源DevOps工具,可通过单个JSON配置文件创建镜像,方便长期跟踪更改。该软件跨平台兼容,并能并行创建多个镜像。 使用Homebrew安装非常简单:brew install packer。 Packer创建包含操作系统和应用程序所需额外软件的“即用型”镜像,如同创建自定义发行版。例如,您可以轻松创建包含自定义PHP应用程序的Debian镜像。

Terraform简介:

部署包含两大任务:打包应用程序到合适的环境中(创建镜像),以及创建运行应用程序的基础设施(服务器)。 Terraform同样来自HashiCorp,它基于与Packer相同的原则,允许您仅使用单个TF格式配置文件在阿里云中构建基础设施,方便版本控制并清晰了解应用程序底层的工作原理。 Terraform的安装以及阿里云官方提供商的配置,请参考其他相关文章。

目标:

本教程将以DevOps方式创建和部署简单的PHP应用程序,涵盖从运行软件到支持基础设施的各个方面。

步骤:

为了简化流程,我们将创建一个基于docker-compose的应用程序,用于从机场获取METAR气象数据(使用ICAO机场代码,并从美国国家气象局获取数据)。然后,我们将使用Ubuntu和Packer创建镜像,并使用该镜像和Terraform部署基础设施。

PHP应用程序:

为了方便起见,我们提供了一个现成的应用程序。您可以查看源代码(包含index.php、2个用于解码METAR数据的JavaScript文件、少量CSS和一个PNG图片)。该应用程序基于docker-compose,稍后我们将使用Packer将其作为依赖项安装。

使用Packer构建镜像:

在您的计算机上创建一个名为~/metar-app的文件夹,然后进入该文件夹并创建一个名为metar-build.json的文件,内容如下:

{
  "variables": {
    "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
    "region": "{{env `ALICLOUD_REGION`}}",
    "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
  },
  "builders": [
    {
      "type": "alicloud-ecs",
      "access_key": "{{user `access_key`}}",
      "secret_key": "{{user `secret_key`}}",
      "region":"{{user `region`}}",
      "image_name": "metar_app",
      "source_image": "ubuntu_16_0402_64_20G_alibase_20180409.vhd",
      "ssh_username": "root",
      "instance_type": "ecs.t5-lc1m1.small",
      "internet_charge_type": "PayByTraffic",
      "io_optimized": "true"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "script": "base-setup"
    }
  ]
}
登录后复制

在同一目录下,创建一个名为base-setup的文件,内容如下:

#!/usr/bin/env bash

apt-get update && apt-get install -y apt-transport-https ca-certificates curl git-core software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update && apt-get install -y docker-ce docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

mkdir /var/docker
git clone https://github.com/roura356a/metar.git /var/docker/metar
登录后复制

准备好这两个文件后,运行packer build metar-build.json,等待其完成。请注意,要使此操作生效,您需要在计算机中设置三个环境变量:ALICLOUD_REGIONALICLOUD_ACCESS_KEYALICLOUD_SECRET_KEY。此步骤需要一些时间,因为它会创建ECS实例,在其上安装所有软件,然后停止实例,创建其快照,最后创建整个系统的镜像。 镜像创建完成后,Packer将输出==> Builds finished

使用Terraform部署基础设施:

现在,在同一文件夹中,创建一个名为main.tf的文件,内容如下:

provider "alicloud" {}

data "alicloud_images" "search" {
  name_regex = "metar_app"
}

data "alicloud_instance_types" "search" {
  instance_type_family = "ecs.xn4"
  cpu_core_count = 1
  memory_size = 1
}

data "alicloud_security_groups" "search" {}

data "alicloud_vswitches" "search" {}

resource "alicloud_instance" "app" {
  instance_name = "metar_app"
  image_id = "${data.alicloud_images.search.images.0.image_id}"
  instance_type = "${data.alicloud_instance_types.search.instance_types.0.id}"

  vswitch_id = "${data.alicloud_vswitches.search.vswitches.0.id}"
  security_groups = [
    "${data.alicloud_security_groups.search.groups.0.id}"
  ]
  internet_max_bandwidth_out = 100

  password = "Test1234!"

  user_data = "${file("user-data")}"
}

output "ip" {
  value = "${alicloud_instance.app.public_ip}"
}
登录后复制

在同一目录下,创建一个名为user-data的文件,内容如下:

#!/usr/bin/env bash

cd /var/docker/metar && docker-compose up -d
登录后复制

现在,您的文件结构应如下所示:

<code>metar_app/
├── metar-build.json
├── base-setup
├── main.tf
└── user-data</code>
登录后复制

运行terraform init,然后运行terraform plan检查一切是否正常,最后运行terraform apply启动部署过程。

基础设施构建完成后,Terraform将输出新创建的ECS实例的IP地址,例如:111.111.111.111。

测试:

如果一切顺利,您可以访问http://111.111.111.111/LESO查看圣塞巴斯蒂安机场的最新天气报告(位于西班牙北部,拥有美丽的进场航线)。

总结:

您几乎不费吹灰之力就完成了应用程序的完整DevOps部署。这将极大地简化您和团队维护发布周期、基础设施更新以及提高系统可用性的工作,无需再直接处理主机和Linux命令。

Packer和Terraform常见问题:

  • Packer和Terraform的主要区别是什么? Packer用于创建跨多个平台的相同机器镜像,而Terraform用于安全高效地构建、更改和版本控制基础设施。
  • Packer如何与Terraform协同工作? Packer创建机器镜像,Terraform使用这些镜像创建基础设施。
  • 何时在Packer中配置,何时在Terraform中配置? 在Packer中配置通常用于在机器镜像中安装和配置软件(在创建基础设施之前),而在Terraform中配置通常用于在创建基础设施之后执行任务。
  • 可以使用Packer而无需Terraform吗? 可以。
  • 如何使用Packer和Terraform部署应用程序? 首先使用Packer创建机器镜像,然后Terraform使用该镜像创建基础设施,最后将应用程序部署到新创建的服务器或容器。
  • 使用Packer和Terraform进行应用程序部署的好处是什么? 自动化、节省时间、减少错误、提高可靠性和稳定性、支持多种平台和服务提供商。
  • 使用Packer和Terraform的局限性和挑战是什么? 需要一定的技术知识,需要谨慎管理配置文件和状态文件,并非所有平台或提供商都支持所有功能和选项。
  • 如何开始使用Packer和Terraform? 安装工具,创建配置文件。
  • 可以将Packer和Terraform与其他DevOps工具一起使用吗? 可以。
  • 使用Packer和Terraform的一些最佳实践是什么? 保持配置文件简单和模块化,使用版本控制,定期测试和验证配置,使用一致的命名约定,记录配置和基础设施设置。

以上是如何在包装工和Terraform中毫不费力地部署应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板