来自 [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 折叠版本的部分。
点击运行项目
按钮。
当你第一次点击 运行项目 按钮时,你会看到发生了什么的简短解释.当你准备好继续时,只需点击** OK, DISMISS** 在解释的底部。
然后,您将被带到 Stringer 项目的 azk 命令的页面:
1azk 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)
如果您同意,请按Y
或N
,然后按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在本地计算机上运行的初始屏幕。
正如你所看到的,它使用本地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
结束。
访问http://your_server_ip
,查看您服务器上托管的应用程序。
从现在开始,您可以更改计算机上的应用程序代码,本地测试它,并使用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)。
此新部署将在 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的操作。
除了)。