准备上线用beego写的一个小项目,在vultr开了个日本节点,注册送50刀,免费用两个月,哈哈。
  之前还真没部署过编译型语言项目(Java白学了),也没去折腾capistrano了。参考beego的文档撸了个简单脚本,先凑合用吧。
  

发布

  发布机项目目录如下:

  • project
  • app //待上线的二进制文件和静态文件
  • src //代码目录
  • conf //线上配置文件
  • build //编译好的压缩包,归档

发布脚本:

#! /bin/bash

function log() {
	echo -e "\033[32m $1 \033[0m"
}

log "starting deploy"
appname="appname"
path="/deploy/project"
src_path=$path"/src"
version=`date +%Y%m%d%H%M%S`

log "pull code"
cd $src_path

git reset HEAD --hard
git pull origin master

cd $path

log "starting build"

bee pack -p src -o build -ba "-o ${appname}"

log "decomporess"

tar -C app/ -xzf build/src.tar.gz

mv build/src.tar.gz build/$version.tar.gz

log "replace conf"

/bin/cp -rf conf/* app/conf/

log "rsync"

#改成对应的
rsync -avur app/ user@ip:/path -e 'ssh -p port -i id_rsa_file' --delete --compress --no-perms --no-owner --no-group

log "clean"

rm -rf app/*

log "all done"

重启

服务器上可以定期检查二进制文件的md5哈希值,变化了就重启。(也可以用ssh远程执行命令之类的重启,但是感觉不太安全,不知道有没有更优雅的做法)
这里用的supervisor

#! /bin/bash
binary_file=/path/to/binary_file
#存md5值的文件
md5_file=/path/md5 
old_md5=`cat $md5_file`
new_md5=`md5sum "${binary_file}" | awk '{print $1}'`

if [ $old_md5 != $new_md5 ]
then
    echo $new_md5 > $md5_file
    /usr/bin/supervisorctl restart yourapp
fi

Gist上也有

Have fun