【Laravel Practice02】デプロイサーバーにAnsibleをインストール
デプロイサーバーにAnsibleをインストールします。
前回はこちら
【Laravel Practice01】デプロイサーバー、Webサーバー、DBサーバーの準備 - 終電23時15分って早くね?
前回も言いましたが本当はたぶんデプロイサーバーに向けてAnsibleをホストOSから実行すればよいです。
が、Windows環境で(面倒なので)ローカルからAnsibleを実行するのではなくデプロイサーバーにインストールしてみます。
デプロイサーバーにログイン
手順どおりにいけばlaravel-servers
ディレクトリにいると思いますのでそこで、
$ vagrant ssh deploy
というコマンドでデプロイサーバーにログインします。
複数の仮想サーバーがある場合はvagrant ssh [名前]
でSSHで対象サーバーにログインできます。
仮想サーバーが1つしかない場合は、名前を明示せずvagrant up
だけでOKです。
EPELリポジトリの導入
エンタープライズ Linux 用の拡張パッケージ(EPEL) は、 Red Hat Enterprise Linux (RHEL) 向けの高品質なアドオンパッケージであり、CentOS や Scientific Linux (SL) のような RHEL からスピンオフしたディストリビューションと互換性のある、Fedora プロジェクトで有志によって作成されたパッケージになります。Fedora は RHEL のアップストリームであり、EPEL のアドオンパッケージは主に RHEL 向けにビルドされた Fedora リポジトリをソースとしています。
https://fedoraproject.org/wiki/EPEL/ja
CentOSの標準パッケージには含まれないパッケージをyumでインストールするためにEPELリポジトリを導入します。
Ansibleはこちらのリポジトリからインストールするような想定です。
$ sudo yum install -y epel-release
デプロイサーバのコンソールから上記コマンドで、EPELリポジトリのインストールができます。
Ansibleのインストール
今回利用しているCentOSのyumやUbuntuのaptなどのパッケージ管理システムを使えば、
ソースコードを落としてきて個別にインストールする必要がないので楽ですね。
最新版が使いたい!となると、パッケージとして提供されてないケースがあるのでそういう場合は手動で最新版をインストールする方法をぐぐって試してみてください。
$ sudo yum install -y ansible
と、yumでさくっとインストールすると、
$ ansible --version
ansible 2.1.0.0
という感じでAnsibleのバージョン2.1がインストールできました。
vagrat up 時に自動でEPELリポジトリとAnsibleをインストールするようにしてみる
前項まででいったん、今回の目的である「デプロイサーバーにAnsibleをインストールする」というのは完了です。
が、せっかくなのでVagrantの機能を使って、vagrant up
した際に自動的にデプロイサーバーにEPELリポジトリとAnsibleをインストールしてみます。
Vagrantのプロビジョニングの機能
vagrant up
で仮想環境を起動したあとに実行する処理を指定できるのが、Vagrantのプロビジョニングの機能です。
仮想環境起動後に実行可能な詳しい処理は公式サイトをご確認ください。
ChefやPuppet、Ansibleやシェルスクリプトなどなどで処理を指定する事が可能ですが、
今回はシェルスクリプトでやります。
Vagrantfileの記述
とても簡単!
server.vm.provision "shell", :path => "provision.sh"
shell
の部分でプロビジョニングの方法(chefとかansibleとか)を指定し、
シェルスクリプトの場合は実行するファイルを指定します。
provision.shの記述
こちらも簡単ですね。
冪等性を意識するために、if文なんかを書いてみました。
yumでインストールしたEPELリポジトリはrpmコマンドとgrepを使ってチェックしています。
if [ -n "`rpm -q epel-release | grep -w 'not installed'`" ]; then sudo yum install -y epel-release fi
rpm -q
はパッケージの詳細を表示するコマンドです。
インストールされている場合は
$ rpm -q epel-release epel-release-7-6.noarch
インストールされていない場合は
$ rpm -q epel-release package epel-release is not installed
のような結果になるので、grep -w 'not installed'
でワード検索し、
インストールされていない場合のみインストールするような感じです。
たぶん他のパッケージでも応用して使える気がします。
Ansibleはwhich
を使ってチェックしています
if [ ! `which ansible` ]; then
sudo yum install -y ansible
fi
which
はコマンドを探してくれます。
コマンドがある場合はそのパスとともに結果が返ってきます。
$ which ansible /usr/bin/ansible
ない場合は、
$ which ansible /usr/bin/which: no ansible in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin)
no ansibleと出力されていてコマンドが存在しないことが分かります。
which
コマンドの終了ステータス(成功したら 0、失敗したら 1)で判定して、Ansibleがインストールされていない場合のみインストールを実行します。
デプロイサーバーを一度破棄する
$ vagrant destroy -f deploy
上記のコマンドで一度、デプロイサーバーを破棄します。仮想環境を削除できます。
-f
のオプションは強制的に削除するオプションで、これをつけないと削除するかどうかを確認されるので、「Y」を応答して削除しましょう。
デプロイサーバーを再構築する
$ vagrant up deplo
前回すでに打ったコマンドと同じですが、再度デプロイサーバーを構築するためにvagrant up
を実行します。
そしたらしばらくコンソールを眺めてみましょう。
==> deploy: Running provisioner: shell...
deploy: Running: C:/Users/HOGEHOGE/AppData/Local/Temp/vagrant-XXXXXXXXXX.sh
のようなログが出てきたらシェルでのプロビジョニングがはじまります。
デプロイサーバーにログインして、EPELとAnsibleを確認する
$ vagrant ssh deploy
でログインし、
$ rpm -q epel-release epel-release-7-6.noarch $ which ansible /usr/bin/ansible $ ansible --version ansible 2.1.0.0
となれば無事Vagrantでの自動のプロビジョニングは完了です!
まとめ
- EPELリポジトリをインストールする
- EPELリポジトリはCentOSの標準パッケージに含まれないパッケージを提供してくれる
- AnsibleはEPELリポジトリからインストールする
- yumでインストールできるから簡単ですね!
- ubuntuの場合はapt-getでインストールできる
- Vagrantfileにシェルでのプロビジョニングを自動実行するように追加
- シェルスクリプト以外でもChefやAnsibleなどが起動完了後に実行できる
- 冪統制をシェルスクリプトでも考えてみると楽しい
- Ansibleなどの構成管理ツールはそんな冪統制をよしなにしてくれたりもするよ
次は、デプロイサーバーでAnsibleをデプロイサーバー自身に実行してみたいと思います。
次の記事はこちら!
【Laravel Practice03】デプロイサーバーにAnsibleを実行する - 終電23時15分って早くね?

- 作者: Lorin Hochstein,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/04/16
- メディア: 大型本
- この商品を含むブログ (2件) を見る