介绍
Packer,由Hashicorp,是一个命令行工具,用于快速为多个平台和环境创建相同的机器图像。 使用Packer,您可以使用一个配置文件,称为 template,创建一个包含预配置的操作系统和软件的机器图像。 您可以使用此图像创建新的机器。 您甚至可以使用单个模板来组织同时创建您的生产,舞台和开发环境。
在本教程中,您将使用 Packer 在 CentOS 7 上配置 Nginx Web 服务器。
前提条件
在你可以起床和运行与Packer之前,你需要一些东西。
- 一个 CentOS 7 服务器,配置了非 root 用户具有 sudo 特权, 您可以通过以下设置设置 如何在 CentOS 7 服务器上添加和删除用户。 * 一个 DigitalOcean API 代码与 read 和 ** write** 特权。 审查 如何使用 DigitalOcean API v2 获得代码。
第1步:下载和安装包装器
登录到您的服务器后,您将下载 Packer 二进制包,为当前用户安装 Packer,并检查您的安装是否成功。
让 Packer 在您的系统上运行的最简单的方法是从官方 Hashicorp 网站(https://releases.hashicorp.com/packer/)下载最新的二进制包。
使用弯曲
实用程序从Hashicorp网站下载二进制包。
1curl -O https://releases.hashicorp.com/packer/0.12.2/packer_0.12.2_linux_amd64.zip
一旦下载,安装unzip
实用程序,并使用它将包内容解密到/usr/local
目录中,这是建议的位置,使Packer可供所有用户使用。
1sudo yum install -y unzip
2sudo unzip -d /usr/local packer_0.12.2_linux_amd64.zip
CentOS已经包含了一个名为packer
的程序,虽然您每次运行命令时可以简单地输入完整的路径,但处理这个问题的一种更有效的方法是创建一个packer.io
到/usr/local/packer
的simlink,然后在/usr/local/bin
文件夹中使用以下命令创建simlink:
1sudo ln -s /usr/local/packer /usr/local/bin/packer.io
通过检查packer.io
是否在命令行中可用来验证安装是否成功:
1packer.io
成功的安装将产生如下:
1[secondary_label Output]
2usage: packer [--version] [--help] <command> [<args>]
3
4Available commands are:
5 build build image(s) from template
6 fix fixes templates from old versions of packer
7 inspect see components of a template
8 push push a template and supporting files to a Packer build service
9 validate check that a template is valid
10 version Prints the Packer version
Packer 现在已安装并在您的机器上工作,下一步您将设置一个项目目录并配置模板以生成基本的 CentOS 快照。
步骤 2 — 配置数字海洋构建器
我们希望Packer创建一个Droplet,安装一些软件和配置文件,然后将Droplet变成一个图像,我们可以使用它来创建新的机器。
在 Packer-speak 中,一个 builder 是一个 JSON 对象,它包含您希望 Packer 创建的图像的蓝图。 使用digitalocean
构建程序,您将指示 Packer 创建一个 512 MB CentOS 7.3 片段,该片段将在 NYC1 地区推出。
创建并更改到一个新的目录,其中将包含我们将在本教程中创建的模板和配置文件:
1mkdir ~/packerProject
2cd ~/packerProject
现在你有一个项目目录,打开一个名为template.json
的新文件,在你的文本编辑器:
1vi ~/packerProject/template.json
每个构建者都需要进入template.json
的构建者
部分. 现在添加此部分并将digitalocean
构建者添加到文件中,将此代码放入文件中:
1[label ~/packerProject/template.json]
2{
3 "builders": [
4 {
5 "type": "digitalocean"
6 }]
7}
类型
键定义了构建者Packer用什么来创建您的图像,而构建者digitalocean
创建了DigitalOceanDropplets,由此 Packer创建了快照。
Packer 现在知道你想为 DigitalOcean 创建一个图像,但它仍然需要一些额外的关键值对才能完成构建。
通过添加这些键和值来完成您的 Droplet 配置,以生成在 NYC1 地区发布的 512 MB CentOS 7 Droplet 的快照。
1[label ~/packerProject/template.json]
2{
3 "builders": [
4 {
5 "type": "digitalocean",
6 "ssh_username": "root",
7 "api_token": "YOUR_DIGITALOCEAN_API_TOKEN",
8 "image": "centos-7-x64",
9 "region": "nyc1",
10 "size": "512mb"
11 }]
12}
Packer 使用 ssh_username
值连接到 Droplets. 此值需要设置为 "root" 以便 Packer 正常工作。
保存template.json
并退出文本编辑器。
上一个代码组包含创建 DigitalOcean Droplet 所需的最低配置量,但如下表所示,还有其他配置选项可用:
| 键 数值 ====== | --—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— | 用于访问您的账户的 API 符号 。 也可以通过环境变量`DIGITALOCEAN_API_TOKEN'(如果设置的话)来指定。 |
图像 ' * 弦 * 是 * * 要使用的基础图像的名称( 或 slock) 。 此图像将用来启动一个新的 Droplet 并提供它 。 见[https://developers.digitalocean.com/documentation/v2/# list-all-images](https://developers.digitalocean.com/documentation/v2/#list-all-images),关于如何获得被接受的图像名称/slugs列表的细节. |
区域 ' ==== 发射"滴"号的区域名称(或"涕"). 因此,该地区将可提供简介。 见[https://developers.digitalocean.com/documentation/v2/# list-all-regies] (https://developers.digitalocean.com/documentation/v2/# list-all-regions) 被接受的区域名称/slugs. |