序章

Deisは、独自のサーバーでのアプリケーションの展開と管理を簡素化するオープンソースのプライベートPlatform as a Service(PaaS)です。 DockerやCoreOSなどのテクノロジーを活用することで、Deisは、選択したホスティングプロバイダーで、Herokuと同様のワークフローとスケーリング機能を提供します。 Deisは、Dockerコンテナーで実行できるアプリケーションをサポートし、CoreOSをサポートする任意のプラットフォームで実行できます。

このチュートリアルでは、DigitalOceanで独自の3マシンDeisプラットフォームクラスターをセットアップする方法を示します。

注:このチュートリアルは、Deisのv1.9.0リリースに基づいています。

前提条件

このガイドを完了するには、次のものが必要です。

  • 少なくとも4GBのメモリ40GBのディスクスペースを持つ少なくとも3つの液滴を作成する機能。 これらは、DeisプラットフォームがインストールされるCoreOSマシンになります
  • ドロップレットに追加するSSHキー。これは、を使用する際の認証に使用されます。 deisctl 道具
  • Deisのビルダーに対して認証するためのSSHキー
  • クラスタマシンを指すドメイン–このチュートリアルでは example.com そのドメインとして。 別の方法は、xipを使用することです。

このチュートリアルは、DigitalOceanでCoreOSクラスターをセットアップする方法に大きく基づいています。 CoreOSクラスターの作成に関連するこのチュートリアルの手順に従うのに問題がある場合は、それを確認してください。

Deis ControlUtilityもインストールします。 deisctl、および Deisクライアントdeis、ローカルのMac OS Xコンピュータにインストールできますが、必要に応じて、Ubuntu14.04ドロップレットなどの別の場所にインストールできます。 CoreOSドロップレットの作成に使用される公開SSHキーに対応するプライベートSSHキーは、次の場所のコンピューターに存在する必要があります。 deisctl がインストールされています。

新しい検出URLを生成する

DeisプラットフォームをインストールするCoreOSクラスターを作成するには、最初に、ピアCoreOSアドレスとメタデータを格納する一意のアドレスである新しい検出URLを生成する必要があります。 これを行う最も簡単な方法は、 https://discovery.etcd.io、無料の発見サービス。 Webブラウザでhttps://discovery.etcd.io/new?size=3にアクセスするか、次のコマンドを実行して、新しい検出URLを指定します。 curl 指図:

curl -w "\n" "https://discovery.etcd.io/new?size=3"

どちらのメソッドも、次のような一意の新しい検出URLを返します(強調表示された部分は一意のトークンになります)。

https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27

結果の検出URLを使用して、新しいDeisプラットフォームクラスターを作成します。 同じ検出URLをで指定する必要があります etcd 特定のDeisプラットフォームクラスターに追加する各CoreOSサーバーのcloud-configのセクション。

検出URLができたので、それをに追加してみましょう。 cloud-config これを使用して、Deisクラスターの各マシンを作成します。

Deisユーザーデータ

Deisクラスターで使用されるCoreOSマシンのクラスターを作成するには、特別なものを使用します cloud-config Deisのメンテナによって提供されるファイル。 このファイルは、DeisGitHubリポジトリで入手できます。

Deisユーザーデータ

提供されたユーザーデータをテキストエディタで開き、検出URLが定義されている行を見つけます。 次のようになります。

        --discovery #DISCOVERY_URL

コメントを外し、強調表示されたものを置き換えます #DISCOVERY_URL 前の手順で生成した一意の検出URLを使用します。

このチュートリアルはDeis1.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'

バージョン番号をメモしてください。 インストールするときは、必ずユーザーデータのバージョンを使用してください deisctldeis 次の手順で。

必要に応じて、このユーザーデータファイルをどこかに保存できます。

CoreOSドロップレットを作成する

使用するユーザーデータができたので、CoreOSマシンを作成しましょう。 提供する方法に慣れていない場合 cloud-config ドロップレットの作成中にユーザーデータを介してファイルを作成するには、CoreOSクラスタリングチュートリアルのCloud-Configの提供方法セクションを参照してください。

次の仕様で、同じ領域に少なくとも3つのドロップレットを作成します。

  • 少なくとも4GBメモリおよび40GBディスクスペース
  • プライベートネットワークが有効になっている場合。 選択した地域でプライベートネットワークが利用できない場合は、ユーザーデータを編集し、発生するすべてのデータを置き換えます $private_ipv4$public_ipv4
  • ユーザーデータを有効にする前の手順のユーザーデータを入力します
  • LinuxディストリビューションとしてCoreOSStableチャネルを選択します
  • リストからSSHキーを選択します

使用したい場合 docl ドロップレットをプロビジョニングするための便利なツールについては、こちらの手順に従ってください。

これらのマシンを少なくとも3台作成すると、Deisプラットフォームをインストールする準備ができたCoreOSクラスターができあがります。 DNSの設定に移りましょう。

DNSを構成する

Deisが正しく機能するには、ワイルドカードDNSレコードが必要です。 使用しているトップレベルドメイン(TLD)が example.com、アプリケーションはに存在します *.example.com レベル。 たとえば、「app」と呼ばれるアプリケーションには、 app.example.com.

DigitalOceanでこれを構成する1つの方法は、DNSコントロールパネルを介してラウンドロビンDNSを設定することです。 これを行うには、ドメインに次のレコードを追加します。

  • トップレベルドメインのワイルドカードCNAMEレコード、つまり CNAMEレコードと * 名前として、そして @ 正規のホスト名として
  • 作成されたCoreOSマシンごとに、TLDを指すAレコード。 名前の付いた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 2
deis-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マシンを特定します。 [email protected] ユニット deisctl list—インストールします deisctl 次のセクションで。 次に、そのマシンのパブリックIPアドレスを決定します。 もしそれが 104.131.47.125、次のドメインを使用してDeisルーターにアクセスできます。

xip.io example
deis.104.131.47.125.xip.io

セキュリティグループ設定を適用する

DigitalOceanドロップレットでは、デフォルトでファイアウォールが有効になっていないため、いくつか追加する必要があります iptables コンポーネントが部外者にアクセスされないようにするためのルール。 Deisリポジトリは、まさにそれを実行できるここにあるスクリプトを提供します。

  1. curl -O https://raw.githubusercontent.com/deis/deis/master/contrib/util/custom-firewall.sh

スクリプトの内容を確認した後、各サーバーでスクリプトを実行します。 たとえば、前に作成したDNSエントリを使用して、次のコマンドを実行します。

  1. ssh core@deis-1.example.com 'bash -s' < custom-firewall.sh
  2. ssh core@deis-2.example.com 'bash -s' < custom-firewall.sh
  3. ssh core@deis-3.example.com 'bash -s' < custom-firewall.sh

必ずすべてのサーバーでスクリプトを実行してください。

DeisToolsをインストールする

CoreOSクラスターがセットアップされたので、DeisControlUtilityとClientをインストールします。 これらのツールは、Deisクラスターを制御するコンピューターにインストールする必要があります。 それらを別のUbuntu14.04ドロップレットにインストールする方法を示しますが、好きな場所にインストールできます。

DeisControlUtilityをインストールします

Deis Control Utilityを使用すると、Deisマシンと対話し、クラスターにDeisプラットフォームをインストールできます。

インストールするディレクトリに移動します deisctl バイナリ。 次に、次のコマンドを使用してインストールスクリプトをダウンロードして実行し、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:

  1. sudo ln -fs $(pwd)/deisctl /usr/local/bin/deisctl

今、あなたは使用することができます deisctl 指図。

Deisクライアントをインストールします

Deisコマンドラインインターフェイスとも呼ばれる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:

  1. sudo ln -fs $(pwd)/deis /usr/local/bin/deis

Deisクライアントがインストールされます。 今、あなたは使用することができます deis 指図。

Deisプラットフォームのプロビジョニング

Deisツールをインストールしたコンピューターから、Deisプラットフォームをプロビジョニングします。

SSHエージェントが実行されていることを確認します(そして、CoreOSドロップレットに追加されたSSHキーに対応する秘密キーを選択します)。

  1. eval `ssh-agent -s`
  2. ssh-add ~/.ssh/id_rsa_deis

次に、エクスポートする必要があります DEISCTL_TUNNEL 名前またはパブリックIPアドレスでDeisマシンの1つを指す。 「便利な」DNSレコードを設定する場合は、それらの1つをトンネルに使用できます。 例えば:

  1. export DEISCTL_TUNNEL=deis-1.example.com

これはどこです deisctl クラスターとの通信を試みます。 を実行することで、正しく機能していることをテストできます deisctl list. 1行の出力が表示される場合、制御ユーティリティは指定されたCoreOSマシンと通信しています。

プラットフォームをプロビジョニングする前に、SSHキーをDeisに追加して、その間にリモートホストに接続できるようにする必要があります。 deis run:

  1. deisctl config platform set sshPrivateKey=~/.ssh/id_rsa_deis

また、アプリケーションをデプロイしているドメイン名をコントローラーに通知する必要があります。

  1. 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プラットフォームを起動します。

  1. deisctl start platform

「Deisstarted。」が表示されたら、Deisプラットフォームはクラスター上で実行されています。

次のコマンドを実行して、すべてのDeisユニットがロードおよびアクティブであることを確認できます。

  1. deisctl list

すべてのユニットがアクティブになっている必要があります。

Deis-store-adminのインストール(オプション)

あなたはインストールしたいかもしれません deis-store-admin 先に進む前にコンポーネント。 ストレージの問題を診断するときに役立つことがよくあります。

コンポーネントをインストールするには、次のコマンドを実行します。

  1. deisctl install store-admin
  2. deisctl start store-admin

クラスタのプロビジョニングが完了したので、Deis管理者ユーザーを登録してプラットフォームの使用を開始します。

Deisユーザーを登録する

Deisプラットフォームが実行されているので、ユーザーをに登録する必要があります。 deis 指図。 The deis コマンドは、routerユニットを介してDeisコントローラーと通信します。 deis.example.com この例では:

  1. deis register http://deis.example.com

ユーザー名パスワード、およびメールアドレスの入力を求められます。 これらのアイテムを提供すると、Deisプラットフォームに自動的にログインします。

次に、適切なSSHキーをに追加します deis. 次のコマンドを入力します。

  1. deis keys:add

使用可能なキーからSSHキーを選択するように求められます。 追加するキーを選択します。

Deisにログインします

後でログインする必要がある場合は、次のコマンドを使用します。

  1. deis login http://deis.example.com

以前に作成したログインの入力を求められます。

サンプルアプリケーションのデプロイ(オプション)

Deisは、アプリケーションを構築する3つの異なる方法をサポートしています。

  1. Herokuビルドパック
  2. Dockerfiles
  3. Dockerイメージ

Heroku Buildpackワークフローを使用して、Deisが提供するexample-ruby-sinatraを使用してアプリケーションをデプロイする方法を示します。

サンプルアプリケーションをダウンロードするディレクトリに移動します。 目的の場所に移動したら、次のコマンドを実行してgitリポジトリのクローンを作成します。

  1. git clone https://github.com/deis/example-ruby-sinatra.git
  2. cd example-ruby-sinatra

The deis create コマンドを使用して、Deisコントローラーでアプリケーションを作成できます。 今すぐ実行:

  1. 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://[email protected]:2222/dapper-yachting.git * [new branch] master -> master

この例では、URLは http://dapper-yachting.dev.example.com、これはクラスター名と組み合わせたアプリケーション名です。

WebブラウザでアプリケーションのURLにアクセスするか、次のcurlコマンド(独自のURLに置き換えてください)を使用して、動作することをテストできます。

  1. curl http://dapper-yachting.dev.example.com

次のような出力が表示されます。

App output:
Powered by Deis! Running on container ID a0d35733aad8

サンプルアプリケーションは、実行されている場所のコンテナIDを検索し、それを出力します。 おめでとうございます! Deisプラットフォームが機能します!

結論

Deisのセットアップが機能するようになったので、他の2つのワークフローを使用してDeisアプリケーションをデプロイしてみてください。 dockerfile ワークフローは、HerokuBuildpackフローと似ています。 git push dockerimageワークフローは deis pull 展開します。 また、Deisは、ここで説明したよりもはるかに多くの機能を提供します。詳細については、ドキュメントを確認してください。