azkを使用してRailsアプリをデプロイする方法

azkの記事

前書き

azkは、アプリケーション環境を調整するために使用できる軽量のオープンソースツールです。

ローカルワークステーションで実行されているアプリケーションを取得したことがありますか。実稼働サーバーに展開するときにセットアップが完全に異なることを確認するだけです。

この記事では、現在http://run.azk.io/ [これらのアプリケーション]に実装されているが、さらに多くに適用できるazkと呼ばれるオーケストレーションツールを紹介します。 azk対応のアプリケーションをデプロイすると、最小限の手間でローカルおよび運用環境で実行できます。

azkを使用すると、アプリケーションだけでなく、必要なOS、言語、フレームワーク、データベース、その他の依存関係(それ以外の場合は労働集約的で反復的で長く、エラーが発生しやすいタスク)を含むすべての依存関係をすばやく簡単に実行できます。ローカル環境またはサーバーのどちらにいても。

この記事の目的は、例としてhttps://github.com/run-project/stringer[Stringer]というシンプルなRailsアプリを使用して、azkがオーケストレーションツールとしてどのように機能するかを示すことです。

azkは、オーケストレーションを容易にするために、舞台裏で多くの手順を処理します。 そのため、このチュートリアルには、サンプルアプリをセットアップするために厳密に必要ではないが、azkが何をしているのかを説明するいくつかのオプションのステップが含まれています。

ローカルコンピューターのソースコードからアプリを実行し、サーバーに展開し、ローカルで変更を加え、変更を展開し、ロールバックを実演します。

この記事を完了すると、開発/展開ワークフローのオーケストレーションツールとしてazkがどのように機能するかをよく理解できるはずです。

使い方

まず、azkはローカルコンピューター上のアプリケーションの環境を調整します。 アプリケーションをローカルで実行すると、azkはDropletへの展開も自動化します。

azkは常にソースコードからアプリケーションを実行するため、アプリケーションをローカルで(必要に応じて)変更し、特別な追加手順なしで展開またはロールバックすることもできます。

azkは_containers_を使用して環境を分離するため、ローカルコンピューターでアプリケーションを実行しても安全です。 これは、ゼロから開始された新しいプロジェクトと既存のコードの両方で機能します。

カスタムアプリケーションでazkを使用する

azkで動作するように事前設定されたアプリケーションの現在のリストを例として使用し、追加の作業を行うことで、azkで動作するようにプロジェクトを設定できます。

これを行うには、プロジェクトにhttp://docs.azk.io/en/azkfilejs/[Azkfileを追加]します。

これは、アプリケーションの実行に必要な要素をリストし、それらの関係(OS、言語、データベースなど)を要約する単純なマニフェストファイルです。

プロジェクトに `+ Azkfile +`を追加する利点は次のとおりです。

  • azkを使用して、ローカルおよび展開の両方でプロジェクトの環境設定を自動化します

  • あなたのアプリをデプロイしたい他の人々はazkでそれを行うことができます

`+ Azkfile +`の作成はこのチュートリアルの範囲外ですが、azkのドキュメントをチェックしてhttp://docs.azk.io/en/azkfilejs/[Azkfileの作成方法]およびhttp:// docs.azk.io/en/run-project-button/[[Run Project GitHub]ボタンをコードに追加]。

前提条件

このガイドに従うには、ローカル環境でこれらのオペレーティングシステム(64ビット)を実行しているローカルコンピューターが必要です。

  • Mac OS X 10.6(Snow Leopard)以降

  • Ubuntu 12.04、14.04または15.10

  • Fedora 21または22

また、 `+ git +`コミットを行える必要があります。

  • ローカルコンピューターにGitがインストールされている必要があります。 Linuxの手順については、https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-14-04 [Gitの使用に関するこのシリーズ]を参照するか、https:// git- scm.com/downloads[Gitダウンロードページ]

  • チュートリアルを開始する前に、推奨コマンド `+ git config --global user.email" [email protected] "`および ` git config --global user.name" Your Name "+`を実行したことを確認してください。 Gitの詳細については、前のリンクを参照してください

アクティブなドロップレットを持つことは、このチュートリアルの要件ではないことに注意してください。 azkはDigitalOceanのAPIを使用して作成します。

Linuxユーザー:Dockerのインストール

Linux(UbuntuまたはFedora)を使用している場合、コンテナーソフトウェアとしてhttps://www.docker.com/[Docker] 1.8.1以降をインストールする必要があります。

Dockerをインストールする1つの方法は、Dockerのインストールスクリプトを実行することです。 (一般的に、スクリプトを実行する前に何をするかを理解してください):

wget -nv  -O- -t 2 -T 10 | bash

LinuxへのDockerのインストールの詳細については、公式ドキュメントで入手可能なhttp://docs.docker.com/engine/installation/[instructions]、またはDigitalOceanのhttps://www.digitalocean.com/communityを確認してください。 / tutorials / how-to-install-and-use-docker-getting-started [Dockerインストールの記事]。

Mac OS Xユーザー:VirtualBoxのインストール

コンテナソフトウェアとしてhttps://www.virtualbox.org/[VirtualBox] 4.3.6以降が必要です。

VirtualBoxをインストールするには、公式ダウンロードページからhttps://www.virtualbox.org/wiki/Downloads [適切なVirtualboxインストールパッケージをダウンロード]。

ステップ1-azkをローカルにインストールする

プロジェクトのインストールスクリプトを使用してazkをインストールします。 システムでスクリプトを実行する前に、スクリプトの動作を理解してください。

古いバージョンのazkが既にインストールされている場合は、そのインストールスクリプトを使用してazkを更新できます。

または、サポートされているオペレーティングシステムのhttp://docs.azk.io/en/installation/ [パッケージインストール手順]を確認してください。

Linuxにazkをインストールする

Linux(UbuntuまたはFedora)を使用している場合は、ターミナルでこのコマンドを実行して、プロジェクトのスクリプトを使用してazkをインストールします。 システム上で実行する前にスクリプトを検査することをお勧めします:

wget -nv http://azk.io/install.sh -O- -t 2 -T 10 | bash

インストールが完了したら、ログアウトしてから再度ログインし、すべての変更を有効にします。

ログアウトする必要があるのは、インストールプロセス中にユーザーが* docker グループに追加されるためです。 これは、 root *ユーザーでなくてもDockerを使用できるようにするために必要な手順です。 これを有効にするには、現在のセッションを終了する必要があります。

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のドキュメントに記載されているOSのhttp://docs.docker.com/engine/installation/ [特定のインストール手順に従ってください]。

適切なバージョンのDockerがインストールされていることを確認したら、このコマンドを* sudoユーザー*として実行して、ユーザーが* docker *グループに属していることを確認します。

id -Gn

グループのリストに* docker が含まれている場合、それは正しく構成されていることを意味します。 それ以外の場合、それらの間に docker *という単語が表示されない場合は、次のコマンドを実行してユーザーをグループに追加します。

sudo usermod -aG docker

その後、ログアウトして再度ログインします。

`+ id -Gn +`コマンドをもう一度チェックして、グループのリストに* docker *が含まれていることを確認してください。

これらの手順では、Dockerを正常に実行するには不十分な場合(例: それでも「+ docker version +」コマンドを正常に実行できない場合は、http://docs.docker.com/engine/installation/ [Dockerのインストール手順を参照]をご覧ください。

  • Mac OS X用のazkインストールのトラブルシューティング*

VirtualBoxがインストールされていることを確認してください。

which VBoxManage

これがファイルパス( `+ / usr / local / bin / VBoxManage +`など)を返す場合は、先に進んでください。 それ以外の場合、「見つかりません」というメッセージが返される場合、VirtualBoxがインストールされていないことを意味します。

この場合、公式Webサイトからhttps://www.virtualbox.org/wiki/Downloads[VirtualBoxインストールパッケージをダウンロードしてインストール]。

(オプション)ステップ3-デモアプリケーション、ストリンガーについて学ぶ

このガイドのデモアプリケーションとしてhttps://github.com/swanson/stringer[Stringer]を選択しました。これは、azkで動作するように既に構成されているシンプルなアプリケーションだからです。

これは、明確に定義されたユースケースを備えたRailsアプリです。ベアボーンRSSリーダーです。

(オプション)ステップ4-azkを使用するためのカスタムアプリケーションの構成

このガイドの主な焦点は、azkの環境の詳細が既に記述されているアプリケーションでazkがどのように機能するかを示すことですが、長期的には、ツールを使用してアプリケーションを展開できる場合に最も役立ちます。

そのため、https://github.com/run-project/stringer [ストリンガーのこの分岐バージョン]とhttps://github.com/swanson/stringer [プライマリストリンガーリポジトリ]の比較をご覧ください。

azkバージョンには、ストリンガーのオリジナルバージョンに2つの追加のみがあります。

  • azkの環境情報を提供する + Azkfile +

  • azk *プロジェクトの実行*ボタン

Azkfileおよびhttp://docs.azk.io/en/run-projectにあるazkのドキュメントから、azkを他のアプリケーションと連携させる方法について詳しく知ることができます。 -button / [プロジェクトの実行ボタン]。

次に、azkに優しいアプリケーションがGitHubでどのように見えるかを見ていきます。

(オプション)ステップ5-GitHubでazkのプロジェクトの実行ボタンを使用する

GitHubプロジェクトのazkのベストプラクティスの一部は、azkでそのプロジェクトを実行する方法を非常に明確にすることです。 そのため、プロジェクトのreadmeの途中でazkコマンドを表示する代わりに、azkを使用するプロジェクトでは、* Run Project *ボタンを使用して、azkコマンドを視覚的に分離できます。

ストリンガーはこのボタンを使用します。

azkの分岐バージョンのStringerのhttps://github.com/run-project/stringer#running-locally[Running Locally]セクションにアクセスします。

[プロジェクトの実行]ボタンをクリックします。

image:https://assets.digitalocean.com/articles/ask/UGWmrZM.png [Stringerプロジェクトの[プロジェクトの実行]ボタン]

[プロジェクトの実行]ボタンを初めてクリックすると、何が起こっているかについての簡単な説明が表示されます。 次に進む準備ができたら、説明の下部にある[* OK、閉じる]をクリックするだけです。

image:https://assets.digitalocean.com/articles/ask/LqWwheV.png ['azkとは?'メッセージ]

次に、Stringerプロジェクトのazkコマンドを含むページに移動します。

azk start -o run-project/stringer

image:https://assets.digitalocean.com/articles/ask/tmDRhbw.png [azkを使用してStringerアプリを実行するコマンド:azk start -o run-project / stringer]

いつでも右上隅の[これは何ですか?]リンクをクリックして、もう一度説明を見ることができます。

画面の中央には、* curl wget 、および azk の3つのタブがあるコマンドボックスがあります。 既にazkがインストールされているため、 azk *を使用できます。

これは、実際にストリンガーを実行するために次のステップで使用するコマンドです。

ステップ6-ストリンガーをローカルで実行する

このセクションでは、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 _agent_を開始するかどうかを尋ねられます。

出力

? The agent is not running, would you like to start it? ()

_agent_は、Docker(Linux)またはVirtualBox VM(Mac OS X)を構成するazkコンポーネントです。

`+ ENTER +`を押して「はい」と答えます(デフォルトオプション)。

エージェントを初めて実行するとき、azkはセットアップを実行します。

セットアップは、サフィックス `+ dev.azk.io `で終わるアドレスを解決するDNS設定を含むファイル ` / etc / resolver / dev.azk.io +`の作成など、舞台裏で多くのことを行います。

azkは、アプリケーションを実行するときにこの接尾辞を使用して、手動で `+ http:// localhost:PORT_NUMBER +`アドレスを構成する代わりに、人間が読み取れるアドレスを適用します。 これにより、異なるアプリケーション間でのポートの競合も回避されます。

(基本的には、ドメイン名をローカルにリダイレクトするために `+ / etc / hosts +`ファイルを編集するのと同じことを行います。)

次のようなメッセージが表示された場合:

出力

? Enter the vm ip: (192.168.50.4)

アプリを実行するローカルIPアドレスを入力できます。 ほとんどの場合、デフォルトで十分です。 受け入れるには、単に「+ ENTER」を押します。

azkエージェントのセットアップを完了するには、* sudo *パスワードを求められます(Mac OS Xユーザーの場合、これは管理者パスワードです)。

これでazkが起動します。 Azkfileにリストされている要素を(Dockerイメージの形式で)ダウンロードするazkが表示されます。

これらの画像は、最初のダウンロードに数分かかる場合があります(約10分以内)。

azkがセットアップを完了するとすぐに、デフォルトのブラウザーはローカルコンピューターで実行されているStringerの初期画面を自動的に読み込みます。

image:https://assets.digitalocean.com/articles/ask/D6Tf6GF.png [ストリンガーが稼働中]

image:https://assets.digitalocean.com/articles/ask/ARJCeDT.png [Stringerアプリへのアクセス]

ご覧のとおり、ローカルDNSを使用しているため、アプリは `+ http:// stringer.dev.azk.io `で表示されます。 ` http:// stringer.dev.azk.io +`にアクセスして、手動でアプリケーションにアクセスすることもできます。

パスワードを設定してアプリケーションの使用を開始したい場合は可能ですが、このチュートリアルでは必要ありません。 azkがStringerをローカルで実行できることを確認したかっただけです。

ローカルコンピューターでStringerが実行されたので、コンピューターからDropletに展開できます。

ステップ7-DigitalOcean APIトークンの取得

azkからDropletをデプロイする前に、APIトークンが必要です。 トークンは、アカウントに新しいDigitalOceanサーバーをデプロイするためのazk許可を与えます。

このトークンを使用してこの環境からazkを初めて実行すると、新しい1 GB Ubuntu 14.04ドロップレットが展開されます。 同じローカル環境からの後続の展開では、同じ単一のドロップレットが使用されます。

https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2#how-to-generate-a-personal-access-token [生成方法]の指示に従ってください。リンクされたチュートリアルの[パーソナルアクセストークン]セクション。 生成されたトークンには、*読み取りおよび書き込み権限*が必要です。

以下の例のように、トークンの64個の16進文字をコピーします。

APIトークンの例

a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726

トークン文字列は一度しか表示されないため、安全な場所にメモしてください。 (このトークンが危険にさらされると、アカウントへのアクセスに使用される可能性があるため、非公開にしてください。)

以下の手順については、トークンの例を実際のトークンに置き換えてください。

ストリンガーのフォルダーに移動します。

cd ~/stringer

`+ .env +`を呼び出すファイルにパーソナルアクセストークンを保存します。 これを行うには、次のコマンドを実行してファイルを作成します(トークンを置き換えることを忘れないでください)。

echo "DEPLOY_API_TOKEN=" >> .env

`+ .env +`ファイルの内容は次のようになります。

env
DEPLOY_API_TOKEN=

(オプション)ステップ8-SSHキーについて学習する

azkのSSHキーを設定するために何もする必要はありませんが、azkがどのように使用するかを知っておくと便利です。

azkはSSHキーを使用してドロップレットにアクセスします。 既にSSHキーを持っている場合、azkはそのキーを使用します。

コンピューターにSSHキーがあるかどうかを確認するには、次を実行します。

ls ~/.ssh/*.pub

「見つかりません」というメッセージが返された場合は、コンピューターにSSHキーがありません。

その場合、azkは新しいSSHキーを自動的に作成し、コンピューターから新しい各アプリケーションを展開するためだけに使用します。

azkは独自の予約済みストレージにキーを作成し、 `+〜/ .ssh +`ディレクトリを変更しません。

生成された公開キーを確認する場合は、最初のアプリケーションの展開後に次のコマンドを実行できます。

azk deploy shell -c "cat /azk/deploy/.config/ssh/*.pub"

一般的なSSHキーの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys—​2 [SSHキーに関するこのチュートリアルをご覧ください]。

ステップ9-azkを使用した展開

デフォルトでは、azkはUbuntu 14.04を実行する1 GBのDigitalOcean Dropletを作成して、アプリケーションをデプロイします。

まず、Stringer(またはアプリケーション)のディレクトリに移動します:

cd ~/stringer

次に、展開を開始するには、次を実行します。

azk deploy

コマンド「+ azk deploy +」は、azkを使用してアプリケーションを調整するときに最も頻繁に実行するコマンドです。

azkがすべての作業を行うため、最初の展開にはしばらく(約10分)かかります。

具体的には、azkは次のことを行う必要があります。

  • サポート要素のダウンロード(展開用のDockerイメージ)

  • ドロップレットを作成して構成する

  • アプリケーションのソースコードをDropletにアップロードします

  • アプリケーションを実行する

長い手順が既に完了するため、コンピューターからこのアプリケーションを新しく展開するたびに、はるかに高速になります(約30秒以下)。

SSHキーがパスワードで保護されている場合、展開プロセス中に数回必要になります。 SSHキーのパスワードを入力し、次のようなメッセージが表示されるたびに「+ ENTER」を押すだけです。

出力

Enter passphrase for ~/.ssh/id_rsa:

端末の出力には、*リモート*システムで実行されているかなりの数のアクションが表示され、成功したデプロイメントメッセージ「+ Appがhttp:// +で正常にデプロイされました」で終了します。

image:https://assets.digitalocean.com/articles/ask/448PDqn.png [Stringerは正常にデプロイされました]

サーバーでホストされているアプリケーションを表示するには、「+ http:// +」にアクセスします。

image:https://assets.digitalocean.com/articles/ask/peQgdYG.png [ドロップレットで実行されているストリンガーへのアクセス]

これからは、コンピューター上のアプリケーションのコードを変更し、ローカルでテストし、 `+ azk deploy +`コマンドを使用して変更をDropletにデプロイできます。

ステップ10-ストリンガーの変更

アプリケーション開発、カスタマイズ、またはバージョン管理にazkを使用するのがいかに簡単かを示すために、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>

 <hr />
 . . .
</div>

テキストエディターを保存して終了します。 nanoを使用している場合は、「+ CTRL + O 」を押して保存し、「 CTRL + X +」を押して終了します。

Stringerはデフォルトで実稼働モードで実行されるように設定されているため、ブラウザを更新するだけでは変更を有効にできません。 azkからアプリケーションを再起動します。

azk restart stringer -o

新しいバージョンのStringerで新しいブラウザタブが開きます。 デフォルトのテキストのすぐ下*ユーザーは1人だけです。。これは azkでも簡単です*

ステップ11-ストリンガーの再デプロイ

次に、変更をバージョン管理システムにコミットして、展開できるようにします。

git add app/views/first_run/password.erb
git commit .

テキストエディタが表示されます(ほとんどの場合、nanoまたはvim)。

`+ It is easy with azk +`のようなコミットメッセージを入力します。

このコミットメッセージはazk内のアプリケーションのバージョンにラベルを付けるために使用されるため、後でロールバックする必要がある場合にメモリをジョグするものを選択します。

コミットメッセージを保存して閉じます。

変更をデプロイし、Dropletで実行されているアプリケーションを更新するには、次を実行します。

azk deploy

完了したら、ブラウザからDropletのIPアドレスにアクセスします(例: + http:// +)。 ここにも新しい行が表示されるはずです* azkを使えば簡単です!*

image:https://assets.digitalocean.com/articles/ask/tOmAsIH.png [Dropletで実行されるストリンガーの新しいバージョン]

この新しい展開により、Dropletにアプリケーションの新しいバージョンが作成されます。 アプリケーションのすべてのバージョンが保存されるため、以前のバージョンにロールバックしてから再度転送できます。

ステップ12-前のバージョンへのロールバック

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

引数「+」は、「 azk deploy versions 」コマンドの出力で表示されるバージョン番号です。 引数なしでコマンドを実行する場合(例: ` azk deploy rollback +`)、アプリケーションは現在のバージョンの直前のバージョンにロールバックされます。

ロールバックが完了したことを確認するには、サーバーのバージョンを表示しているブラウザータブを更新するだけです。

これで、カスタムテキストなしのアプリケーションが表示されるはずです。元の展開と同じです。

再度ロールフォワードしたい場合は、最新バージョンを選択できます。

azk deploy rollback

これらのバージョンのラベルは、前のステップの「+ git commit +」メッセージから取得されます。

結論

このガイドでは、簡単なRailsアプリを使用して、azkがアプリケーション環境のセットアップタスクを自動化する方法を示しました。 これにより、同じアプリケーションを複数の環境に簡単に展開できます。

azkの展開プロセスが気に入ったら、それを自分のプロジェクトに使用するか、別のオープンソースプロジェクトのフォークに `+ Azkfile +`を追加することを検討してください。 http://docs.azk.io/en/azkfilejs/ [ここでAzkfileを作成する]およびhttp://docs.azk.io/en/run-project-button/ [プロジェクトの実行GitHubボタンを追加する方法]について学ぶここに]。

または、このhttp://run.azk.io/ [デモギャラリー]で、azkで実行するためのレッグワークが既に完了している他のアプリケーションを確認できます。

`+ rollback `と ` versions +`に加えて、azkは追加のアクション(SSHを介してDropletのシェルにアクセスするなど)を実行できる他の補助サブコマンドをサポートしています。

Related