如何部署Rails应用程序与AZK

AZK是业务流程的工具,可用于本地和服务器上部署应用程序。本教程介绍了如何用一个简单的Rails应用程序,斯特林格使用AZK。本文是从[AZK](http://www.azk.io/)。

来自第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按钮。

在Stringer项目上运行项目按钮

当您第一次点击Run Project按钮,你就会明白是怎么回事的简短说明。 当你准备好继续前进,只需单击OK,在解释的底部DISMISS。

“什么是azk?信息

然后你将被带到一个页面与azk命令为Stringer项目:

azk start -o run-project/stringer

使用azk:azk start -o run-project / stringer运行Stringer应用程序的命令

您可以随时点击的是什么?在右上角的链接再次看到了解释。

在屏幕的中央,有三个选项卡的命令框: 卷曲 ,wgetAZK。 既然我们已经安装了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.ioStapling。

运行应用程序时,人类可读地址,适用于他们,而不是需要我们手动配置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的初始屏幕。

Stringer已启动并正在运行

访问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

您只会看到一次令牌字符串,因此请将其记录在安全的地方。 (请记住,如果此令牌遭到入侵,则可能会用于访问您的帐户,因此请将其设为不公开。)

对于以下说明,请记住将示例标记替换为真实标记。

转到Stringer的文件夹:

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将创建一个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

Stringer已成功部署

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

访问在Droplet中运行的Stringer

从现在起,你可以改变应用程序的代码,您的计算机上,本地测试和部署的变化与你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!”:

app / views / 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以及

第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!在这里,太。

新版本的Stringer在Droplet上运行

这个新的部署将在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运行跑腿其他应用程序。

除了rollbackversions ,AZK支持等辅助子,使我们能够执行一些额外的操作(例如,通过SSH访问Droplet的shell)。

检查AZK文档中的完整列表子