Webサーバ起動時に、自動的にGitで最新アプリケーションをデプロイする方法

AWSのEC2でWebサーバを分散化していて、トラフィックが急激に上昇した場合、スケールアウトするんだけど、AMIイメージファイルのアプリケーションファイルが若干古いことって、まぁまぁよくあると思います。オートスケールだと、ちょっとマズイ。というわけで、EC2インスタンスをロンチ後、自動でGitから最新ファイルを持ってくるようにする方法。

っても、AWSにもEC2にもGitにもまったく関係ない、古くからあるLinuxの手法。

/etc/rc.local を使う

/etc/rc.local は、他のサービスなどが起動し終わった後に独自にシェルスクリプトが実行できる。

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
ここに独自のスクリプトを記述する

ただし、スーパーユーザ権限で動くので、一般ユーザとしてGitコマンドを実行する必要あり。

sudo -u webmaster git pull origin master

こんな感じ。

Cron を使う

一般ユーザのCronを使って、起動時のみに実行することができる。

$ crontab -e
@reboot /home/webmaster/git_deploy.sh

通常は先頭に実行感覚の時間などを記述するが、@reboot と指定すると起動した時にのみ実行させることができる。もちろんCronで実行したユーザ権限なので、sudoとかしなくてもOK。ちなみに、スクリプトの中身は単純。

#!/bin/bash
cd /var/www/vhosts/www.example.com/
git pull origin master

ちなみに、@reboot以外に指定できるオプション。

オプション 内容
@reboot 起動時に1度だけ実行
@yearly 1年に1度だけ実行( 0 0 1 1 * と同じ)
@annually @yearlyと同じ
@monthly 1ヶ月に1度だけ実行( 0 0 1 * * と同じ)
@weekly 1週間に1度だけ実行( 0 0 * * 0 と同じ)
@daily 1日に1度だけ実行( 0 0 * * * と同じ)
@hourly 1時間に1度だけ実行( 0 * * * * と同じ)

もっと綺麗にやるならCapistranoとかでやるのが良いんだろうけど。

Feed

最新記事

開発フローを独自進化させ続けている開発チームの話

こんにちは CTO の [@zaru](https://twitter.com/zaru) です。 スクラム開発をしている開発チームが、開発フローを独自進化させていて、それが良い取り組みだったので紹介しようと思います。 #...

235650?v=4
zaru
2017年11月20日

退職者を招いたLTイベントを開催した

こんにちは、ベーシック CTO [@zaru](https://twitter.com/zaru) です。 ベーシック開発部では毎月月末の金曜日にTGIFと称して、 ~~飲み会 + アナログゲームなイベント~~ 技術 LT 大会...

235650?v=4
zaru
2017年10月12日

山形ラボ、TGIFはじめました

こんにちは。株式会社ベーシック山形ラボの長谷川です。 いろんなところで書いたりなんだりしてますが、弊社には山形に「山形ラボ」というリモート拠点がありまして、そこで4人のエンジニアが働いております。 今回は その山形ラボで、...

10917612?v=4
roki1801
2017年10月10日