gopub企业级运维发布系统

linclin · · 4331 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

https://www.oschina.net/p/gopub gopub(基于vue.js element框架+golang beego框架开发)是一个基于运维场景设计的企业级运维发布系统。配置简单、功能完善、界面流畅、开箱即用!支持git、jenkins版本管理,支持各种web代码发布,一键完成Golang,nodejs,PHP,Python,JAVA等代码的发布、回滚操作。 我们运维团队前期使用walle web部署系统进行发布操作,在此也感谢walle团队贡献的优秀开源项目.walle的web体验比较好,本次开源的gopub前台完全模仿walle前台,使用vue.js element框架重写. gopub已持续运行近两年时间,在我们预发布和生产环境完成37000+次稳定部署,支持单项目100+台服务器部署110秒左右,支持2G+CDN静态资源发布传输30秒完成. ![统计](docs/images/index.png) ## 使用框架 * [Element](http://element-cn.eleme.io/#/zh-CN) * [Beego](https://beego.me/) * [httprouter](https://github.com/julienschmidt/httprouter) * [Taipei-Torrent](https://github.com/jackpal/Taipei-Torrent) ## 功能特性 * Docker&k8s支持:Docker镜像仅60M,kubernetes编排文件一键部署运行 * 部署简便:go二进制部署,无需安装运行环境. * gitlab发布支持:配置每个项目git地址,自动获取分支,commit选择并自动拉取代码 * jenkins发布支持:支持jenkins编译包一键发布 * ssh执行命令/传输文件:使用golang内置ssh库高效执行命令/传输文件 * BT支持:大文件和大批量机器文件传输使用BT协议支持 * 多项目部署:支持多项目多任务并行,内置[grpool协程池](https://github.com/linclin/grpool)支持并发操作命令和传输文件 * 全web化操作:web配置项目,一键发布,一键快速回滚 * API支持:提供所有配置和发布操作API,便于对接其他系统 [API使用example](api_example/example.go) * 部署钩子:支持部署前准备任务,代码检出后处理任务,同步后更新软链前置任务,发布完毕后收尾任务4种钩子函数脚本执行 ## Docker 快速启动 ``` shell #使用dockerhub镜像启动,连接外部数据库 sudo docker run --name gopub -e MYSQL_HOST=x.x.x.x -e MYSQL_PORT=3306 -e MYSQL_USER=root -e MYSQL_PASS=123456 -e MYSQL_DB=walle -p 8192:8192 --restart always -d lc13579443/gopub:latest ``` ### Docker 镜像制作 ``` shell # 使用multi-stage(多阶段构建)需要docker 17.05+版本支持 sudo docker build -t gopub . sudo docker run --name gopub -e MYSQL_HOST=x.x.x.x -e MYSQL_PORT=3306 -e MYSQL_USER=root -e MYSQL_PASS=123456 -e MYSQL_DB=walle -p 8192:8192 --restart always -d gopub:latest ``` ### Kubernetes 快速部署 ``` shell # apiVersion: apps/v1需要kubernetes 1.9.0+版本支持 kubectl apply -f gopub-kubernetes.yml ``` ## 源码编译安装 ### 编译环境 - golang >= 1.8+ - nodejs >= 4.0.0(编译过程中需要可以连公网下载依赖包) ### 源码下载 ``` shell # 克隆项目 git clone https://gitee.com/dev-ops/gopub.git # 编译前端,npm较慢可使用cnpm cd vue-gopub npm install npm run build #修改配置 数据库配置文件在 src/conf/app.conf #编译,control需要给可执行权限,并修改go安装目录 export GOROOT=/usr/local/go ./control build #执行数据库初始化 ./control init #启动服务 启动成功后 可访问 127.0.0.1:8192 用户名:admin 密码:123456 ./control start #停止服务 ./control stop #重启服务 ./control restart ``` ### 快速使用 ``` shell # 下载项目[二进制包](https://gitee.com/dev-ops/gopub/attach_files/download?i=127597&u=http%3A%2F%2Ffiles.git.oschina.net%2Fgroup1%2FM00%2F03%2F4B%2FPaAvDFrJ7iOAeiJJAJ9Zw8cLgzM9739.gz%3Ftoken%3D4b1fd7be9453d7417b567d4bf98f7657%26ts%3D1523253033%26attname%3Dgopub-1.0.0.tar.gz),无需安装go环境和node环境 #给control和src/gopub给可执行权限 #启动服务 启动成功后 可访问 127.0.0.1:8192 用户名:admin 密码:123456 ./control start #停止服务 ./control stop #重启服务 ./control restart ``` ## 配置ssh-key信任 前提条件:gopub运行用户(如root)ssh-key必须加入目标机器的{remote_user}用户ssh-key信任列表 ``` shell #添加机器信任 su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server #need remote_user's password #免密码登录需要远程机器权限满足以下三个条件: /home/{remote_user} 755 ~/.ssh 700 ~/.ssh/authorized_keys 644 或 600 ``` ## Getting started ### 1. 项目配置 ![项目配置](docs/images/project.png) * 项目名称:xxx.example.com (项目命名一定要规范并唯一) * 项目环境:现在只用到预发布环境和线上环境。 * 地址:支持gitlab,jenkins,file三种发布方式. 选用Git在地址栏里面填入git地址,https方式需在地址中加入账号密码,ssh方式需保证gopub所在服务器有代码拉取权限.我们一般在gitlab创建一个public用户,将gopub所在服务器key加入public用户deploy-keys设置,并将public用户授权可拉取所有gitlab项目. 选用jenkins需要录入jenkins对于的job地址和账号密码, #### 宿主机 * 代码检出库:/data/www/xxx (名称需要唯一) * 排除文件:默认不填写,可填写.git(tar打包忽略.git目录)等其他需要打包忽略文件 #### 目标机器 * 用户:www (目标机执行操作用户) * webroot:/data/htdocs/shell_php7 (目标机代码发布目录,软链目录) * 发布版本库:/data/htdocs/backup/shell_php7 (目标机代码备份目录,实体目录,* * * webroot软链到该目录下的对应发布目录) * 版本保留数:20 (发布版本库中保留多少个发布历史) * 机器列表:一行一个IP (复制粘贴ip的时候注意特殊字符) #### 高级任务 前面两个任务的执行是在管理机上,后面两个任务的执行是在目标机器上 * 代码检出前任务:视情况而定(默认为空) * 代码检出后任务: 需要composer的项目需要添加:cd {WORKSPACE} && rm -rf composer.lock vendor && composer install --optimize-autoloader --no-dev -vvv --ignore-platform-reqs ,否则为空 * 同步完目标机后任务:视情况而定(默认为空) * 更改版本软链后任务:视情况而定(默认为空) ### 2. 创建上线单 ![创建上线单](docs/images/pub1.png) * gitlab上线单 ![git配置](docs/images/pub2-git.png) * jenkins上线单 ![jenkins配置](docs/images/pub2-jenkins.png) ### 3. 部署操作 ![选择上线单](docs/images/pub3.png) ![部署](docs/images/pub4.png) ## 开发团队 * [林超](https://github.com/linclin) * 高传泽 * 金阳 * 赵连启 * 张群烽 ## 下个版本计划 * 支持选择蓝鲸CMDB3.0业务模块发布,避免维护IP列表 * 现有的Docker镜像基于centos打包,镜像超过1.4G,下个版本使用alpine作为基础镜像

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4331 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传