はじめに

皆様、こんにちは。あるいは初めまして。

PIALab.のつくるひと、西です。

今回は構成管理ツールで Ansibleを拡張したデプロイツール「Ansistrano」について紹介します。

デプロイ作業に対するエンジニアの本音

a locker room picture
Webシステム開発において、避けては通れない最後の関門、それがサービスイン直前のデプロイ作業ですが、

結局のところ

  • 運用が始まっているシステムに対して更新作業は怖い ((´д`))
  • シンプルかつ手堅いリリース手法を確立したい
  • どのようなプロジェクトでも同じ手順、簡単にリリースしたい

ということは、サーバにsshログインしてgit pullでもいいよねと思ったのですが、

  • 人間が作業するのでミスを起こす可能性が残っている
  • サーバごとにgit pullを行うためのセットアップを行う必要があって、なかなか面倒かも…

という課題があり、解決策がないか調べているところ、
構成管理ツール、Ansibleを拡張したデプロイツールAnsistranoに注目しました。

Ansistrano とは

Ansistranoを1行で説明すると、スクリプトアプリケーション(PHP やPythonなど)のデプロイプロセスを簡単に管理するための Ansible ロールです。

Ansistrano というプロジェクト名は Ansible + Capistrano を指しており、Capistrano とはRubyをベースにしたサーバ操作およびデプロイツールです。
つまり、CapistranoライクなデプロイツールとしてAnsibleを拡張したものがAnsistranoということですね。

Ansistrano

Ansistranoを選択した理由

私達がAnsistranoを選択した理由は下記となります。

  • Capistrano側は機能が充実していたV2 のメンテナンスが終了している
  • Chefのようなエージェントツールが不要
  • 元々Ansibleを利用していたので、学習コストが低い

やることはとてもシンプル

Ansistranoが実行する作業は下記3ステップだけです

  • 対象のサーバーにSSH接続し、
  • git等から取得したファイルを配置して、
  • Webサーバのアプリケーションルートへデプロイ実行

やることがシンプルでわかりやすいですね!

deploy及びrollbackのイメージ

  • deploy

Ansistrano でコードをデプロイすると、以下のようなディレクトリが作られます。
/target_dir/current は、常に最新のプログラムへのシンボリックリンクになります。

target_dir/
  current -> /target_dir/releases/20171016083507Z へのシンボリックリンク
  releases/
    20171010055823Z/
    20171010060242Z/
    20171016083507Z/
      log -> ../../shared/log へのシンボリックリンク
      tmp -> ../../shared/tmp へのシンボリックリンク
  shared/
    log/
    tmp/
  • rollback

また、Ansistrano のロールバック機能を実行すると、releases ディレクトリ以下に残っているバックアップを使い、以下のようにロールバックします。
最新だった 20171016083507Z ディレクトリは削除されます。

target_dir/
  current -> /target_dir/releases/20171010060242Z へのシンボリックリンク
  releases/
    20171010055823Z/
    20171010060242Z/
      log -> ../../shared/log へのシンボリックリンク
      tmp -> ../../shared/tmp へのシンボリックリンク
  shared/
    log/
    tmp/

Ansistrano導入のメリット

ざっくり整理すると、下記がAnsistrano導入のメリットになります。

  • 開発機から設定ファイル1つで、sshでつながる本番環境へリリース可能
  • 検証した手順を間違えずに確実に本番環境で実行できる
  • コマンド一つでデプロイ前にロールバック可能
  • デプロイ手順をソースコードとして管理することで、試行錯誤した履歴の保存、テンプレート化が容易

続く

Ansibleはサーバ構成管理の自動化だけでなく、デプロイにも便利ですよというお話でした。
次回はAnsistranoを導入してデプロイするまでのステップを紹介していきます。

つくる人募集中

PIALab.ではつくるひと(エンジニア)を募集しています。
気軽にPIALab.に遊びに来て、Gwaveカフェでお話しませんか?

詳しくはこちら の記事を御覧ください。