feat: LokiDeploy 初始提交 - 轻量级 K8s Loki 部署平台

Go(Gin) + React(Vite + shadcn/ui + Tailwind) 前后端分离,全中文 UI

- 集群管理:Kubeconfig / Token 双接入,kubectl + helm 部署
- 主机管理:SSH 密钥 / 密码双认证,CPU/内存/磁盘使用率监控,SSH 错误中文友好提示
- 存储配置、部署管理、系统设置
- Docker 镜像内置 kubectl + helm,开箱即用
- run.sh 一键启停(start/stop/restart/status)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Logan.LiandClaude committed 2026-06-29 17:03:57 +08:00
commit 2a93de600d
134 files changed
+19595

No files matched your search

+28
View File
@@ -0,0 +1,28 @@
import { request } from './client';
import type { PageData, LokiDeployment, DeploymentLog, DashboardStats, CreateDeploymentRequest } from '@/types';
export const deploymentApi = {
list: (page = 1, pageSize = 10) =>
request<PageData<LokiDeployment>>(`/deployments?page=${page}&pageSize=${pageSize}`),
get: (id: number) => request<LokiDeployment>(`/deployments/${id}`),
create: (data: CreateDeploymentRequest) =>
request<LokiDeployment>('/deployments', { method: 'POST', body: JSON.stringify(data) }),
update: (id: number, data: Record<string, unknown>) =>
request<{ message: string }>(`/deployments/${id}`, { method: 'PUT', body: JSON.stringify(data) }),
remove: (id: number) => request<{ message: string }>(`/deployments/${id}`, { method: 'DELETE' }),
deploy: (id: number) => request<{ message: string }>(`/deployments/${id}/deploy`, { method: 'POST' }),
stop: (id: number) => request<{ message: string }>(`/deployments/${id}/stop`, { method: 'POST' }),
restart: (id: number) => request<{ message: string }>(`/deployments/${id}/restart`, { method: 'POST' }),
logs: (id: number, page = 1, pageSize = 50) =>
request<PageData<DeploymentLog>>(`/deployments/${id}/logs?page=${page}&pageSize=${pageSize}`),
stats: () => request<DashboardStats>('/deployments/stats'),
};