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

来自 [azk] 的文章(http://www.azk.io/)

介绍

azk是一个轻量级的开源工具,您可以使用它来组织应用环境。

你有没有在本地工作站运行应用程序,只是在部署到生产服务器时发现设置完全不同?

本文介绍了一种名为azk的编排工具,目前适用于 这些应用程序,但适用于更多。

azk 使它快速且易于运行不仅应用程序,而且所有的依赖性,包括所需的操作系统,语言,框架,数据库和其他依赖性(否则劳动密集,重复性,漫长,因此易于错误的任务),无论您是在本地环境或服务器上。

本文的目的是展示 azk 如何作为一个管弦乐工具,使用一个简单的 Rails 应用程序,名为 Stringer作为一个例子。

因此,本教程包含一些可选的步骤,这些步骤不是严格需要设置样本应用程序,但解释了azk正在做什么。

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

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

它是如何工作的

首先,azk 在本地计算机上组织应用程序的环境. 一旦应用程序在本地运行,azk 也会自动部署到您的 Droplet。

由于azk 始终从源代码运行应用程序,您也可以本地使用应用程序(如果您想要的话),然后部署或滚动,再次没有特殊的额外步骤。

azk 使用 containers 隔离环境,因此在本地计算机上运行应用程序是安全的。

使用 Azk 与自定义应用程序

使用当前的 [应用程序预配置以使用azk]列表(http://run.azk.io/)作为示例,您可以配置任何项目以使用azk。

要做到这一点,请 添加一个Azkfile到该项目。

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

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

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

编写一个)(http://docs.azk.io/en/azkfilejs/)以及如何将(http://docs.azk.io/en/run-project-button/)添加到您的代码中。

前提条件

要跟随本指南,您需要一个本地计算机,为本地环境运行这些操作系统(64 位):

  • Mac OS X 10.6 (雪豹) 或更高版本 * Ubuntu 12.04, 14.04 或 15.10 * Fedora 21 或 22

你还需要能够做出git承诺。

  • 您的本地计算机需要安装 Git. 请参阅 使用 Git 的这一系列以获取 Linux 指令,或访问 Git 下载页面 * 请确保您在启动教程之前运行了建议的命令 git config --global user.email "[email protected]" 和 `git config --global user.name "Your Name';参见有关 Git 的详细信息的之前的链接

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

<$>[注]部署Droplet花费钱!本教程默认情况下部署一个单一的1GBDroplet。

Linux 用户:安装 Docker

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

安装 Docker 的一个方法是运行 Docker 的安装脚本(一般来说, 在运行之前确保您了解脚本的功能 ):

1wget -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 安装包(https://www.virtualbox.org/wiki/Downloads)。

第1步:本地安装azk

我们将使用该项目的安装脚本安装azk。 **在在您的系统上运行之前,请确保您了解任何脚本的功能。

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

或者,请查看支持的操作系统的 包装安装说明

在 Linux 上安装 azk

如果您正在使用 Linux (Ubuntu 或 Fedora),请在终端中运行此命令以使用该项目的脚本安装 azk。

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

安装完成后,退出,然后再次登录,使所有更改有效。

您需要退出的理由是,在安装过程中,您的用户将被添加到 docker 组. 这是一个必要的步骤,以便我们可以使用 Docker而不是** root** 用户。

如果您想了解更多关于 Docker 的信息(http://docs.docker.com/v1.8/installation/ubuntulinux/# create-a-docker-group),您可以查看 Docker 的官方文档。

在 Mac OS X 上安装 azk

在终端中运行此命令以使用该项目的脚本安装azk. 我们建议在系统上运行它之前 **vetting任何脚本:

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

步骤 2 — 检查 azk 安装

一旦 azk 安装完成,请运行下面的命令来检查安装过程是否成功:

1azk version

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

恭喜您为您的当地环境安装azk!

如果没有,请阅读下面的解决问题部分之一以获取帮助。

解决 Linux 的 Azk 安装问题**

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

1docker version

您需要版本 1.8.1 或更高版本。

但是,如果您收到错误消息,则意味着您尚未安装 Docker. 在这种情况下,请从 Docker 文档中为您的操作系统使用 遵循特定安装说明

确认您已安装了正确的 Docker 版本后,请作为您的 sudo 用户 运行此命令,以确保您的用户位于** docker** 组中:

1id -Gn

如果您的组列表包含 docker ,这意味着它已正确配置,否则,如果您没有在其中找到** docker** 这个词,请运行此命令来将您的用户添加到组中:

1sudo usermod -aG docker $USER

然后退出并再次登录。

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

如果这些指令不足以让 Docker 正常运行(例如,您仍然无法成功运行),请参阅 Docker 安装指令(http://docs.docker.com/engine/installation/)。

Mac OS X 的 Azk 安装故障排除

請確定您已安裝 VirtualBox:

1which VBoxManage

如果它返回一个文件路径(如 /usr/local/bin/VBoxManage),我们可以继续进行。否则,如果它返回了一个未找到消息,则意味着您没有安装 VirtualBox。

在这种情况下,从其官方网站下载并安装 VirtualBox 安装包(https://www.virtualbox.org/wiki/Downloads)。

(可选)步骤3 - 了解演示应用程序, Stringer

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

它是一个具有明确的用例的 Rails 应用程序:一个裸体的 RSS 阅读器。

<$>[注] 更多关于 Stringer:

一些新闻网站还提供 RSS 源的内容,这是一个标准的 XML 文件格式,允许出版商自动组合数据。 RSS 阅读器是用于订阅和呈现 RSS 内容的程序。订阅网站的 RSS 源消除了用户手动检查网站的新内容的必要性。用户可以创建订阅的源列表,并在 RSS 阅读器上消耗其内容(通常以时间顺序列表的形式)。

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

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

因此,让我们来看看 stringer 的这个折叠版本主 Stringer 存储库的比较。

Azk版本只有两个补充到Stringer的原始版本:

一个Azkfile,为azk提供环境信息 * 一个azk ** 运行项目 按钮

您可以在 Azkfile运行项目按钮上的azk的文档中了解更多有关 azk与其他应用程序的工作。

接下来,我们将看到一个Azk友好的应用程序在GitHub上是什么样子。

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

Azk 对 GitHub 项目的最佳实践的一部分是要非常清楚地说明如何使用 Azk 运行该项目,因此,而不是仅仅在项目阅读中间显示 Azk 命令,使用 Azk 的项目可以使用 Run Project 按钮来视觉地隔离 Azk 命令。

Stringer 使用此按钮。

请参阅(https://github.com/run-project/stringer# running-locally) azk 的 Stringer 折叠版本的部分。

点击运行项目按钮。

Run Project button on Stringer project

当你第一次点击 运行项目 按钮时,你会看到发生了什么的简短解释.当你准备好继续时,只需点击** OK, DISMISS** 在解释的底部。

'What is azk?' message

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

1azk start -o run-project/stringer

Command to run the Stringer app using azk: azk start -o run-project/stringer

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

在屏幕的中心,有一个命令框有三个选项: curl ,** wget** 和** azk** . 由于我们已经安装了azk,我们可以使用** azk** 。

这是我们将在下一步使用的命令,以实际运行 Stringer。

第6步:本地运行 Stringer

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

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

1cd ~

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

1azk start -o run-project/stringer

由于这是您第一次开始使用 azk,您将被要求接受其服务条款。

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

如果您同意,请按YN,然后按ENTER,通知您的答案。如果您不同意,您将无法使用azk。

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

接下来,您将被问到是否要启动 azk agent:

1[label Output]
2? The agent is not running, would you like to start it? (Y/n)

agent 是配置 Docker (在 Linux 上) 或 VirtualBox VM (在 Mac OS X 上) 的 Azk 组件。

按)。

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

安装程序在幕后做了很多事情,包括创建文件 /etc/resolver/dev.azk.io,其中包含一个 DNS 配置来解决以 dev.azk.io 字符串结束的地址。

azk 在运行应用程序时使用这个补丁来应用可人读的地址,而不是要求我们手动配置 http://localhost:PORT_NUMBER 地址。

(它基本上与编辑您的 `/etc/hosts’ 文件相同,以便本地重定向域名。

如果您收到如下信息:

1[label Output]
2? Enter the vm ip: (192.168.50.4)

您可以输入您想要运行应用程序的任何本地 IP 地址. 默认值应该在大多数情况下正常。

要完成azk代理设置,您将被要求提供您的 sudo 密码(对于Mac OS X用户,这是您的管理员密码)。

你会看到azk下载在Azkfile中列出的元素(以Docker图像的形式)。

这些图像可能需要几分钟才能下载第一次(大约10分钟或更少)。

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

Stringer is up and running

Accessing Stringer app

正如你所看到的,它使用本地DNS,所以应用程序可以看到在http://stringer.dev.azk.io。

如果你想设置密码并开始使用应用程序,你可以,但这不是必要的本教程. 我们只是想看到,azk可以运行 Stringer本地。

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

第7步:获取DigitalOcean API代币

在我们从 azk 部署 Droplet 之前,我们需要一个 API 代币. 该代币允许 azk 在您的帐户中部署新的 DigitalOcean 服务器。

第一次使用此代码从这个环境中运行azk,它将部署一个新的1GB Ubuntu 14.04 Droplet。

请遵循相关教程的 How To Generate a Personal Access Token 部分的说明。 生成的代币必须具有 读取和写入权限

复制你的代币的64个六十字符,类似于下面的示例:

1[label Example API Token]
2a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726

您只会看到一个代币字符串一次,所以在安全的地方记住它(记住,如果这个代币受到威胁,它可能会被用来访问您的帐户,所以保持隐私)。

对于下面的说明,请记住用你的真实代码来替换示例代币。

进入 Stringer 文件夹:

1cd ~/stringer

将您的个人访问令牌保存到你将称之为):

1echo "DEPLOY_API_TOKEN=a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726" >> .env

.env 文件的内容应该是这样的:

1[label .env]
2DEPLOY_API_TOKEN=a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726

(可选)步骤8 – 了解SSH密钥

您不必做任何事情来为 azk 设置 SSH 密钥,但了解 azk 如何使用它是有用的。

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

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

1ls ~/.ssh/*.pub

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

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

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

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

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

有关 SSH 密钥的更多信息,请阅读有关 SSH 密钥的本教程(https://andsky.com/tech/tutorials/how-to-set-up-ssh-keys--2)。

步骤 9 — 使用 azk 部署

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

<$>[注] 如果您想部署具有不同的规格的Droplet,您可以更改在)以获得额外的说明。

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

1cd ~/stringer

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

1azk deploy

azk部署命令是您在使用azk来编排应用程序时最常执行的命令。

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

具体来说,azk必须:

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

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

如果你的 SSH 密钥是密码保护的,它将在部署过程中需要几次。只需输入你的 SSH 密钥密码,每次出现消息时按ENTER:

1[label Output]
2Enter passphrase for ~/.ssh/id_rsa:

终端输出将显示在 remote 系统上执行的几项操作,并以成功部署消息应用程序成功部署在 http://your_server_ip结束。

Stringer has been successfully deployed

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

Accessing Stringer running in a Droplet

从现在开始,您可以更改计算机上的应用程序代码,本地测试它,并使用azk部署命令在您的Droplet中部署更改。

第10步:修改 Stringer

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

请确保您在 Stringer 目录中:

1cd ~/stringer

让我们编辑app/views/first_run/password.erb文件,这是第一个登录页面的文本页面。

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

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

在这里,我们添加了一个额外的行,说它很容易与azk!:

1[label app/views/first_run/password.erb]
2<div class="setup" id="password-setup">
3  <h1><%= t('first_run.password.title') %> <span class="orange"><%= t('first_run.password.anti_social') %></span>.</h1>
4  <h2><%= t('first_run.password.subtitle') %></h2>
5  <h2>It's easy with azk!</h2>
6  <hr />
7  . . .
8</div>

保存和退出文本编辑器. 如果您正在使用 nano,请按CTRL+O来保存并按CTRL+X来退出。

由于 Stringer 默认设置为在生产模式下运行,因此更新您的浏览器并不足以让您的更改生动。

1azk restart stringer -o

一个新的浏览器卡应该在新的版本的 Stringer 打开. 在默认文本下面 只有一个用户:你. ,它现在应该说** 它很容易与 azk!** 也是。

第11步:重新部署 Stringer

现在,让我们把这些更改纳入我们的版本控制系统,以便我们可以部署它们。

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

您将看到文本编辑器(最有可能的是 nano 或 vim)。

输入 commit 消息,例如它与 azk 很容易

此 commit 消息将用于在 azk 中标记应用程序的版本,因此,如果您需要稍后重新滚动,请选择一种将拖延您的内存。

保存并关闭 commit 消息。

<$>[注] 如果您收到)。

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

1azk deploy

一旦完成,请从您的浏览器访问您的Droplet的IP地址(例如:http://your_server_ip)。

New version of Stringer running on Droplet

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

步骤 12 — 滚动回到以前的版本

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

1azk deploy versions

这应该产生一个列表,如:

1[label Output]
2⇲ Retrieving deployed versions...
3
4  ➜ v2 It is easy with azk
5    v1 Merge branch 'master' of https://github.com/swanson/stringer

若要将应用程序滚回较早版本,只需运行:

1azk deploy rollback v1

参数 v1 是由 azk 部署版本 命令的输出显示的版本号,如果在没有参数的情况下运行该命令(例如 azk 部署滚动),应用程序将被滚回当前版本之前的版本。

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

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

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

1azk deploy rollback v2

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

结论

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

如果您喜欢azk的部署过程,请考虑将其用于自己的项目或将)以及如何 在这里添加运行项目GitHub按钮

或者,您可以查看此示范画廊(http://run.azk.io/)其他应用程序,这些应用程序已经完成了使用azk的操作。

除了)。

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

Published At
Categories with 技术
comments powered by Disqus