来自第AZK
介绍
AZK是一个轻量级的开源工具,你可以用它来协调应用环境。
你有没有得到在本地工作站上运行的应用程序,只有当你将它部署到生产服务器时,发现设置是完全不同的?
本文介绍AZK称为业务流程的工具,目前实施的这些应用 ,但适用于许多。 当部署AZK就绪的应用程序,您可以在本地,并以最小的大惊小怪的生产运行。
azk不仅可以快速方便地运行应用程序,而且可以轻松运行其所有的依赖项,包括所需的操作系统,语言,框架,数据库和其他依赖项(否则是劳动密集型,重复性,冗长,因此容易出错的任务)无论您在本地环境还是服务器。
这篇文章的目的是展示如何AZK作品业务流程的工具,使用一个被称为简单的Rails应用程序斯金格作为一个例子。
azk在幕后采取了许多步骤,使编排更容易。 因此,本教程包含几个可选步骤,这些步骤不一定非要设置示例应用程序,而是解释了azk正在做什么。
我们将从本地计算机上的源代码运行应用程序,将其部署到服务器,进行一些本地更改,部署更改并演示回滚。
完成本文后,您应该了解azk如何作为开发/部署工作流程的编排工具。
怎么运行的
首先,azk在本地计算机上编排应用程序的环境。 一旦应用程序在本地运行,azk也会自动将其部署到您的Droplet。
由于azk始终从源代码运行应用程序,因此您还可以在本地修改应用程序(如果需要),然后再部署或回滚,无需特殊的额外步骤。
AZK隔离使用容器环境,所以它的安全运行你的本地计算机上的应用程序。 它适用于从头开始和以前存在的代码的两个新项目。
在自定义应用程序中使用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。 请参见上使用Git这一系列针对Linux的说明,或者访问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组。 这是一个必要的步骤,使我们可以使用Docker不被root用户。 您必须退出当前会话才能使其生效。
如果您想了解更多关于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
我们选择斯金格作为本指南的演示应用程序,因为它是一个已经配置了AZK工作的一个简单的应用程序。
它是一个Rails应用程序,有一个定义良好的用例:一个裸骨的RSS阅读器。
更多关于Stringer:
一些新闻网站还以RSS提要的格式提供其内容。 这是一种标准的XML文件格式,使发布商能够自动聚合数据。 RSS阅读器是用于订阅和呈现RSS内容的程序。 订阅网站RSS Feed不需要用户手动检查网站的新内容。 用户可以创建订阅源的列表,并在RSS阅读器上使用其内容(通常以按时间顺序排序的列表的格式)。
(可选)第4步 - 配置自定义应用程序以使用azk
虽然本指南的主要重点是显示azk如何工作的应用程序已经有其环境详细说明了azk,从长远来看,该工具是最有用的,当你可以使用它来部署任何应用程序。
azk版本只有两个额外的Stringer的原始版本:
- 一个
Azkfile
,它提供了AZK环境信息 - 一个AZK 运行项目按钮
您可以了解更多有关使与其它应用程序AZK工作从AZK对文档Azkfile和运行项目按钮 。
接下来我们将看到一个azk友好的应用程序如何在GitHub上查看。
(可选)第5步 - 在GitHub上使用azk的运行项目按钮
对于GitHub项目,azk的最佳实践的一部分是使它非常明显如何使用azk运行该项目。 因此,而不是只是在展示项目自述中间的AZK命令,使用AZK可以使用运行项目按钮,视觉上的项目隔离AZK命令。
Stringer使用此按钮。
访问在本地运行的AZK的分叉斯金格的版本部分。
点击Run Project按钮。
当您第一次点击Run Project按钮,你就会明白是怎么回事的简短说明。 当你准备好继续前进,只需单击OK,在解释的底部DISMISS。
然后你将被带到一个页面与azk命令为Stringer项目:
azk start -o run-project/stringer
您可以随时点击的是什么?在右上角的链接再次看到了解释。
在屏幕的中央,有三个选项卡的命令框: 卷曲 ,wget和AZK。 既然我们已经安装了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 代理 :
? The agent is not running, would you like to start it? (Y/n)
代理是一个AZK组件配置Docker(在Linux上)或VirtualBox的VM(在Mac OS X)。
按ENTER
回答“是”(默认选项)。
第一次运行代理程序时,azk将运行其设置。
设置做了很多的场景,包括创建文件背后的东西/etc/resolver/dev.azk.io
,其中包含一个DNS配置,以解决与结束地址dev.azk.io
Stapling。
运行应用程序时,人类可读地址,适用于他们,而不是需要我们手动配置AZK使用这个Staplinghttp://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个十六进制字符,类似于以下示例:
a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726
您只会看到一次令牌字符串,因此请将其记录在安全的地方。 (请记住,如果此令牌遭到入侵,则可能会用于访问您的帐户,因此请将其设为不公开。)
对于以下说明,请记住将示例标记替换为真实标记。
转到Stringer的文件夹:
cd ~/stringer
保存您的个人访问令牌中你会打电话给一个文件.env
。 为此,运行此命令以创建文件(不要忘记替换令牌):
echo "DEPLOY_API_TOKEN=a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726" >> .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密钥, 。
第9步 - 使用azk部署
默认情况下,azk将创建一个1 GB的DigitalOcean Droplet运行Ubuntu 14.04来部署您的应用程序。
如果您想部署不同规格的一Droplet,就可以在更改设置envs
的财产deploy
系统在Azkfile.js
文件。 请参阅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:
终端输出将显示正在采取远程系统上的不少行动,成功部署的消息结束App successfully deployed at http:// your_server_ip
。
访问http:// your_server_ip
以查看服务器上托管的应用程序。
从现在起,你可以改变应用程序的代码,您的计算机上,本地测试和部署的变化与你Dropletazk deploy
命令。
第10步 - 修改Stringer
为了显示使用azk进行应用程序开发,定制或版本控制有多么容易,让我们简单地更改Stringer注册页面,然后重新部署应用程序。
确保你在Stringer的目录:
cd ~/stringer
让我们来编辑文件app/views/first_run/password.erb
,这是一个包含了第一个注册页面的文本页面。
使用nano
或者你喜欢的文本编辑器:
nano ~/stringer/app/views/first_run/password.erb
在这里,我们添加了一个额外的行,说“这很容易与azk!”:
<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以及!
第1步1 - 重新部署Stringer
现在,让我们将更改提交到我们的版本控制系统,以便我们可以部署它们。
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设置一个电子邮件地址和名称( 前提条件部分详细介绍)。
要部署更改并更新在Droplet上运行的应用程序,请运行:
azk deploy
一旦完成,从浏览器访问您的Droplet的IP地址(如http:// your_server_ip
)。 您应该看到新的生产线很容易与AZK!在这里,太。
这个新的部署将在Droplet上创建一个新版本的应用程序。 存储应用程序的所有版本,因此您可以回滚到上一个应用程序,然后再次转发。
第1步2 - 回滚到上一个版本
要在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
参数v1
是在输出中显示版本号azk deploy versions
命令。 如果你不带参数运行的命令(如azk deploy rollback
),应用程序将在当前前右回滚到的版本。
要检查回滚是否完成,只需刷新显示服务器版本的浏览器选项卡即可。
现在,您应该看到没有我们的自定义文本的应用程序,它在原始部署中的方式。
如果您想再次前滚,可以选择最新版本:
azk deploy rollback v2
这些版本标签来自git commit
在上一步的消息。
结论
在本指南中,我们使用了一个简单的Rails应用程序来演示azk如何自动化我们的应用程序环境设置任务。 这使得在多个环境中部署相同的应用程序变得容易。
如果你喜欢AZK的部署过程中,可以考虑使用它自己的项目或添加Azkfile
到另一个开源项目的一个分支。 了解这里创建一个Azkfile以及如何在这里添加运行项目GitHub的按钮 。
或者,你可以看看这个示范画廊的那些已经完成与AZK运行跑腿其他应用程序。
除了rollback
和versions
,AZK支持等辅助子,使我们能够执行一些额外的操作(例如,通过SSH访问Droplet的shell)。