介绍
Deis是一种开源私有平台即服务(PaaS),可简化在自己的服务器上部署和管理应用程序。 通过利用诸如Docker和CoreOS等技术,Deis在您选择的托管提供商上提供类似于Heroku的工作流和缩放功能。 Deis支持可以在Docker容器中运行的应用程序,并且可以在支持CoreOS的任何平台上运行。
在本教程中,我们将向您展示如何在DigitalOcean上设置您自己的3台Deis平台集群。
注:本教程基于DEIS的v1.9.0版本。
先决条件
要完成本指南,您必须具有以下内容:
- 能够创建至少3个Droplet至少有4GB的内存和40GB的磁盘空间 。 这些将是将安装Deis平台的CoreOS计算机
- SSH密钥(多个)添加到Droplet,使用时用于验证
deisctl
工具 - SSH用于对Deis的构建器进行身份验证的密钥
- 域指向与集群机-本教程将使用
example.com
作为其领域。 一个替代方案是使用XIP
本教程主要是基于如何建立一个CoreOS集群上DigitalOcean 。 如果您无法顺利完成本教程中有关创建CoreOS群集的步骤,请查看它。
我们也将安装DEIS控制工具 , deisctl
和DEIS客户端 , deis
,本地的Mac OS X计算机上,但你可能在其他地方安装它们,比如一个Ubuntu 14.04Droplet,如果你想。 与用于创建CoreOSDroplet必须存在,其中在计算机上的SSH密钥对应的SSH私钥deisctl
安装。
生成新的发现URL
要创建我们将安装Deis平台的CoreOS集群,我们首先需要生成一个新的发现URL,一个存储对等CoreOS地址和元数据的唯一地址。 要做到这一点,最简单的方法是使用https://discovery.etcd.io
,免费的搜索服务。 新发现的URL访问https://discovery.etcd.io/new?size=3在Web浏览器或通过运行以下curl
的命令:
curl -w "\n" "https://discovery.etcd.io/new?size=3"
任一方法将返回一个独特的和新的发现URL,看起来像下面(突出部分将是一个独特的令牌):
https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27
您将使用生成的发现URL创建新的Deis平台集群。 同样发现URL必须在指定etcd
要添加到特定DEIS平台集群中的每个服务器CoreOS的云配置的部分。
现在,我们有一个发现URL,让我们来看看它添加到cloud-config
,我们将用它来创建我们的集群DEIS每台机器。
Deis用户数据
要创建将在我们DEIS群集中使用CoreOS计算机集群中,我们将使用一个特殊cloud-config
由DEIS的维护者提供的文件。 此文件位于Deis GitHub存储库:
在文本编辑器中打开提供的用户数据,并找到发现URL定义行。 它将如下所示:
--discovery #DISCOVERY_URL
取消注释,并替换突出#DISCOVERY_URL
与您在上一步中生成的唯一URL的发现。
本教程基于Deis 1.9.0,但是示例用户数据中指定的版本可能更新。 查找以下行(突出显示的数字表示版本):
ExecStart=/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 Droplets
现在,我们有,我们将使用用户数据 ,我们现在创建CoreOS机器。 如果你不熟悉如何提供cloud-config
Droplet创建过程中,通过用户数据文件,请参阅如何提供云配置我们CoreOS集群教程部分。
创建至少三Droplet, 在同一地区 ,具有以下规格:
- 至少4GB内存和40GB硬盘空间
- 专用网络启用后,如果有的话。 如果专用网络不可用在你选择的区域,编辑的用户数据和更换的每个实例
$private_ipv4
与$public_ipv4
- 使用户数据和来自前面步骤中输入用户数据
- 选择CoreOS稳定通道作为Linux发行版
- 从列表中选择您的SSH密钥
如果您希望使用docl
方便的工具来配置你的Droplet,按照指示在这里 。
一旦创建了至少三台这些机器,您应该有一个CoreOS集群准备好进行Deis平台安装。 让我们继续设置DNS。
配置DNS
Deis需要通配符DNS记录才能正常工作。 如果您使用的是顶级域名(TLD)是example.com
,您的应用程序将在存在*.example.com
水平。 例如,所谓的“应用程序”的应用程序将通过访问app.example.com
。
上DigitalOcean配置此的一种方式是通过设置循环DNS DNS控制面板 。 为此,请将以下记录添加到您的网域:
- 在您的顶级域名通配符CNAME记录,即CNAME记录
*
作为名称,并@
作为规范主机名 - 对于创建的每个CoreOS机,A记录指向TLD,即一个名为A记录
@
,随着Droplet的公网IP地址
区域文件现在将有以下条目:(您的IP地址将不同)
DNS Records 1 of 2* CNAME @
@ IN A 104.131.93.162
@ IN A 104.131.47.125
@ IN A 104.131.113.138
在这个例子中,DEIS路由器/控制器将通过到达deis.example.com
。
为方便起见,您还可以为每个节点设置DNS记录:
DNS Records 2 of 2deis-1 IN A 104.131.93.162
deis-2 IN A 104.131.47.125
deis-3 IN A 104.131.113.138
如果你需要使用DNS的控制面板帮助,请查看本教程 。
使用xip.io
如果你不想建立自己的域名,可以使用xip.io
提供您的通配符DNS。 基本上,这将允许您使用由“.xip.io”附加的Droplet的IP地址作为解析为IP地址的通配符域。
您在集群上安装DEIS平台后,确定哪些CoreOS机器运行deis-router@1.service
单元deisctl list
-我们将安装deisctl
在下一节。 然后确定该机器的公共IP地址。 如果是104.131.47.125
,您可以使用以下域达到DEIS路由器:
xip.io exampledeis.104.131.47.125.xip.io
应用安全组设置
DigitalOceanDroplet没有默认启用防火墙,所以我们应该增加一些iptables
规则,以确保我们的组件不为外人访问。 该DEIS库提供了一个脚本,可以发现, 在这里 ,可以做到这一点。
curl -O https://raw.githubusercontent.com/deis/deis/master/contrib/util/custom-firewall.sh
在查看脚本的内容后,在每个服务器上执行它。 例如,使用我们之前创建的DNS条目,我们将运行以下命令:
ssh core@deis-1.example.com 'bash -s' < custom-firewall.sh
ssh core@deis-2.example.com 'bash -s' < custom-firewall.sh
ssh core@deis-3.example.com 'bash -s' < custom-firewall.sh
确保在所有服务器上运行脚本。
安装Deis工具
现在我们已经设置了CoreOS集群,我们将安装Deis Control Utility和Client。 您应该在要控制Deis群集的计算机上安装这些工具。 我们将演示将它们安装在单独的Ubuntu 14.04 Droplet上,但是您可以随意安装它们。
安装Deis Control实用程序
Deis控制实用程序允许您与Deis机器交互,并在群集上安装Deis平台。
更改到你想安装的目录deisctl
二进制文件。 然后,通过使用以下命令下载并运行安装脚本来安装Deis Control Utility(将版本替换为用户数据中找到的编号):
/bin/bash -c 'curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.9.0'
这将安装deisctl
到当前目录,并刷新DEIS单元文件。
让我们将其链接到/usr/local/bin
,所以这将是我们的PATH
:
sudo ln -fs $(pwd)/deisctl /usr/local/bin/deisctl
现在你可以使用deisctl
命令。
安装Deis客户端
Deis客户端(也称为Deis命令行界面)允许您与Deis控制器单元交互。
更改到你想安装的目录deis
二进制文件。 通过使用以下命令下载并运行安装脚本来安装Deis客户端(将版本替换为用户数据中找到的编号):
/bin/bash -c 'curl -sSL http://deis.io/deis-cli/install.sh | sh -s 1.9.0'
这将安装deis
,这是客户到当前目录。 让我们将其链接到/usr/local/bin
,所以这将是我们的PATH
:
sudo ln -fs $(pwd)/deis /usr/local/bin/deis
安装了Deis客户端。 现在你可以使用deis
命令。
提供Deis平台
从安装了Deis工具的计算机上,我们将提供Deis平台。
确保您的SSH代理正在运行(并选择与添加到您的CoreOS Droplet的SSH密钥对应的私钥):
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa_deis
接下来,我们必须导出DEISCTL_TUNNEL
指向我们DEIS一体机,通过名称或公网IP地址。 如果您设置了“便利”DNS记录,您可以使用其中的一个作为隧道。 例如:
export DEISCTL_TUNNEL=deis-1.example.com
这是deisctl
将尝试与群集通信。 可以测试,它是通过运行正常工作deisctl list
。 如果看到单行输出,则控制实用程序正在与指定的CoreOS计算机通信。
置备平台之前,我们需要添加一个SSH密钥到DEIS,所以它可以在连接到远程主机deis run
:
deisctl config platform set sshPrivateKey=~/.ssh/id_rsa_deis
我们还需要告诉控制器我们部署应用程序的域名:
deisctl config platform set domain=example.com
运行先前的配置命令后,使用此命令配置Deis平台:
deisctl install platform
您将看到如下所示的输出,这表示运行Deis所需的单元已加载到CoreOS集群上:
Install Output:● ▴ ■
■ ● ▴ Installing Deis...
▴ ■ ●
Storage subsystem...
deis-store-metadata.service: loaded
...
Done.
Please run `deisctl start platform` to boot up Deis.
运行此命令启动Deis平台:
deisctl start platform
一旦你看到“Deis started。”,你的Deis平台就在集群上运行了!
你可以验证所有DEIS单元由运行以下命令加载和积极的:
deisctl list
所有单位应该是活动的。
安装Deis-store-admin(可选)
您可能需要安装deis-store-admin
在移动之前的组成部分。 在诊断存储问题时通常很有帮助。
要安装组件,请运行以下命令:
deisctl install store-admin
deisctl start store-admin
现在您已经完成了集群的配置,请注册一个Deis admin用户以开始使用该平台!
注册Deis用户
现在,DEIS平台运行时,我们必须注册的用户deis
命令。 的deis
命令经由路由器装置,它是在可访问的DEIS控制器通信deis.example.com
在我们的例子:
deis register http://deis.example.com
系统将提示您输入用户名 , 密码和电子邮件地址 。 提供这些项目后,您将自动登录到Deis平台。
接下来,正确的SSH密钥添加到deis
。 输入以下命令:
deis keys:add
系统将提示您从可用密钥中选择SSH密钥。 选择要添加的密钥。
登录Deis
如果以后需要登录,请使用以下命令:
deis login http://deis.example.com
系统将提示您输入先前创建的登录信息。
部署示例应用程序(可选)
Deis支持三种不同的构建应用程序的方法:
- Heroku Buildpacks
- Dockerfiles
- Docker镜像
我们将演示如何使用Heroku的Buildpack工作流程,通过部署一个应用例子,Ruby-辛纳屈 ,这是由DEIS提供。
更改到要下载示例应用程序的目录。 在所需的位置后,运行此命令克隆git存储库:
git clone https://github.com/deis/example-ruby-sinatra.git
cd example-ruby-sinatra
所述deis create
命令可以用于创建DEIS控制器上的应用程序。 立即运行:
deis create
这将创建一个应用程序,并用Deis的自动命名算法命名:
deis create output:Creating application... done, created dapper-yachting
Git remote deis added
在这种情况下,应用程序的名称是dapper-yachting
。
现在,部署应用程序,使用git push deis master
。 现在做:
git push deis master
运行命令部署后,您将看到许多行输出。 一旦完成,输出将说明应用程序已部署,它会告诉您它的自动生成的名称,以及它可以访问的地方:
git push deis master output:...
-----> Launching...
done, dapper-yachting:v2 deployed to Deis
http://dapper-yachting.example.com
To learn more, use `deis help` or visit http://deis.io
To ssh://git@deis.example.com:2222/dapper-yachting.git
* [new branch] master -> master
在本实施例中,URL是http://dapper-yachting.dev.example.com
,这是应用程序名与群集名称相结合。
您可以通过在Web浏览器中转到应用程序URL或使用以下curl命令(在您自己的URL中替换)来测试它的工作原理:
curl http://dapper-yachting.dev.example.com
您应该看到类似于以下内容的输出:
App output:Powered by Deis! Running on container ID a0d35733aad8
示例应用程序查找运行的容器ID,并输出它。 恭喜! 您的Deis平台工作!
结论
现在您有一个有效的Deis设置,尝试使用其他两个工作流部署Deis应用程序。 该dockerfile工作流程是相似的Heroku Buildpack流,因为它也使用git push
来部署,而搬运工图像的工作流程使用deis pull
来部署。 此外,DEIS提供了比在这里覆盖了更多的功能-检查他们的文档以了解更多!