序章

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 Control Utility deisctl、および DeisクライアントdeisをローカルのMacOSXコンピューターにインストールしますが、必要に応じて、Ubuntu14.04ドロップレットなどの他の場所にインストールします。 CoreOSドロップレットの作成に使用される公開SSHキーに対応する秘密SSHキーは、deisctlがインストールされているコンピューターに存在する必要があります。

新しい検出URLを生成する

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

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

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

https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27

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

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

Deisユーザーデータ

Deisクラスターで使用されるCoreOSマシンのクラスターを作成するには、Deisのメンテナーから提供された特別なcloud-configファイルを使用します。 このファイルは、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'

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

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

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レコード。 ドロップレットのパブリックIPアドレスを持つ@という名前のAレコード

これで、ゾーンファイルに次のエントリが含まれるようになります:(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プラットフォームをインストールした後、[email protected]ユニットをdeisctl listで実行しているCoreOSマシンを特定します。次のセクションで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 [email protected]deis-1.example.com 'bash -s' < custom-firewall.sh
  2. ssh [email protected]deis-2.example.com 'bash -s' < custom-firewall.sh
  3. ssh [email protected]deis-3.example.com 'bash -s' < custom-firewall.sh

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

Deisツールをインストールする

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コマンドでユーザーを登録する必要があります。 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

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 ワークフローは、git pushを使用してデプロイするのに対し、 docker imageワークフローはdeis pullを使用するという点で、HerokuBuildpackフローに似ています。配備。 また、Deisは、ここで説明したよりもはるかに多くの機能を提供します。詳細については、ドキュメントを確認してください。