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

+133
View File
@@ -0,0 +1,133 @@
# LokiDeploy - K8s Loki Deployment Platform
A lightweight **Gin + React + JSON file storage** platform for deploying Grafana Loki log aggregation on Kubernetes clusters or bare-metal hosts via SSH.
## Features
- **K8s Cluster Management** - Add clusters via kubeconfig, auto-validate connectivity
- **SSH Host Management** - Password or key-based authentication
- **Storage Configuration** - S3, OSS, MinIO, RustFS backends
- **One-Click Loki Deploy** - Helm chart / YAML manifest / Binary
- **Deployment Logs** - Real-time log streaming
- **Web Terminal** - Browser-based remote command execution
- **Single Binary** - 13MB zero-dependency executable
- **Security** - Argon2 password hashing, AES credential encryption, JWT auth
## Quick Start
### Prerequisites
- Linux/macOS with `kubectl` and `helm` installed (for K8s deployment)
- `curl` or `wget` on target hosts
- Go 1.23+ (for building from source)
- Node.js 20+ (for building frontend)
### Option 1: Build & Run (Recommended)
```bash
git clone https://github.com/your/lokideploy.git
cd lokideploy
# Build everything
bash build.sh
# Start frontend (:3000) + backend (:8080)
./run.sh
# Open http://localhost:3000
# Default: admin / admin123
```
### Option 2: Docker Compose
```bash
cd lokideploy
docker compose up -d
# Open http://localhost:8080
```
### Option 3: Development Mode (Hot Reload)
```bash
# Terminal 1 - Backend
cd backend
go run .
# Terminal 2 - Frontend
cd frontend
npm install
npm run dev
# Opens http://localhost:3000, proxies API to localhost:8080
```
## Architecture
```
Frontend (React + TypeScript + Tailwind CSS) [Port 3000 dev / 8080 prod]
|
| HTTP/REST + JWT Bearer Token
v
Backend (Go + Gin) [Port 8080]
|
+---> JSON File DB (data/lokideploy.json)
+---> K8s CLI (kubectl / helm)
+---> SSH Client (golang.org/x/crypto/ssh)
+---> Loki Deployer (Helm Chart / YAML / Binary)
```
## API Endpoints
Base URL: `/api/v1`
| Method | Endpoint | Auth | Description |
|--------|----------|------|-------------|
| POST | `/auth/login` | No | Login, get JWT token |
| GET | `/auth/user` | Yes | Current user info |
| POST | `/auth/password` | Yes | Change password |
| GET/POST | `/clusters` | Yes | Cluster CRUD |
| POST | `/clusters/:id/validate` | Yes | Validate cluster |
| GET/POST | `/hosts` | Yes | Host CRUD |
| POST | `/hosts/:id/execute` | Yes | Remote command |
| GET/POST | `/storages` | Yes | Storage config CRUD |
| GET/POST | `/deployments` | Yes | Deployment CRUD |
| POST | `/deployments/:id/deploy` | Yes | Start deployment |
| POST | `/deployments/:id/stop` | Yes | Stop deployment |
| GET | `/deployments/:id/logs` | Yes | Deployment logs |
| GET | `/deployments/stats` | Yes | Statistics |
## Deployment Modes
| Mode | Target | Description |
|------|--------|-------------|
| `k8s-helm` | K8s Cluster | Official Grafana Helm chart |
| `k8s-yaml` | K8s Cluster | Raw Kubernetes manifests |
| `host-binary` | Linux Host | Binary + systemd via SSH |
## Storage Backends
| Type | Endpoint Example |
|------|-----------------|
| S3 | `s3.amazonaws.com` |
| OSS | `oss-cn-hangzhou.aliyuncs.com` |
| MinIO | `http://minio:9000` |
| RustFS | `http://rustfs:8080` |
## Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `SERVER_PORT` | `8080` | HTTP server port |
| `DATA_DIR` | `./data` | Data storage directory |
| `JWT_SECRET` | `lokideploy-secret-key...` | JWT signing key |
## Security
- **Argon2** password hashing
- **AES-GCM** credential encryption
- **JWT** token authentication
- **RBAC** role-based access control
- API responses sanitized (no passwords, kubeconfig, or keys exposed)
## License
MIT License