前言

记录我用 Flutter + SpringBoot 开发一键部署工具的过程,实现类似 Vercel 的国内版部署体验。


为什么做这个?

部署一个全栈项目太麻烦了:

  • 前端要构建、上传、配置 CDN
  • 后端要打包、推镜像、配置 K8s
  • 数据库要迁移、备份、监控

Vercel 很好,但只支持前端。国内访问还慢。

所以我想做一个:前端+后端+数据库,一键部署,国内访问快。


核心功能

1. 一键部署

1
deploy-cli push

就这一条命令,自动完成:

  • 检测项目类型(Flutter/Spring Boot/Node.js)
  • 构建项目
  • 创建 Docker 镜像
  • 推送到镜像仓库
  • 部署到云服务器
  • 配置域名和 HTTPS

2. 多环境支持

1
2
3
4
5
6
7
8
9
10
11
12
# deploy.yaml
environments:
dev:
replicas: 1
resources:
cpu: 0.5
memory: 512Mi
prod:
replicas: 3
resources:
cpu: 2
memory: 2Gi

3. 自动扩缩容

1
2
3
4
scaling:
minReplicas: 1
maxReplicas: 10
targetCPU: 70

技术架构

客户端(Flutter)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class DeployService {
Future<DeployResult> deploy(DeployConfig config) async {
// 1. 构建项目
await buildProject(config);

// 2. 创建镜像
await createImage(config);

// 3. 推送镜像
await pushImage(config);

// 4. 部署到集群
await deployToCluster(config);

// 5. 配置域名
await setupDomain(config);

return DeployResult.success();
}
}

服务端(Spring Boot)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Service
public class DeployService {
public DeployResult deploy(DeployRequest request) {
// 1. 验证配置
validateConfig(request);

// 2. 调用 K8s API
k8sClient.deploy(request.getDeployment());

// 3. 配置 Ingress
k8sClient.setupIngress(request.getDomain());

// 4. 返回结果
return DeployResult.success();
}
}

部署流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
用户点击"部署"


┌──────────────────┐
│ 检测项目类型 │
└─────────────────┘


┌──────────────────┐
│ 执行构建脚本 │
│ (flutter build)
└────────┬─────────┘


──────────────────┐
│ 创建 Docker 镜像 │
└────────┬─────────


┌──────────────────┐
│ 推送到镜像仓库 │
└────────┬─────────┘


┌──────────────────
│ 部署到 K8s 集群 │
└────────┬─────────┘


┌──────────────────┐
│ 配置域名+HTTPS │
└────────┬─────────┘


部署完成!

与 Vercel 的对比

功能 Vercel 我的工具
前端部署
后端部署
数据库
国内访问
价格 免费额度少 按需付费

总结

做国内版 Vercel,但支持全栈部署。

让开发者专注于写代码,部署的事交给工具。


记录我用 Flutter + SpringBoot 开发一键部署工具的过程,实现类似 Vercel 的国内版部署体验。