Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cute-angelia/go-deploy-server
一个简单的发布服务,支持git,svn
https://github.com/cute-angelia/go-deploy-server
Last synced: 6 days ago
JSON representation
一个简单的发布服务,支持git,svn
- Host: GitHub
- URL: https://github.com/cute-angelia/go-deploy-server
- Owner: cute-angelia
- License: mit
- Created: 2022-01-18T06:40:45.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-02-19T02:30:48.000Z (11 months ago)
- Last Synced: 2024-06-19T10:10:42.412Z (7 months ago)
- Language: Go
- Size: 16 MB
- Stars: 5
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-deploy 上线发布工具
上线发布工具:更新,回滚; 支持svn、git
为什么会有这个项目?
发布工具大概有这么几种:
1. 发布机模式
单独部署一台发布机,它拉取代码再通过配置ssh授信分发到各个服务器,如:Jenkins,瓦力等
2. 客户端模式(本工具)
在各个服务器放置一个客户端,服务端发送更新指令,客户端去更新代码项目因安全性考虑,无法相互授信ssh,也就无法使用发布机
### Screenshot
![](https://github.com/cute-angelia/go-deploy-server/blob/master/screenshot1.png)
![](https://github.com/cute-angelia/go-deploy-server/blob/master/screenshot2.png)### 特性
- 平台支持 windows, linux
- 支持 svn 和 git
- 前端代码Vue 3.0
- 更新、回滚
- server 和 client 采用 tcp 通讯 + 心跳保活 节点在线状态实时监控
- 支持 befor_deploy、after_deploy 部署前和部署后的hook命令,清理缓存、执行重启等操作
### 本机开发
1. 编译前端vue
```
cd cmd/server/vue
pnpm run serve
pnpm run build
```
2. 启动后端服务
```
cp server.example.json server.json
go run main.go -c server.json
```
3. 启动客户端(可选)
```
go run client.go -l :8093
```
### 部署到线上上线:
1. 上传server二进制文件和配置文件到服务器,启动
2. 上传client二进制文件到需要业务服务器,启动
3. 更新配置文件节点,强烈建议在配置文件配置 jwt_secret
4. 打开浏览器查看web管理界面 http://ip:port 是否可以正常访问
5. 修改一下server vue 里面 isLocal 里面一些授权逻辑,这里接入了企业微信### 配置文件说明
```json
{
// 站点监听端口,可以通过 http 打开
"listen_http": ":8082",
// 日志输出模式
"debug": true,
// jwt 的 secret
"jwt_secret" : "",
"apps": [
{
"name": "douke", // 名称
"type": "svn", // 类型:svn git
"url": "svn://192.168.1.207/xiaohua", // 地址
"fetchlogpath": "/data/fetch_log/xiaohua/trunk", // version < 1.0.1 服务端机器目录, 提交日志文件地址:svn 留空; git 请填一个地址存储提交日志,这个目录的作用仅仅是为了获取git提交日志用
"node": [ // 机器节点
{
"alias": "api-1", // 名称
"addr": "192.168.1.11:8081", // 客户端监听端口
"path": "/data/wwwroot/xiaohua/trunk", // 项目地址
"befor_deploy": "", // 执行前操作
"after_deploy": "" // 执行后操作
},
{
"alias": "api-2",
"addr": "192.168.1.207:8081",
"path": "/data/wwwroot/xiaohua/trunk",
"befor_deploy": "ls /data/wwwroot",
"after_deploy": "ls /data/wwwroot/xiaohua/trunk"
}
]
}
]
}
```
### 一些问题
1. 无法拉取日志:
可以用 `svn log --limit 10 svn://x.x.x.x/project/` 执行下看下错误信息
2. windows,用 pm2 守护的进程,没法 IPC 通信通知结束进程
大致解决思路,采用tty远程手动结束,暂时这里不处理了3. web管理访问安全问题
4. 部署完后web管理界面直接暴露给所有人的,可以加一层nginx反向代理,设置一个auth认证
```bash
htpasswd -c /usr/local/openresty/nginx/conf/vhost/passwd.db yourusernameserver {
listen 80;
server_name yourdomain;
auth_basic "User Authentication";
auth_basic_user_file /usr/local/openresty/nginx/conf/vhost/passwd.db;
location / {
proxy_pass http://127.0.0.1:http_port;
}
}
```### 协议设计
```
* |----------Len--------|------------------------------------MetaInfo------------------------------------|
* |---------4Byte-------|--------4Byte--------|----1Byte----|----------------X---------------------------|
* +------------------------------------------------------------------------------------------------------+
* | Magic | PayloadLen | MsgType | Body |
* +------------------------------------------------------------------------------------------------------+
PayloadLen - length of body in byte, 3 bytes big-endian integer.
Magic - magic number
MsgType - package type, 1 byte
0x01: heartbeat package
0x02: data package
0x03: disconnect message from server
body - binary payload.
```