搜尋
首頁科技週邊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

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。