Azkを使用してRailsアプリをデプロイする方法
- azkの記事
序章
azk は、アプリケーション環境の調整に使用できる軽量のオープンソースツールです。
ローカルワークステーションでアプリケーションを実行したことがありますが、実稼働サーバーにデプロイしたときにセットアップが完全に異なることがわかりましたか?
この記事では、現在これらのアプリケーションに実装されているが、さらに多くのアプリケーションに適用できるazkと呼ばれるオーケストレーションツールを紹介します。 azk対応アプリケーションをデプロイすると、最小限の手間でローカルおよびの本番環境で実行できます。
azkを使用すると、アプリケーションだけでなく、必要なOS、言語、フレームワーク、データベース、その他の依存関係(それ以外の場合は手間がかかり、反復的で、時間がかかり、エラーが発生しやすいタスク)を含む、すべての依存関係をすばやく簡単に実行できます。ローカル環境にいるのかサーバーにいるのか。
この記事の目的は、例として Stringer と呼ばれる単純なRailsアプリを使用して、azkがオーケストレーションツールとしてどのように機能するかを示すことです。
azkは、オーケストレーションを容易にするために、舞台裏で多くのステップを処理します。 したがって、このチュートリアルには、サンプルアプリをセットアップするために厳密に必要ではないが、azkが何をしているのかを説明するいくつかのオプションの手順が含まれています。
ローカルコンピューターのソースコードからアプリを実行し、サーバーにデプロイし、ローカルで変更を加え、変更をデプロイして、ロールバックをデモンストレーションします。
この記事を完了すると、azkが開発/デプロイメントワークフローのオーケストレーションツールとしてどのように機能するかを理解できるはずです。
使い方
まず、azkはローカルコンピューター上のアプリケーションの環境を調整します。 アプリケーションをローカルで実行すると、azkはDropletへの展開も自動化します。
azkは常にソースコードからアプリケーションを実行するため、(必要に応じて)アプリケーションをローカルでいじってから、特別な追加手順なしで、デプロイまたはロールバックすることもできます。
azkは、 container を使用して環境を分離するため、ローカルコンピューターでアプリケーションを安全に実行できます。 これは、最初から開始された新しいプロジェクトと既存のコードの両方で機能します。
カスタムアプリケーションでのazkの使用
例としてazkで動作するように事前構成されたアプリケーションの現在のリストを使用すると、いくつかの追加作業を使用して、azkで動作するように任意のプロジェクトを構成できます。
これを行うには、プロジェクトにAzkfileを追加します。
これは、アプリケーションの実行に必要な要素をリストし、それらの関係(OS、言語、データベースなど)を要約した単純なマニフェストファイルです。
プロジェクトにAzkfile
を追加する利点は次のとおりです。
- azkを使用して、ローカルとデプロイメントの両方でプロジェクトの環境セットアップを自動化します
- あなたのアプリを展開したい他の人々はazkでそれを行うことができます
Azkfile
の作成はこのチュートリアルの範囲を超えていますが、azkのドキュメントを確認して、 Azkfile の作成方法と、プロジェクトの実行GitHubボタンを追加する方法を学ぶことができます。あなたのコードに。
前提条件
このガイドに従うには、ローカル環境用にこれらのオペレーティングシステム(64ビット)のいずれかを実行しているローカルコンピューターが必要です。
- Mac OS X 10.6(Snow Leopard)以降
- Ubuntu 12.04、14.04または15.10
- Fedora21または22
また、git
をコミットできる必要があります。
- ローカルコンピューターにGitがインストールされている必要があります。 Linuxの手順についてはGitの使用に関するこのシリーズを参照するか、Gitダウンロードページにアクセスしてください。
- チュートリアルを開始する前に、推奨されるコマンド
git config --global user.email "[email protected]"
およびgit config --global user.name "Your Name"
を実行したことを確認してください。 Gitの詳細については、前のリンクを参照してください
このチュートリアルでは、アクティブなドロップレットを持つことは必須ではないことに注意してください。 azkは、DigitalOceanのAPIを使用して作成します。
ドロップレットの展開にはお金がかかります! このチュートリアルでは、デフォルトで1GBのドロップレットを1つデプロイします。
Linuxユーザー:Dockerのインストール
Linux(UbuntuまたはFedora)を使用している場合は、コンテナーソフトウェアとして Docker1.8.1以降をインストールする必要があります。
Dockerをインストールする1つの方法は、Dockerのインストールスクリプトを実行することです。 (一般に、スクリプトを実行する前に、スクリプトの動作を理解してください):
wget -nv https://get.docker.com/ -O- -t 2 -T 10 | bash
LinuxへのDockerのインストールについて詳しく知りたい場合は、公式ドキュメントにある手順、またはDigitalOceanのDockerインストール記事を確認してください。
Mac OS Xユーザー:VirtualBoxのインストール
コンテナソフトウェアとしてVirtualBox4.3.6以降が必要です。
VirtualBoxをインストールするには、公式ダウンロードページから適切なVirtualboxインストールパッケージをダウンロードします。
ステップ1—azkをローカルにインストールする
プロジェクトのインストールスクリプトを使用してazkをインストールします。 システムでスクリプトを実行する前に、スクリプトの機能を理解してください。
古いバージョンのazkがすでにインストールされている場合は、そのインストールスクリプトを使用してazkを更新できます。
または、サポートされているオペレーティングシステムのパッケージのインストール手順を確認してください。
Linuxへのazkのインストール
Linux(UbuntuまたはFedora)を使用している場合は、ターミナルでこのコマンドを実行し、プロジェクトのスクリプトを使用してazkをインストールします。 システムでスクリプトを実行する前に、スクリプトを確認することをお勧めします。
wget -nv http://azk.io/install.sh -O- -t 2 -T 10 | bash
インストールが完了したら、ログアウトしてから再度ログインし、すべての変更を有効にします。
ログアウトする必要がある理由は、インストールプロセス中に、ユーザーがdockerグループに追加されるためです。 これは、rootユーザーでなくてもDockerを使用できるようにするために必要な手順です。 これを有効にするには、現在のセッションを終了する必要があります。
Dockerグループについて詳しく知りたい場合は、Dockerの公式ドキュメントを確認してください。
MacOSXへの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の特定のインストール手順に従ってください。
適切なバージョンのDockerがインストールされていることを確認したら、 sudoユーザーとして次のコマンドを実行して、ユーザーがdockerグループに属していることを確認します。
id -Gn
グループのリストにdockerが含まれている場合は、正しく構成されていることを意味します。 それ以外の場合、 docker という単語が含まれていない場合は、次のコマンドを実行してユーザーをグループに追加します。
sudo usermod -aG docker $USER
次に、ログアウトして再度ログインします。
id -Gn
コマンドをもう一度チェックして、dockerを含むグループのリストが返されることを確認します。
これらの手順では、Dockerを適切に実行するのに十分ではなかった場合(例: それでもdocker version
コマンドを正常に実行できない場合は、Dockerのインストール手順を参照してください。
MacOSXのazkインストールのトラブルシューティング
VirtualBoxがインストールされていることを確認してください。
which VBoxManage
これがファイルパス(/usr/local/bin/VBoxManage
など)を返す場合は、続行できます。 それ以外の場合、「見つかりません」というメッセージが返される場合は、VirtualBoxがインストールされていないことを意味します。
この場合、VirtualBoxインストールパッケージを公式Webサイトからダウンロードしてインストールします。
(オプション)ステップ3 —デモアプリケーション、ストリンガーについて学ぶ
このガイドのデモアプリケーションとしてStringerを選択しました。これは、azkで動作するようにすでに構成されている単純なアプリケーションだからです。
これは、明確に定義されたユースケースを備えたRailsアプリです。必要最低限のRSSリーダーです。
ストリンガーの詳細:
一部のニュースサイトでは、RSSフィードの形式でコンテンツを提供しています。 これは、発行者がデータを自動的にシンジケートできるようにする標準のXMLファイル形式です。 RSSリーダーは、RSSコンテンツを購読および表示するために使用されるプログラムです。 WebサイトのRSSフィードを購読すると、ユーザーがWebサイトで新しいコンテンツを手動で確認する必要がなくなります。 ユーザーは、サブスクライブされたフィードのリストを作成し、RSSリーダーでコンテンツを利用できます(通常は、時系列に並べられたリストの形式で)。
(オプション)ステップ4 —azkを使用するようにカスタムアプリケーションを構成する
このガイドの主な焦点は、azkの環境の詳細がすでに記述されているアプリケーションでazkがどのように機能するかを示すことですが、長期的には、ツールを使用して任意のアプリケーションをデプロイできる場合に最も役立ちます。
それで、このフォークされたバージョンのStringerがプライマリStringerリポジトリとどのように比較されるかを見てください。
azkバージョンには、Stringerの元のバージョンに2つだけ追加されています。
Azkfile
、azkの環境情報を提供します- azkプロジェクトの実行ボタン
Azkfileおよびプロジェクトの実行ボタンにあるazkのドキュメントから、azkを他のアプリケーションで動作させる方法について詳しく知ることができます。
次に、azk対応のアプリケーションがGitHubでどのように表示されるかを確認します。
(オプション)ステップ5 —GitHubでazkの[プロジェクトの実行]ボタンを使用する
GitHubプロジェクトに関するazkのベストプラクティスの一部は、azkを使用してそのプロジェクトを実行する方法を非常に明確にすることです。 したがって、プロジェクトのreadmeの途中にazkコマンドを表示するだけでなく、azkを使用するプロジェクトでは、プロジェクトの実行ボタンを使用してazkコマンドを視覚的に分離できます。
ストリンガーはこのボタンを使用します。
ストリンガーのazkのフォークバージョンのRunningLocallyセクションにアクセスしてください。
プロジェクトの実行ボタンをクリックします。
プロジェクトの実行ボタンを初めてクリックすると、何が起こっているのかについての簡単な説明が表示されます。 先に進む準備ができたら、説明の下部にある OK、DISMISSをクリックするだけです。
次に、Stringerプロジェクトのazkコマンドを含むページに移動します。
azk start -o run-project/stringer
右上隅にあるこれは何ですか?リンクをクリックすると、いつでも説明をもう一度見ることができます。
画面の中央には、 curl 、 wget 、azkの3つのタブがあるコマンドボックスがあります。 すでにazkがインストールされているので、azkのものを使用できます。
これは、Stringerを実際に実行するために次のステップで使用するコマンドです。
ステップ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? (Y/n)
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が起動します。 azkがAzkfileにリストされている要素を(Dockerイメージの形式で)ダウンロードしているのがわかります。
これらの画像は、最初にダウンロードするのに数分かかる場合があります(約10分以内)。
azkがセットアップを完了するとすぐに、デフォルトのブラウザがローカルコンピュータで実行されているStringerの初期画面を自動的にロードします。
ご覧のとおり、ローカルDNSを使用しているため、アプリはhttp://stringer.dev.azk.io
に表示されます。 http://stringer.dev.azk.io
に移動して、アプリケーションに手動でアクセスすることもできます。
パスワードを設定してアプリケーションの使用を開始したい場合は可能ですが、このチュートリアルでは必要ありません。 azkがStringerをローカルで実行できることを確認したかっただけです。
ストリンガーをローカルコンピューターで実行しているので、コンピューターからドロップレットに展開できます。
ステップ7—DigitalOceanAPIトークンを取得する
azkからDropletをデプロイする前に、APIトークンが必要です。 トークンは、アカウントに新しいDigitalOceanサーバーをデプロイするためのazk権限を付与します。
このトークンを使用してこの環境から初めてazkを実行すると、新しい1GBのUbuntu14.04ドロップレットがデプロイされます。 同じローカル環境からの後続の展開では、同じ単一のドロップレットが使用されます。
リンクされたチュートリアルのパーソナルアクセストークンの生成方法セクションの指示に従ってください。 生成されたトークンには、読み取りおよび書き込み権限が必要です。
以下の例のように、トークンの64個の16進文字をコピーします。
APIトークンの例
a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726
トークン文字列は1回だけ表示されるので、安全な場所に書き留めておきます。 (このトークンが危険にさらされた場合、アカウントへのアクセスに使用される可能性があるため、非公開にしてください。)
以下の手順では、サンプルトークンを実際のトークンに置き換えることを忘れないでください。
ストリンガーのフォルダーに移動します。
cd ~/stringer
パーソナルアクセストークンを.env
というファイルに保存します。 これを行うには、次のコマンドを実行してファイルを作成します(トークンを置き換えることを忘れないでください)。
echo "DEPLOY_API_TOKEN=a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726" >> .env
.env
ファイルの内容は次のようになります。
.env
DEPLOY_API_TOKEN=a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726
(オプション)ステップ8 —SSHキーについて学習する
azkのSSHキーを設定するために何もする必要はありませんが、azkがSSHキーをどのように使用するかを知っておくと便利です。
azkはSSHキーを使用してドロップレットにアクセスします。 すでにSSHキーをお持ちの場合、azkはそれを使用します。
コンピューターにSSHキーがあるかどうかを確認するには、次のコマンドを実行します。
ls ~/.ssh/*.pub
「見つかりません」というメッセージが返される場合は、コンピュータにSSHキーがありません。
その場合、azkは新しいSSHキーを自動的に作成し、コンピューターから新しい各アプリケーションをデプロイするためだけに使用します。
azkは、独自の予約済みストレージにキーを作成し、~/.ssh
ディレクトリに変更を加えません。
生成された公開鍵を確認する場合は、最初のアプリケーション展開後に次のコマンドを実行できます。
azk deploy shell -c "cat /azk/deploy/.config/ssh/*.pub"
一般的なSSHキーの詳細については、SSHキーに関するこのチュートリアルをお読みください。
ステップ9—azkを使用したデプロイ
デフォルトでは、azkはUbuntu14.04を実行する1GBのDigitalOceanDropletを作成して、アプリケーションをデプロイします。
異なる仕様のドロップレットをデプロイする場合は、Azkfile.js
ファイルのdeploy
システムのenvs
プロパティで設定を変更できます。 追加の手順については、azkデプロイメントドキュメントを参照してください。
まず、Stringer(またはアプリケーション)のディレクトリに移動します。
cd ~/stringer
次に、展開を開始するには、次のコマンドを実行します。
azk deploy
コマンドazk deploy
は、azkを使用してアプリケーションをオーケストレーションするときに最も頻繁に実行するコマンドです。
azkがすべての作業を行うため、最初の展開にはしばらく時間がかかる場合があります(約10分)。
具体的には、azkは次のことを行う必要があります。
- サポート要素のダウンロード(デプロイ用のDockerイメージ)
- ドロップレットを作成して構成します
- アプリケーションのソースコードをドロップレットにアップロードします
- アプリケーションを実行する
より長いステップがすでに完了しているため、コンピューターからのこのアプリケーションのすべての新しい展開は、はるかに高速になります(約30秒以下)。
SSHキーがパスワードで保護されている場合は、展開プロセス中に数回必要になります。 SSHキーのパスワードを入力し、次のようなメッセージが表示されるたびにENTER
を押してください。
出力
Enter passphrase for ~/.ssh/id_rsa:
ターミナル出力には、 remote システムで実行されているかなりの数のアクションが表示され、正常な展開メッセージApp successfully deployed at http://your_server_ip
で終了します。
http://your_server_ip
にアクセスして、サーバーでホストされているアプリケーションを表示します。
今後は、azk deploy
コマンドを使用して、コンピューター上のアプリケーションのコードを変更し、ローカルでテストして、変更をドロップレットに展開できます。
ステップ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> <h2>It's easy with azk!</h2> <hr /> . . . </div>
テキストエディタを保存して終了します。 nanoを使用している場合は、CTRL+O
を押して保存し、CTRL+X
を押して終了します。
Stringerはデフォルトで本番モードで実行するように設定されているため、ブラウザを更新するだけでは変更を有効にすることはできません。 azkからアプリケーションを再起動します。
azk restart stringer -o
新しいバージョンのStringerで新しいブラウザタブが開きます。 デフォルトのテキストのすぐ下ユーザーはあなただけです。、 azk!でも簡単です。
ステップ11—ストリンガーを再デプロイする
それでは、変更をバージョン管理システムにコミットして、それらをデプロイできるようにします。
git add app/views/first_run/password.erb git commit .
テキストエディタ(おそらくnanoまたはvim)が表示されます。
It is easy with azk
のようなコミットメッセージを入力します。
このコミットメッセージは、azk内のアプリケーションのバージョンにラベルを付けるために使用されるため、後でロールバックする必要がある場合は、メモリをジョギングするものを選択してください。
コミットメッセージを保存して閉じます。
fatal: empty ident name (for <sammy@azk.(none)>) not allowed
エラーが発生した場合は、Gitに推奨されるセットアップコマンドを実行して、メールアドレスと名前を設定してください(詳細については、前提条件セクションを参照してください)。
変更をデプロイし、Dropletで実行されているアプリケーションを更新するには、次のコマンドを実行します。
azk deploy
完了したら、ブラウザからDropletのIPアドレスにアクセスします(例: http://your_server_ip
)。 新しい行azkで簡単です!もここに表示されます。
この新しいデプロイメントは、ドロップレット上にアプリケーションの新しいバージョンを作成します。 アプリケーションのすべてのバージョンが保存されるため、前のバージョンにロールバックしてから再度転送できます。
ステップ12—前のバージョンにロールバックする
ドロップレットで使用可能なすべてのバージョンのアプリケーションを一覧表示するには、次のコマンドをローカルで実行します。
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 v1
引数v1
は、azk deploy versions
コマンドの出力で示されるバージョン番号です。 引数なしでコマンドを実行した場合(例: azk deploy rollback
)、アプリケーションは現在のバージョンの直前のバージョンにロールバックされます。
ロールバックが完了したことを確認するには、サーバーのバージョンを表示しているブラウザタブを更新するだけです。
これで、元の展開の場合と同じように、カスタムテキストなしでアプリケーションが表示されるはずです。
もう一度ロールフォワードする場合は、最新バージョンを選択できます。
azk deploy rollback v2
これらのバージョンのラベルは、前の手順のgit commit
メッセージから取得されます。
結論
このガイドでは、単純なRailsアプリを使用して、azkがアプリケーション環境のセットアップタスクを自動化する方法を示しました。 これにより、同じアプリケーションを複数の環境に簡単にデプロイできます。
azkの展開プロセスが気に入った場合は、それを独自のプロジェクトに使用するか、Azkfile
を別のオープンソースプロジェクトのフォークに追加することを検討してください。 ここでAzkfileを作成すると、ここで[プロジェクトの実行GitHubボタンを追加する方法]について学びます。
または、azkで実行するためのレッグワークがすでに完了している他のアプリケーションのこのデモンストレーションギャラリーを確認することもできます。
rollback
とversions
に加えて、azkは、いくつかの追加アクションを実行できるようにする他の補助サブコマンドをサポートしています(たとえば、SSH経由でDropletのシェルにアクセスします)。
azkのドキュメントの完全なサブコマンドリストを確認してください。