如何使用azk部署Rails应用程序

来自菜鸟教程
跳转至:导航、​搜索
      1. 来自 azk 的文章

介绍

azk 是一个轻量级的开源工具,可用于编排应用程序环境。

您是否曾经在本地工作站上运行过应用程序,但在将其部署到生产服务器时却发现设置完全不同?

本文介绍了一个名为 azk 的编排工具,目前已为 这些应用程序 实现,但适用于更多。 当您部署 azk-ready 应用程序时,您可以在本地 在生产环境中轻松运行它。

azk 不仅可以快速轻松地运行应用程序,还可以轻松运行其所有依赖项,包括所需的操作系统、语言、框架、数据库和其他依赖项(否则是一项劳动密集型、重复性、耗时且容易出错的任务),无论您是在本地环境还是服务器上。

本文的目的是展示 azk 如何作为一个编排工具工作,以一个名为 Stringer 的简单 Rails 应用程序为例。

azk 负责幕后的许多步骤,以使编排更容易。 因此,本教程包含一些可选步骤,这些步骤并非设置示例应用程序所必需的,但会解释 azk 在做什么。

我们将从本地计算机上的源代码运行应用程序,将其部署到服务器,进行一些本地更改,部署更改并演示回滚。

完成本文后,您应该对 azk 如何作为您的开发/部署工作流程的编排工具有一个很好的了解。

这个怎么运作

首先,azk 在您的本地计算机上编排应用程序的环境。 一旦应用程序在本地运行,azk 还会自动将其部署到您的 Droplet。

由于 azk 始终从源代码运行应用程序,因此您还可以在本地修改应用程序(如果您愿意),然后再次部署或回滚,无需特殊的额外步骤。

azk 使用 containers 隔离环境,因此在本地计算机上运行应用程序是安全的。 它适用于从头开始的新项目和以前存在的代码。

将 azk 与自定义应用程序一起使用

以当前预配置为与 azk 一起使用的 应用程序列表为例,通过一些额外的工作,您可以将任何项目配置为与 azk 一起使用。

为此, 将一个 Azkfile 添加到项目中。

这是一个简单的清单文件,列出了运行应用程序所需的元素并总结了它们之间的关系(操作系统、语言、数据库等)。

在您的项目中添加 Azkfile 的好处包括:

  • 使用 azk 为您的项目在本地和部署中自动设置环境
  • 其他想要部署您的应用程序的人可以使用 azk 来完成

编写 Azkfile 超出了本教程的范围,但您可以查看 azk 的文档以了解 如何编写 Azkfile 以及如何 添加运行项目 GitHub 按钮到你的代码。

先决条件

要按照本指南进行操作,您需要一台本地计算机,该计算机为您的本地环境运行以下任何操作系统(64 位):

  • Mac OS X 10.6 (Snow Leopard) 或更高版本
  • Ubuntu 12.04、14.04 或 15.10
  • Fedora 21 或 22

您还需要能够进行 git 提交。

  • 您的本地计算机需要安装 Git。 Linux使用说明见本系列使用Git,或访问Git下载页面
  • 在开始教程之前,请确保您已运行建议的命令 git config --global user.email "you@example.com"git config --global user.name "Your Name"; 有关 Git 的详细信息,请参阅前面的链接

请注意,本教程不需要活动的 Droplet。 azk 将使用 DigitalOcean 的 API 为您创建一个。

部署 Droplet 需要花钱! 本教程默认部署一个 1 GB 的 Droplet。


Linux 用户:安装 Docker

如果您使用的是 Linux(Ubuntu 或 Fedora),则需要安装 Docker 1.8.1 或更高版本作为容器软件。

安装 Docker 的一种方法是运行 Docker 的安装脚本。 (一般来说,确保在运行之前了解脚本的作用):

wget -nv https://get.docker.com/ -O- -t 2 -T 10 | bash

如果您想了解更多关于在 Linux 上安装 Docker 的信息,请查看官方文档中提供的 说明,或 DigitalOcean 的 Docker 安装文章

Mac OS X 用户:安装 VirtualBox

您需要 VirtualBox 4.3.6 或更高版本作为容器软件。

要安装VirtualBox,请从官方下载页面下载相应的Virtualbox安装包

第 1 步 — 本地安装 azk

我们将使用项目的安装脚本安装 azk。 确保您在系统上执行任何脚本之前了解它的作用。

如果您已经安装了旧版本的 azk,则可以使用该安装脚本来更新 azk。

或者,查看 软件包安装说明 以了解支持的操作系统。

在 Linux 上安装 azk

如果您使用的是 Linux(Ubuntu 或 Fedora),请在终端中运行此命令以使用项目脚本安装 azk。 我们建议 审查任何脚本,然后再在您的系统上运行它

wget -nv http://azk.io/install.sh -O- -t 2 -T 10 | bash

安装完成后,注销再重新登录,使所有修改生效。

您需要注销的原因是,在安装过程中,您的用户将被添加到 docker 组。 这是一个必需的步骤,以便我们可以在不成为 root 用户的情况下使用 Docker。 您必须退出当前会话才能使其生效。

如果你想了解更多关于Docker群的信息,可以查看Docker的官方文档。

在 Mac OS X 上安装 azk

在终端中运行此命令以使用项目的脚本安装 azk。 我们建议 审查任何脚本,然后再在您的系统上运行它

curl -sSL http://www.azk.io/install.sh | bash

第 2 步 — 检查 azk 安装

azk安装完成后,运行以下命令检查安装过程是否成功:

azk version

此命令验证安装的 azk 版本。 如果它返回一个版本号(例如 azk 0.17.0 或更高版本),我们很好,您可以继续下一步。

恭喜您为本地环境安装了 azk!

如果没有,请阅读下面的故障排除部分之一以获取帮助。

对 Linux 的 azk 安装进行故障排除

让我们通过运行检查安装的 Docker 版本:

docker version

您需要 1.8.1 或更高版本。

但是,如果您收到错误消息,则表示您尚未安装 Docker。 在这种情况下, 遵循 Docker 文档中针对您的操作系统的特定安装说明

确认安装了正确版本的 Docker 后,以 sudo 用户 身份运行此命令,以确保您的用户在 docker 组中:

id -Gn

如果您的组列表包括 docker,则表示它已正确配置。 否则,如果您没有在其中找到 docker 一词,请运行以下命令将您的用户添加到组中:

sudo usermod -aG docker $USER

然后注销并重新登录。

再次检查 id -Gn 命令以确保它返回包含 docker 的组列表。

如果这些说明还不足以让 Docker 正常运行(例如 仍然无法成功运行docker version命令),请参考Docker的安装说明

Mac OS X 的 azk 安装疑难解答

确保您已安装 VirtualBox:

which VBoxManage

如果这返回一个文件路径(例如 /usr/local/bin/VBoxManage),我们可以继续。 否则,如果它返回“未找到”消息,则表示您没有安装 VirtualBox。

在这种情况下,从他们的官方网站下载并安装VirtualBox安装包

(可选)第 3 步 — 了解演示应用程序 Stringer

我们选择 Stringer 作为本指南的演示应用程序,因为它是一个简单的应用程序,已经配置为与 azk 一起使用。

这是一个具有明确定义用例的 Rails 应用程序:一个简单的 RSS 阅读器。

更多关于斯金格:

一些新闻网站还以 RSS 提要的格式提供其内容。 这是一种标准 XML 文件格式,使发布者能够自动联合数据。 RSS 阅读器是用于订阅和呈现 RSS 内容的程序。 订阅网站 RSS 提要使用户无需手动检查网站是否有新内容。 用户可以创建订阅源列表并在 RSS 阅读器上使用他们的内容(通常采用按时间顺序排列的列表格式)。


(可选)第 4 步 — 配置自定义应用程序以使用 azk

虽然本指南的主要重点是展示 azk 如何适用于已经为 azk 阐明其环境详细信息的应用程序,但从长远来看,当您可以使用它来部署任何应用程序时,该工具最有用。

所以,看看 这个 Stringer 的分支版本主 Stringer 存储库 的比较。

azk 版本对 Stringer 的原始版本只有两个补充:

  • 一个 Azkfile,为 azk 提供环境信息
  • 一个 azk Run Project 按钮

您可以从 azk 的 AzkfileRun Project 按钮 文档中了解有关使 azk 与其他应用程序一起工作的更多信息。

接下来,我们将在 GitHub 上看到一个对 azk 友好的应用程序的外观。

(可选)第 5 步 — 使用 azk 在 GitHub 上的运行项目按钮

azk 对 GitHub 项目的最佳实践的一部分是让如何使用 azk 运行该项目变得非常明显。 因此,使用 azk 的项目可以使用 Run Project 按钮直观地隔离 azk 命令,而不仅仅是在项目自述文件的中间显示 azk 命令。

斯金格使用此按钮。

访问 azk 的 Stringer 的分支版本的 Running Locally 部分。

单击运行项目按钮。

第一次单击 运行项目 按钮时,您将看到一个简短的解释。 当您准备好继续前进时,只需单击说明底部的 OK, DISMISS

然后,您将被带到带有 azk 命令的 Stringer 项目页面:

azk start -o run-project/stringer

您可以随时点击右上角的这是什么?链接再次查看说明。

在屏幕中央,有一个带有三个选项卡的命令框:curlwgetazk。 由于我们已经安装了 azk,我们可以使用 azk 之一。

这是我们将在下一步中用于实际运行 Stringer 的命令。

第 6 步 — 在本地运行 Stringer

在本节中,我们将使用 azk 在本地工作站上运行 Stringer。

在我们的本地计算机上,让我们确保我们在我们的主目录中(如果您选择不同的安装文件夹,请记住将稍后的命令调整到您选择的目录):

cd ~

继续并在本地工作站上运行该命令以运行 Stringer:

azk start -o run-project/stringer

由于这是您第一次启动 azk,因此您将被要求接受其服务条款。 应提示如下消息:

? =========================================================================
  Thank you for using azk! Welcome!
  Before we start, we need to ask: do you accept our Terms of Use?
  http://docs.azk.io/en/terms-of-use
 =========================================================================
 (Y/n)

如果您同意,请按 Y,否则按 N。 然后按 ENTER 告知您的答案。 如果您不同意,您将无法使用 azk。

最后,azk 会自动下载 Stringer 的源代码以及随附的 Azkfile,以便在您本地计算机上完全安全和隔离的环境中运行此代码。

接下来,系统会询问您是否要启动 azk agent

输出

? The agent is not running, would you like to start it? (Y/n)

agent 是一个 azk 组件,用于配置 Docker(在 Linux 上)或 VirtualBox VM(在 Mac OS X 上)。

ENTER 回答“是”(默认选项)。

第一次运行代理时,azk 将运行它的设置。

该设置在幕后做了很多事情,包括创建文件 /etc/resolver/dev.azk.io,其中包含用于解析以 dev.azk.io 后缀结尾的地址的 DNS 配置。

azk 在运行应用程序时使用这个后缀来应用人类可读的地址,而不是要求我们手动配置 http://localhost:PORT_NUMBER 地址。 这也避免了不同应用程序之间的端口冲突。

(它基本上与编辑 /etc/hosts 文件以在本地重定向域名相同。)

如果您收到如下消息:

输出

? Enter the vm ip: (192.168.50.4)

您可以输入要在其上运行应用程序的任何本地 IP 地址。 对于大多数情况,默认值应该没问题。 要接受它,只需按 ENTER

要完成 azk 代理设置,系统会要求您输入 sudo 密码(对于 Mac OS X 用户,这是您的管理员密码)。

现在 azk 将启动。 您将看到 azk 下载 Azkfile 中列出的元素(以 Docker 映像的形式)。

首次下载这些图像可能需要几分钟(大约 10 分钟或更短)。

azk 完成设置后,您的默认浏览器将自动加载在本地计算机上运行的 Stringer 的初始屏幕。

如您所见,它使用本地 DNS,因此该应用程序在 http://stringer.dev.azk.io 处可见。 您也可以通过转到 http://stringer.dev.azk.io 手动访问应用程序。

如果您想设置密码并开始使用该应用程序,您可以,但本教程不需要。 我们只是想看看 azk 可以在本地运行 Stringer。

现在我们在本地计算机上运行了 Stringer,我们可以将其从计算机部署到 Droplet。

第 7 步 — 获取 DigitalOcean API 令牌

在我们可以从 azk 部署 Droplet 之前,我们需要一个 API 令牌。 该令牌允许 azk 在您的帐户上部署新的 DigitalOcean 服务器。

第一次使用此令牌从该环境运行 azk 时,它将部署一个新的 1 GB Ubuntu 14.04 Droplet。 来自相同本地环境的后续部署将使用相同的单个 Droplet。

按照链接教程的 如何生成个人访问令牌 部分中的说明进行操作。 生成的令牌必须具有读写权限

复制令牌的 64 个十六进制字符,类似于以下示例:

示例 API 令牌

a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726

您只会看到一次令牌字符串,因此请将其记在安全的地方。 (请记住,如果此令牌被泄露,它可能会被用来访问您的帐户,因此请保密。)

对于以下说明,请记住将示例令牌替换为您的真实令牌。

转到斯金格的文件夹:

cd ~/stringer

将您的个人访问令牌保存在一个名为 .env 的文件中。 为此,请运行以下命令来创建文件(不要忘记替换令牌):

echo "DEPLOY_API_TOKEN=a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726" >> .env

.env 文件内容应如下所示:

.env

DEPLOY_API_TOKEN=a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726

(可选)第 8 步 — 了解 SSH 密钥

您无需为 azk 设置 SSH 密钥,但了解 azk 如何使用它很有用。

azk 使用 SSH 密钥来访问 Droplet。 如果您已有 SSH 密钥,azk 将使用该密钥。

要确定您的计算机上是否有 SSH 密钥,请运行:

ls ~/.ssh/*.pub

如果它返回“未找到”消息,则您的计算机上没有任何 SSH 密钥。

在这种情况下,azk 将自动创建一个新的 SSH 密钥,专门用于从您的计算机部署每个新应用程序。

azk 将在自己的保留存储中创建其密钥,并且不会对您的 ~/.ssh 目录进行任何修改。

如果要查看生成的公钥,可以在第一次应用部署后运行以下命令:

azk deploy shell -c "cat /azk/deploy/.config/ssh/*.pub"

要了解更多关于 SSH 密钥的一般信息,阅读这篇关于 SSH 密钥的教程

第 9 步 — 使用 azk 进行部署

默认情况下,azk 将创建一个运行 Ubuntu 14.04 的 1 GB DigitalOcean Droplet 来部署您的应用程序。

如果您想部署具有不同规格的 Droplet,您可以在 Azkfile.js 文件中更改 deploy 系统的 envs 属性中的设置。 请参阅 azk 部署文档 获取更多说明。


首先,转到 Stringer 的(或您的应用程序的)目录:

cd ~/stringer

然后,要开始部署,只需运行:

azk deploy

命令 azk deploy 是使用 azk 编排应用程序时最常运行的命令。

第一次部署可能需要一段时间(大约 10 分钟),因为 azk 会完成所有工作。

具体来说,azk 必须:

  • 下载支持元素(用于部署的 Docker 映像)
  • 创建和配置 Droplet
  • 将应用程序的源代码上传到 Droplet
  • 运行应用程序

从您的计算机上每次新部署此应用程序都会更快(大约 30 秒或更短),因为较长的步骤已经完成。

如果您的 SSH 密钥受密码保护,则在部署过程中将需要几次。 只需输入您的 SSH 密钥密码并在每次出现如下消息时按 ENTER

输出

Enter passphrase for ~/.ssh/id_rsa:

终端输出将显示在 remote 系统上执行的许多操作,并以成功部署消息 App successfully deployed at http://your_server_ip 结束。

访问 http://your_server_ip 查看托管在您服务器上的应用程序。

从现在开始,您可以更改计算机上的应用程序代码,在本地对其进行测试,然后使用 azk deploy 命令将更改部署到您的 Droplet。

第 10 步 — 修改纵梁

为了展示使用 azk 进行应用程序开发、定制或版本控制是多么容易,让我们对 Stringer 注册页面进行简单的更改,然后重新部署应用程序。

确保您在 Stringer 的目录中:

cd ~/stringer

让我们编辑文件 app/views/first_run/password.erb,它是包含第一个注册页面的文本的页面。

使用 nano 或您喜欢的文本编辑器:

nano ~/stringer/app/views/first_run/password.erb

在这里,我们添加了一个额外的行,上面写着“使用 azk 很容易!”:

应用程序/视图/first_run/password.erb

<div class="setup" id="password-setup">
  <h1><%= t('first_run.password.title') %> <span class="orange"><%= t('first_run.password.anti_social') %></span>.</h1>
  <h2><%= t('first_run.password.subtitle') %></h2>
  <h2>It's easy with azk!</h2>
  <hr />
  . . .
</div>

保存并退出文本编辑器。 如果您使用的是 nano,请按 CTRL+O 保存并按 CTRL+X 退出。

由于 Stringer 默认设置为在生产模式下运行,因此刷新浏览器不足以使您的更改生效。 从 azk 重新启动应用程序:

azk restart stringer -o

新版本的 Stringer 应该会打开一个新的浏览器选项卡。 在默认文本 的正下方只有一个用户:您。,现在应该显示 使用 azk 很容易! 也是如此。

第 11 步 — 重新部署纵梁

现在,让我们将更改提交到我们的版本控制系统中,以便我们可以部署它们。

git add app/views/first_run/password.erb
git commit .

您将看到一个文本编辑器(很可能是 nano 或 vim)。

输入提交消息,例如 It is easy with azk

此提交消息将用于在 azk 中标记应用程序的版本,因此,如果您稍后需要回滚,请选择一个可以慢速记忆的版本。

保存并关闭提交消息。

如果您收到 fatal: empty ident name (for <sammy@azk.(none)>) not allowed 错误,请运行建议的 Git 设置命令来设置电子邮件地址和名称(更多详细信息请参见 Prerequisites 部分)。


要部署更改并更新在 Droplet 上运行的应用程序,请运行:

azk deploy

完成后,从浏览器访问您的 Droplet 的 IP 地址(例如 http://your_server_ip)。 您也应该在这里看到新行 It's easy with azk!

这个新部署将在 Droplet 上创建应用程序的新版本。 应用程序的所有版本都已存储,因此您可以回滚到前一个版本,然后再次前进。

第 12 步 — 回滚到以前的版本

要在 Droplet 上列出我们应用程序的所有可用版本,请在本地运行以下命令:

azk deploy versions

这应该会产生如下列表:

输出

⇲ Retrieving deployed versions...

  ➜ v2              It is easy with azk
    v1              Merge branch 'master' of https://github.com/swanson/stringer

要将应用程序回滚到旧版本,只需运行:

azk deploy rollback v1

参数 v1azk deploy versions 命令的输出显示的版本号。 如果您在没有参数的情况下运行命令(例如 azk deploy rollback),应用程序将回滚到当前版本之前的版本。

要检查回滚是否完成,只需刷新显示服务器版本的浏览器选项卡。

现在您应该看到没有我们自定义文本的应用程序,就像在原始部署中一样。

如果您想再次前滚,可以选择最新版本:

azk deploy rollback v2

这些版本的标签来自上一步中的 git commit 消息。

结论

在本指南中,我们使用了一个简单的 Rails 应用程序来演示 azk 如何自动化我们的应用程序环境设置任务。 这使得在多个环境中部署相同的应用程序变得容易。

如果您喜欢 azk 的部署过程,请考虑将其用于您自己的项目或将 Azkfile 添加到另一个开源项目的 fork 中。 了解 在此处 创建 Azkfile 以及如何 在此处 添加运行项目 GitHub 按钮。

或者,您可以查看这个 演示库 的其他应用程序,这些应用程序已经完成了与 azk 一起运行的工作。

除了 rollbackversions 之外,azk 还支持其他辅助子命令,允许我们执行一些额外的操作(例如,通过 SSH 访问 Droplet 的 shell)。

查看 azk 文档中的完整子命令列表