介绍
Deis 是一个开源的私有平台作为服务(PaaS),它简化了在自己的服务器上部署和管理应用程序。通过利用 Docker 和 CoreOS 等技术,Deis 在您选择的托管提供商上提供类似于 Heroku 的工作流程和扩展功能。
在本教程中,我们将向您展示如何在DigitalOcean上设置自己的3台机器Deis平台集群。
<$>[注] 注: 本教程是基于 Deis 的 v1.9.0 版本。
前提条件
要完成本指南,您必须具备以下内容:
- 创建具有至少4GB内存和40GB磁盘空间的至少3Dropplets的能力. 这些将是Deis平台将安装在
上的CoreOS机器 * SSH 密钥(s)将添加到 dropplets中,用于使用
deisctl
工具时的身份验证 - SSH 密钥将对Deis的构建者
进行身份验证 * 一个域将指向集群机器 - 本教程将使用
example.com
作为其域名。
本教程主要基于 如何在DigitalOcean上设置CoreOS集群。
我們還會在本地 Mac OS X 電腦上安裝 Deis Control Utility,『deisctl』和『Deis 客戶端』(https://github.com/deis/deis),『deis』,但如果您願意,您可以安裝在其他地方,例如 Ubuntu 14.04 Droplet。
创建新发现 URL
要创建我们将安装 Deis 平台的 CoreOS 集群,我们首先需要生成一个新的发现 URL,一个独特的地址,存储 peer CoreOS 地址和元数据。 最简单的方法是使用 https://discovery.etcd.io
,这是一个免费的发现服务。 通过在 Web 浏览器中访问 https://discovery.etcd.io/new?size=3或运行下面的 curl
命令来创建一个新的发现 URL:
1curl -w "\n" "https://discovery.etcd.io/new?size=3"
任何一种方法都会返回一个独特而新鲜的发现URL,它看起来像以下某些东西(突出的部分将是一个独特的代币):
1https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27
您将使用结果的发现 URL 创建新的 Deis 平台集群. 相同的发现 URL 必须在您想要添加到特定 Deis 平台集群的每个 CoreOS 服务器的云配置的etcd
部分中指定。
现在我们有一个发现URL,让我们看看将其添加到云配置
,我们将使用它来创建我们的Deis集群的每个机器。
二 用户数据
要创建一个将用于我们的Deis群集的CoreOS机器群集,我们将使用由Deis维护者提供的特殊云配置
文件。
在文本编辑器中打开所提供的用户数据,然后找到定义 discovery URL 的行。
1--discovery #DISCOVERY_URL
删除评论,并将突出的#DISCOVERY_URL
替换为您在上一步中生成的独特的发现 URL。
本教程基于 Deis 1.9.0,但示例用户数据中指定的版本可能更为当前。
1ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.9.0'
请务必在下列步骤中安装deisctl
和deis
时使用用户数据中的版本。
如果您愿意,您可以将这个用户数据文件保存在某个地方。
创建 CoreOS 滴滴
如果您不熟悉在创建Droplet时如何通过 _user data_提供云配置
文件,请参阅我们CoreOS集群教程的 如何提供云配置部分。
创建至少三个Dropplets, 在同一个区域,具有以下规格:
- 至少 4GB 内存和 40GB 磁盘空间
- 私人网络已启用,如果可用. 如果私人网络在您所选择的地区无法使用,请编辑用户数据,并用
$private_ipv4
代替$public_ipv4
- 启用用户数据,然后从上一步输入用户数据 *选择 CoreOS 稳定频道作为 Linux 发行版 *从列表中选择您的 SSH 密钥
如果您更愿意使用docl
便利工具来提供您的Droplets,请遵循指示 这里。
一旦你创建了至少三台这些机器,你应该有一个CoreOS集群,它已经准备好安装Deis平台。
DNS 配置
Deis 需要一个 Wildcard DNS 记录才能正常运作. 如果您正在使用的顶级域(TLD)是 example.com
,您的应用程序将存在于 *.example.com
级别。
在 DigitalOcean 上配置此功能的一种方法是通过 DNS 控制面板设置圆形机器人 DNS。
- 在您的最高级别域的 wildcard CNAME 记录,即名称为
*
的 CNAME 记录,以及@
作为 Canonic 主机名称 - 对于每台创建的 CoreOS 机器,一个指向 TLD 的 A 记录,即名为
@
的 A 记录,具有 Droplet 的公共 IP 地址
该区域文件现在将有以下条目:(您的IP地址将不同)
1[secondary_label DNS Records 1 of 2]
2* CNAME @
3@ IN A 104.131.93.162
4@ IN A 104.131.47.125
5@ IN A 104.131.113.138
在本示例中,Deis路由器/控制器可通过deis.example.com
访问。
为了方便,您还可以为每个节点设置 DNS 记录:
1[secondary_label DNS Records 2 of 2]
2deis-1 IN A 104.131.93.162
3deis-2 IN A 104.131.47.125
4deis-3 IN A 104.131.113.138
如果您需要使用 DNS 控制面板的帮助,请参阅 此教程。
使用 xip.io
如果您不希望设置自己的域名,您可以使用「xip.io」提供您的 wildcard DNS. 基本上,这将允许您使用您的 Droplet 的 IP 地址附加到 ".xip.io" 作为一个解决到 IP 地址的 wildcard 域名。
在您在集群上安装 Deis 平台后,请确定哪台 CoreOS 机器在运行[email protected]
单元中使用deisctl list
- 我们将在下一节中安装deisctl
。然后确定该机器的公共 IP 地址。
1[secondary_label xip.io example]
2deis.104.131.47.125.xip.io
应用安全组设置
DigitalOcean Droplets 默认情况下没有启用防火墙,所以我们应该添加一些iptables
规则,以确保我们的组件不能被外部人访问。
1curl -O https://raw.githubusercontent.com/deis/deis/master/contrib/util/custom-firewall.sh
在审查脚本内容后,在每个服务器上执行它,例如,使用我们之前创建的DNS条目,我们会运行以下命令:
1ssh [email protected] 'bash -s' < custom-firewall.sh
2ssh [email protected] 'bash -s' < custom-firewall.sh
3ssh [email protected] 'bash -s' < custom-firewall.sh
请确保在所有服务器上运行脚本。
安装这些工具
现在我们已经安装了CoreOS群集,我们将安装Deis控制实用程序和客户端,您应该在您想要控制您的Deis群集的计算机上安装这些工具,我们将展示在单独的Ubuntu 14.04 Droplet上安装它们,但您可以随时随地安装它们。
安装 Deis 控制工具
Deis 控制实用程序允许您与 Deis 机器互动,并在集群上安装 Deis 平台。
然后,通过下载并运行安装脚本来安装Deis Control Utility,使用以下命令(用用户数据中发现的数字替换版本):
1/bin/bash -c 'curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.9.0'
这将deisctl
安装到当前目录中,并更新 Deis 单元文件。
让我们将其链接到/usr/local/bin
,所以它将在我们的PATH
中:
1sudo ln -fs $(pwd)/deisctl /usr/local/bin/deisctl
现在你可以使用deisctl
命令。
安装客户端
Deis 客户端,也称为 Deis 命令行接口,允许您与 Deis 控制器单元进行交互。
安装 Deis 客户端,通过下载并运行安装脚本使用以下命令(用用户数据中发现的数字替换版本):
1/bin/bash -c 'curl -sSL http://deis.io/deis-cli/install.sh | sh -s 1.9.0'
这将安装deis
,这是当前目录的客户端. 让我们将其链接到/usr/local/bin
,所以它将在我们的PATH
:
1sudo ln -fs $(pwd)/deis /usr/local/bin/deis
Deis 客户端已安装,您现在可以使用deis
命令。
平台提供
从您安装 Deis 工具的计算机上,我们将提供 Deis 平台。
确保您的 SSH 代理正在运行(并选择与您的 CoreOS Droplets 添加的 SSH 密钥相匹配的私钥):
1eval `ssh-agent -s`
2ssh-add ~/.ssh/id_rsa_deis
接下来,我们必须导出DEISCTL_TUNNEL
,以指向我们的Deis机器之一,以名称或公共IP地址。
1export DEISCTL_TUNNEL=deis-1.example.com
这就是deisctl
试图与集群进行通信的地方,您可以通过运行deisctl列表
来测试它是否正常工作,如果您看到一个单一的输出行,则控制实用程序正在与指定的CoreOS机器进行通信。
在提供平台之前,我们需要向Deis添加一个SSH密钥,这样它可以在deis run
期间连接到远程主机:
1deisctl config platform set sshPrivateKey=~/.ssh/id_rsa_deis
我们还需要告诉控制器我们正在部署的应用程序的域名:
1deisctl config platform set domain=example.com
一旦之前的配置命令已运行,请使用此命令提供 Deis 平台:
1deisctl install platform
您将看到如下输出,这表明运行 Deis 所需的单元已被加载到 CoreOS 集群中:
1[secondary_label Install Output:]
2● ▴ ■
3■ ● ▴ Installing Deis...
4▴ ■ ●
5Storage subsystem...
6deis-store-metadata.service: loaded
7...
8Done.
9
10Please run `deisctl start platform` to boot up Deis.
运行此命令来启动 Deis 平台:
1deisctl start platform
一旦你看到Deis开始了
,你的Deis平台在一个集群上运行!
您可以通过运行以下命令来验证所有 Deis 单元都是 loaded 和 active:
1deisctl list
所有单位都必须活跃。
安装 Deis-store-admin (可选)
在继续前,您可能需要安装deis-store-admin
组件,这在诊断存储问题时往往是有帮助的。
要安装该组件,请运行以下命令:
1deisctl install store-admin
2deisctl start store-admin
现在你已经完成了一个群集的配置,注册一个Deis管理员用户开始使用该平台!
注册2个用户
现在Deis平台正在运行,我们必须使用deis
命令注册用户。deis
命令通过可访问的deis.example.com
的 _router_单元与Deis控制器进行通信:
1deis register http://deis.example.com
您将被要求提供一个 用户名、 密码和 电子邮件地址. 提供这些项目后,您将自动登录Deis平台。
接下来,将适当的 SSH 密钥添加到 deis
. 输入以下命令:
1deis keys:add
您将被要求从可用的密钥中选择一个 SSH 密钥,选择您想要添加的密钥。
登录到 Deis
如果您需要稍后登录,请使用以下命令:
1deis login http://deis.example.com
你将被邀请使用你之前创建的Login。
部署样本应用程序(可选)
Deis支持三种不同的构建应用程序:
- 海洛库 Buildpacks
- 文件文件
- 文件图像
我们将展示如何使用 Heroku Buildpack 工作流来部署应用程序,使用 Deis 提供的 example-ruby-sinatra。
更改到您要下载示例应用程序的目录,在您处于所需位置后,运行此命令来克隆 git 存储库:
1git clone https://github.com/deis/example-ruby-sinatra.git
2cd example-ruby-sinatra
deis create
命令可用于在Deis控制器上创建应用程序。
1deis create
这会创建一个应用程序,并用Deis的自动命名算法命名它:
1[secondary_label deis create output:]
2Creating application... done, created dapper-yachting
3Git remote deis added
在这种情况下,申请的名称是dapper-yachting
。
现在,要部署应用程序,请使用git push deis master
。
1git push deis master
运行部署命令后,您将看到许多输出行.一旦完成,输出将表示应用已经部署,并告诉您其自动生成的名称,以及它可以访问的位置:
1[secondary_label git push deis master output:]
2...
3-----> Launching...
4 done, dapper-yachting:v2 deployed to Deis
5
6 http://dapper-yachting.example.com
7
8 To learn more, use `deis help` or visit http://deis.io
9
10To ssh://[email protected]:2222/dapper-yachting.git
11 * [new branch] master -> master
在本示例中,URL为http://dapper-yachting.dev.example.com
,即与集群名称结合的应用程序名称。
您可以通过在 Web 浏览器中访问应用程序 URL 来测试它是否有效,或使用以下 curl 命令(在自己的 URL 中替代):
1curl http://dapper-yachting.dev.example.com
您应该看到类似于以下的输出:
1[secondary_label App output:]
2Powered by Deis! Running on container ID a0d35733aad8
样本应用程序查看运行位置的容器ID,并输出它。
结论
现在你有一个工作 Deis 设置,尝试使用其他两个工作流部署 Deis 应用程序. 该 dockerfile 工作流与 Heroku Buildpack 流相似,因为它还使用git push
来部署,而 docker image 工作流则使用deis pull
来部署。