静态资源运维方案
2017-12-16 12:20
204 查看
公司最初静态资源使用的最原始的方案:虚拟机上开通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 -> 测试发布 -> 测试 -> 生产发布 -> 验收 。
脚本
脚本说明:
初次发布前,先通过git clone命令手动克隆一次;
每次发布操作的主要命令是:
git pull 增量更新到最新版本
git reset --hard tag 回退到指定tag(注:git reset和分支还是保持一致,如果用git checkout tag将和分支detach,因此使用前者,增量更新,效率更高)。
面临以下几个问题,不得不整改了:
流量使用过度: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,因此使用前者,增量更新,效率更高)。
相关文章推荐
- Spring MVC 获取静态资源处理方案学习总结
- SpringBoot静态资源css,js,img配置方案
- Web静态资源处理方案
- Spring MVC的配置访问静态资源的三种方案
- ssm 处理静态资源完美方案
- Spring MVC 获取静态资源处理方案学习总结
- 中小型公司静态资源管理部署方案
- ssm 处理静态资源完美方案
- 静态资源优化方案
- maven-replacer-plugin 静态资源打包方案js css
- cdn托管静态资源的保险方案
- Spring MVC 获取静态资源处理方案学习笔记
- zmNgFrameWork 架构升级ng1.5和md5静态资源缓存方案【angular1.x】
- Nginx静态资源POST请求返回405状态
- 浏览器请求阻塞到底是怎么回事?我们为什么要把静态资源分服务器放置?
- springmvc基础篇—处理图片静态资源文件
- Spring 学习日记——访问静态资源
- spring 静态资源
- 解决 IntelliJ IDEA 无法热加载 Spring Boot 模板文件和静态资源文件
- puppet自动化运维之资源关系