150 lines
3.9 KiB
Markdown
150 lines
3.9 KiB
Markdown
# app-deploy-platform
|
||
|
||
一个面向你当前场景的发布控制台:
|
||
|
||
- 不使用 CI 构建
|
||
- 由平台所在的构建机自动查找本地 `user / pay / gateway` Git 仓库
|
||
- 找到后自动 `git fetch / checkout / pull` 并产出制品
|
||
- 平台自动把构建产物上传到 COS 并登记版本
|
||
- 平台统一发起部署、回滚、重启
|
||
- 平台配置和腾讯云凭证统一放在 `config/prod.yaml`
|
||
|
||
## 技术栈
|
||
|
||
- 后端:Go + Gin + GORM
|
||
- 前端:React + Material UI + Vite
|
||
- 数据库:Postgres
|
||
- 缓存:Redis
|
||
- 后台任务:RocketMQ
|
||
- 部署:Docker Compose
|
||
|
||
## 当前能力
|
||
|
||
已实现:
|
||
|
||
- 构建任务创建
|
||
- 本地源码仓库自动发现
|
||
- 自动拉取 Gitea 代码、构建、打包、上传 COS
|
||
- 主机管理
|
||
- 服务实例管理
|
||
- 版本自动登记
|
||
- 部署任务创建
|
||
- 回滚任务创建
|
||
- 重启任务创建
|
||
- `/health` `/ready` 状态巡检
|
||
- RocketMQ 任务队列
|
||
- 启动时自动预置你的 chatapp 生产机器清单
|
||
- 真实腾讯云发布链路入口
|
||
|
||
真实执行脚本:
|
||
|
||
- [tencent_operator.py](/Users/zuozuo/Desktop/HY/chat-app-deploy-platform/ops-scripts/tencent_operator.py)
|
||
- [build_operator.py](/Users/zuozuo/Desktop/HY/chat-app-deploy-platform/ops-scripts/build_operator.py)
|
||
|
||
它已经接入:
|
||
|
||
- TAT `RunCommand`
|
||
- TAT `DescribeInvocationTasks`
|
||
- TAT `DescribeAutomationAgentStatus`
|
||
- COS 预签名下载 URL
|
||
- gateway 发布前后 CLB 权重摘流量 / 恢复
|
||
- 远端 `/opt/release/bin/deploy.sh` 的本机失败回滚
|
||
- 平台任务遇错中止
|
||
|
||
## 一键启动
|
||
|
||
先把 [config/prod.yaml](/Users/zuozuo/Desktop/HY/chat-app-deploy-platform/config/prod.yaml) 里的:
|
||
|
||
- `tencentcloud.secret_id`
|
||
- `tencentcloud.secret_key`
|
||
|
||
改成真实值,然后执行:
|
||
|
||
```bash
|
||
cd /Users/zuozuo/Desktop/HY/chat-app-deploy-platform
|
||
docker compose up -d --build
|
||
```
|
||
|
||
访问:
|
||
|
||
- 前端:[http://localhost:18090](http://localhost:18090)
|
||
- 后端健康检查:[http://localhost:18080/api/healthz](http://localhost:18080/api/healthz)
|
||
- Postgres:`127.0.0.1:55432`
|
||
- Redis:`127.0.0.1:56379`
|
||
|
||
## 数据目录
|
||
|
||
固定持久化到:
|
||
|
||
```text
|
||
/opt/build_cache/app-deploy-platform/postgres
|
||
/opt/build_cache/app-deploy-platform/redis
|
||
/opt/build_cache/app-deploy-platform/rocketmq
|
||
```
|
||
|
||
## 配置文件
|
||
|
||
主配置文件在:
|
||
|
||
- [config/prod.yaml](/Users/zuozuo/Desktop/HY/chat-app-deploy-platform/config/prod.yaml)
|
||
|
||
它统一包含:
|
||
|
||
- 平台端口
|
||
- Postgres / Redis / RocketMQ 连接
|
||
- 腾讯云 `SecretId / SecretKey`
|
||
- 构建工作区和本地仓库扫描目录
|
||
- COS bucket
|
||
- TAT 配置
|
||
- CLB 配置
|
||
- `user / pay / gateway` 实例清单
|
||
|
||
## 推荐落地方式
|
||
|
||
### 1. 构建机
|
||
|
||
平台容器需要运行在构建机上,并具备:
|
||
|
||
- 本地源码目录 `../chat-app`
|
||
- 构建缓存目录 `/opt/build_cache/app-deploy-platform/builds`
|
||
- 用于拉取 Gitea 仓库的 SSH Key,默认挂载 `${HOME}/.ssh -> /root/.ssh`
|
||
|
||
构建入口在“构建任务”页面。每次点击构建后,平台会:
|
||
|
||
- 优先在 `/workspace/source/chat-app` 下查找匹配仓库
|
||
- 自动 `git fetch / checkout / pull`
|
||
- 执行 `go test ./...`
|
||
- 执行 Go build 并打成 `user.tgz / pay.tgz / gateway.tgz`
|
||
- 生成 `.sha256`
|
||
- 上传到 `releases/prod/<release_id>/<service>/...`
|
||
- 自动写入版本库
|
||
|
||
### 2. 平台
|
||
|
||
平台负责:
|
||
|
||
- 展示版本
|
||
- 展示主机和服务健康状态
|
||
- 发起部署、回滚、重启
|
||
- 通过 RocketMQ 异步执行任务
|
||
- 调用腾讯云 TAT / CLB / COS
|
||
|
||
### 3. 服务器
|
||
|
||
服务器侧前提保持不变:
|
||
|
||
- 已安装 TAT Agent
|
||
- 已存在 `/opt/release/bin/deploy.sh`
|
||
- `chatapp-user.service`
|
||
- `chatapp-pay.service`
|
||
- `chatapp-gateway.service`
|
||
|
||
## 下一步建议
|
||
|
||
你现在最合理的下一步是:
|
||
|
||
1. 把 [config/prod.yaml](/Users/zuozuo/Desktop/HY/chat-app-deploy-platform/config/prod.yaml) 的腾讯云凭证改成真实值
|
||
2. 用 `docker compose up -d --build` 跑起来
|
||
3. 在“构建任务”页面为 `user / pay / gateway` 创建构建任务
|
||
4. 构建成功后,在“部署记录”页面发起 `deploy / rollback / restart`
|