手動でデプロイすることの問題点
- 別に手動で問題ない。
- やり方を知っている人しかデプロイ出来ないという問題あり。
- 手動に面倒くさくなったらデプロイ方法の改善を考えれば良い
- 作業漏れの恐れ
とはいうものの
- 自分しか居ない場合
- git + scp
- ある時点から変更されたファイルが何か、後でわかるようにgit使う。
- 大量の変更の場合は、デプロイ前にディレクトリをバックアップとっておきいつでも戻せるようにしておく。
- rsyncとsshでローカルコマンド発行
デプロイツール
- capistrano: ruby (試してないがgemをインストールすることから始まるのでやめた)
- consul
- Webistrano (WebUI)
- Capistrano勉強会資料(初心者向け:未完成) - Qiita
- デプロイツール - webistrano+apacheを使ってみる(ec-cubeを使ったサイト用検討) - Qiita
- Fabric : python (paramikoのインストールに失敗して動かせなかった)
- Ansible : python (centos4には対応してない)
scpでのデプロイスクリプトの例
deploy.sh
#!/bin/sh
set -eu
export LANG=C
# 検証環境
STAGING="/home/htdocs"
# 本番環境
#WWWDIR=$STAGING
#WWWDIR="/var/www.20141009"
#WWWDIR="/var/www.20141015"
WWWDIR="/var/www"
#----------------------------------------
file_exists() {
if [ ! -e $STAGING/${1} ];then
echo "$STAGING/${1} not found."
exit 1
fi
php -l $STAGING/${1} > /dev/null 2>&1 || return 1
}
echo_scp() {
echo scp -p "$STAGING/${2}" "apache@web${1}.srv:$WWWDIR/${2}"
}
exec_scp() {
echo web${1}
scp -p "$STAGING/${2}" "apache@web${1}.srv:$WWWDIR/${2}"
}
#check_diff() {
# ssh apache@web{1} "cat ${WWWDIR}/${2}" | diff - $STAGING/${2}
#}
if [ ! `whoami` = "apache" ];then
echo "apacheユーザで実行してください。"
echo "例) (cd `pwd` && sudo -u apache sh $0)"
exit 1
fi
#----------------------------------------
# ここにデプロイしたいファイル一覧を列挙
for file in \
model/select.php \
includes/search.php
do
file_exists $file
#check_diff 10 $file
echo_scp 10 $file
echo_scp 09 $file
echo_scp 08 $file
echo_scp 07 $file
echo_scp 06 $file
echo_scp 05 $file
echo_scp 04 $file
echo_scp 03 $file
echo_scp 02 $file
echo_scp 01 $file
#
echo "press enter to exec.."
read ENTER
exec_scp 10 $file
exec_scp 09 $file
exec_scp 08 $file
exec_scp 07 $file
exec_scp 06 $file
exec_scp 05 $file
exec_scp 04 $file
exec_scp 03 $file
exec_scp 02 $file
exec_scp 01 $file
done