静态资源运维方案

公司最初静态资源使用的最原始的方案:虚拟机上开通FTP让UED直接上传,nginx作为WEB服务器发布应用,前端通过nginx反向代理访问。



面临以下几个问题,不得不整改了:

  • 流量使用过度:IDC带宽有限,有些大图片被集体访问,带宽面临耗尽问题;有时候还会有流量攻击

  • 发布管理问题:UED直接上传,直接修改线上,没有测试环节,经常导致故障;出了问题不好回退,没有版本概念。

研究后决定引入git做版本管理,同时将静态资源放到阿里oss,避免静态资源对IDC带宽的过度消耗。

新的拓扑:



  • gitlab:静态资源版本库;
  • 生产和测试oss:静态文件存放的空间,域名指向其cname;
  • ossfs server:一台阿里云虚拟机,将测试和生产存储桶通过ossfs挂在到虚拟机2个目录;
  • jenkins:发布终端,调用ossfs server上的脚本,执行git pull操作,包含测试和生产2个任务,发布时需要指定tag,以方便版本回退。

整个流程:

ued开发 -> git提交 -> 打tag  ->  测试发布  ->  测试   -> 生产发布  ->  验收 。

脚本

==== deploy.sh ====
#!/bin/bash

if [ $# -ne 3 ]; then
    echo "Usage: deploy.sh [profile] [project] [tag]"
    echo "For example: deploy.sh test myproject tag20171216-01"
    exit 1
fi

PROFILE=$1
PROJECT=$2
TAG=$3
PROJECTID=3
LOGFILE=/root/script/deploy.log
TMPFILE=/root/script/tmp.log

echo >> $LOGFILE
echo `date +%Y%m%d" "%H:%M:%S`" deploy.sh $PROFILE $PROJECT $TAG" >> $LOGFILE

#check tagname
curl -s --request GET --header "Private-Token: ************" "http://gitlabip/api/v4/projects/${PROJECTID}/repository/tags/${TAG}" > $TMPFILE 2>&1
if ! grep \"name\":\"${TAG}\" $TMPFILE > /dev/null 2>&1; then
    echo 
    echo "======== ERROR: no tag <<$TAG>> ========"
    echo
    echo `date +%Y%m%d" "%H:%M:%S`" ERROR: no tag <<$TAG>> " >> $LOGFILE
    exit 1
fi

cd /ossfs/${PROJECT}/${PROFILE}/
echo `date +%Y%m%d" "%H:%M:%S`" git pull..." >> $LOGFILE
git pull >> $LOGFILE 2>&1
echo `date +%Y%m%d" "%H:%M:%S`" git reset --hard tag..." >> $LOGFILE
git reset --hard $TAG >> $LOGFILE 2>&1

echo `date +%Y%m%d" "%H:%M:%S`" deploy.sh end" >> $LOGFILE

脚本说明:

初次发布前,先通过git clone命令手动克隆一次;

每次发布操作的主要命令是:

git pull 增量更新到最新版本

git reset --hard tag 回退到指定tag(注:git reset和分支还是保持一致,如果用git checkout tag将和分支detach,因此使用前者,增量更新,效率更高)。

发布了24 篇原创文章 · 获赞 25 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/sdmei/article/details/78819170