首頁 > 科技週邊 > 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板