Edited at

Bitbucket + SourceTree を使って,Deisへ Web アプリをデプロイする

More than 1 year has passed since last update.


本稿で行うこと。

Windows に Deis Workflow CLI をインストールし,

SourceTree を用いて認証用の鍵を作成し登録したあとの作業は,Webアプリのデプロイです。

やってみましょう。

外部の Git リポジトリとしては GitHub が一般的です。

しかし,零細規模では,プライベートリポジトリを無料で複数持てる Bitbucket を用いる例が多いのではと思いますので,そちらで例示します。

本稿では,作業者が下記のような状態にあることを想定します。


  • Bitbucket には既にプロジェクトと Git リポジトリが存在している。

  • 既に誰かが Web アプリのソースコードを Bitbocket の Git リポジトリに登録している。

  • さきほど上記プロジェクトに参加したばかり。

  • Git の使い方は知っている。

  • 使用する端末は Windows 系。

  • Workflow CLI と SourceTree はインストール済み。


  • deis.exe register および deis.exe login を実行済み。


作業

順番に説明します。


Bitbucket への接続

Web検索をかけてみたらとても良いブログエントリがありました。

先日,筆者が書いた記事よりも内容が濃く解りやすいと思います。


Deis へのデプロイのための設定

SourceTree から clone したリポジトリを選択した状態で「端末」ボタンを押し,コマンドラインウインドウを開きます。

開いたら deis.exe コマンドを実行するのですが,デプロイするWebアプリが Deis 上に存在するかどうかで,オプションが異なります。

いずれにせよ,deis.exe は内部で git remote:add を呼び出し,設定します。


新しく Web アプリを生成する場合

deis.exe create {アプリ名}

{アプリ名} は省略可能です。省略した場合には適当な名前が割り当てられます。


既にデプロイ済みの Web アプリを更新する場合

deis.exe remote:add -a {アプリ名}

アプリ名は省略できません。


デプロイ

Deis は Heroku 互換ですので,git push でデプロイのためのビルドが開始されます。

コマンドラインの場合は,git push deis master でプッシュします。

SourceTree の場合,下記の手順となります。


  1. 「プッシュ」ボタンを押してプッシュウインドウを表示させる。

  2. プッシュ先リポジトリを deis にする。

  3. プッシュ対象のブランチを master にする。


  4. OK ボタンを押す。


デプロイが拒絶されたら?

稀にデプロイが拒絶される場合があります。

初回での場合 deis.exe keys:add の設定ミスも疑われますが,

Deis のバグや過負荷と思われる拒絶も稀に起きるようです。

設定ミスの可能性は無い,という自信がある場合は,サーバ管理者に問い合わせましょう。


確認

デプロイされた Web アプリは,http://{アプリ名}.{Deis のベースドメイン名}/ でアクセス可能となります。

Deis のベースドメイン名とは,ログインの時に指定した URL の http://deis.{ここの部分のことです}/


Web ブラウザからのアクセスで 5xx エラーが返ってくるときは?

Deis は,Kubernetes を実行環境の基盤としています。

背後では下記のようなタスクが走ります。

このため,複数ノードの環境では,ビルド完了からデプロイ完了まで時間がかかることがあります。


  1. Deis builder がデプロイ終了時に Docker リポジトリにコンテナイメージを push。

  2. その後 Kubernetes が Docker リポジトリからコンテナイメージを pull。

  3. Kubernetes Pod として実行。

デプロイ完了後に deis.exe ps を実行すると,アプリを受け持っているコンテナの状態がわかります。

up になっているのが正常です。

502 エラーが返ってきて image pulling の場合は,しばらく待ってみてください。

それ以外の状態になっている場合には…,おそらく,デプロイした Web アプリにバグがあるか,Deis や Kubernetes がトラブっています。

後者の場合はサーバ管理者に問い合わせましょう。


まとめ

以上,文章にすると煩雑ですが,慣れるとルーチンワークです。ご参考になれば幸いです。