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

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
21个开发人员新闻通讯将在2025年订阅21个开发人员新闻通讯将在2025年订阅Apr 24, 2025 am 08:28 AM

与这些顶级开发人员新闻通讯有关最新技术趋势的了解! 这个精选的清单为每个人提供了一些东西,从AI爱好者到经验丰富的后端和前端开发人员。 选择您的收藏夹并节省时间搜索REL

使用AWS ECS和LAMBDA的无服务器图像处理管道使用AWS ECS和LAMBDA的无服务器图像处理管道Apr 18, 2025 am 08:28 AM

该教程通过使用AWS服务来指导您通过构建无服务器图像处理管道。 我们将创建一个部署在ECS Fargate群集上的next.js前端,与API网关,Lambda函数,S3桶和DynamoDB进行交互。 Th

CNCF ARM64飞行员:影响和见解CNCF ARM64飞行员:影响和见解Apr 15, 2025 am 08:27 AM

该试点程序是CNCF(云本机计算基础),安培计算,Equinix金属和驱动的合作,简化了CNCF GitHub项目的ARM64 CI/CD。 该计划解决了安全问题和绩效

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能