Files
OpenFlare/README_zh.md
T
2026-06-09 21:45:57 +08:00

12 KiB
Raw Blame History

wavelet

🚀 现代化、生产就绪的全栈应用脚手架

English

License: Apache2.0 Go Version Next.js React

📖 项目简介

wavelet 是一个通用型、生产就绪的现代全栈脚手架,后端采用 Go(Gin + GORM),前端采用 Next.js(App Router + Shadcn UI)。项目开箱即用,内置构建现代 SaaS、内部工具或开发者平台所需的核心基础设施。

项目设计理念是 框架优先、业务中立:您可以在沿用经过实战检验的底层基础设施的同时,自由接入自己的业务逻辑。

✨ 主要特性

  • 🔐 多认证方式 — 本地账号密码登录/注册 + 可插拔 OIDC/OAuth2 认证源(支持同时配置多个认证源)
  • 🗝️ 个人访问令牌 — API Key 管理,支持程序化接口访问;兼容 Authorization: Bearer 和 X-Access-Token 请求头
  • 👤 用户管理 — 管理后台提供用户列表、搜索筛选、启用/禁用账号等功能
  • ⚙️ 动态系统配置 — KV 系统配置管理,支持实时变更,可通过管理后台界面直接操作
  • 📋 异步任务队列 — 基于 Asynq(Redis 驱动)的后台任务处理系统,含任务调度面板
  • 📁 S3 文件存储 — 通过 S3 兼容 API 统一处理文件上传/下载,支持本地磁盘缓存
  • 📊 可观测性 — 结构化日志(Zap)+ 分布式链路追踪(OpenTelemetry)
  • 🎨 现代化 UI — 基于 Tailwind CSS 4 和 Shadcn UI 构建的响应式、支持深色模式的设计系统
  • 📖 内置文档中心 — 集成文档门户,包含使用指南、接口文档、隐私政策和服务条款

🏗️ 架构概览

┌─────────────────┐    ┌─────────────────────────────┐    ┌─────────────────┐
│   前端           │    │            后端              │    │   数据库         │
│   (Next.js)     │◄──►│           (Go)               │◄──►│  (PostgreSQL)   │
│                 │    │                              │    │                 │
│ • React 19      │    │ • Gin HTTP 框架              │    │ • PostgreSQL    │
│ • TypeScript    │    │ • GORM ORM                   │    │ • Redis 缓存    │
│ • Tailwind 4    │    │ • 多认证源适配               │    │                 │
│ • Shadcn UI     │    │ • AccessToken 中间件         │    │                 │
│                 │    │ • Asynq 任务队列             │    │                 │
│                 │    │ • OpenTelemetry 链路追踪     │    │                 │
│                 │    │ • Swagger 接口文档           │    │                 │
└─────────────────┘    └─────────────────────────────┘    └─────────────────┘
                                      │
                           ┌──────────┴──────────┐
                           │   多进程 CLI 入口    │
                           │  (Cobra + Viper)     │
                           │ • api      (HTTP)    │
                           │ • worker   (队列)    │
                           │ • scheduler(定时)    │
                           └─────────────────────┘

🛠️ 技术栈

后端

  • Go 1.25+ — 主语言
  • Gin — HTTP Web 框架
  • GORM — ORM,支持 PostgreSQL 和 ClickHouse
  • Redis — 缓存、Session 存储、任务队列后端
  • Asynq — 分布式任务队列(Redis 驱动)
  • Cobra + Viper — CLI 入口 + 配置管理
  • OpenTelemetry — 分布式链路追踪与可观测性
  • Zap — 结构化高性能日志
  • Swagger (Swaggo) — 自动生成 API 文档
  • AWS SDK v2 — S3 兼容文件存储
  • Snowflake — 分布式 ID 生成

前端

📋 环境要求

  • Go >= 1.25
  • Node.js >= 18.0
  • PostgreSQL >= 14
  • Redis >= 6.0
  • pnpm >= 8.0(推荐)

🚀 快速开始

1. 克隆仓库

git clone https://github.com/Rain-kl/Wavelet.git refreshing
cd refreshing

2. 配置环境

cp config.example.yaml config.yaml

编辑 config.yaml,配置数据库和 Redis。OIDC 认证源统一在管理后台的系统设置页面运行时配置。

3. 初始化数据库

# 启动本地依赖服务(PostgreSQL + Redis)
docker compose up -d

# 可选:同时启动 ClickHouse
docker compose --profile clickhouse up -d

# 如果使用外部 PostgreSQL,而不是 Docker 内置服务,则手动创建数据库
createdb -h <主机> -p 5432 -U postgres refreshing

# 数据库表结构在首次启动时自动迁移,无需手动执行

4. 启动后端

# 安装 Go 依赖
go mod tidy

# 生成 Swagger 接口文档
make swagger

# 启动 HTTP API 服务器
go run main.go api

后端也支持独立运行 scheduler 和 worker 进程来处理异步任务:

go run main.go scheduler   # 定时任务调度器
go run main.go worker      # Asynq 任务处理工作进程

5. 启动前端

cd frontend

# 安装依赖
pnpm install

# 启动开发服务器(Turbopack)
pnpm dev

6. 访问应用

服务 地址
前端界面 http://localhost:3000
Swagger 接口文档 http://localhost:8000/swagger/index.html
健康检查 http://localhost:8000/api/health

⚙️ 配置说明

主要配置项(完整说明请参考 config.example.yaml):

配置项 说明 示例
app.addr 后端监听地址 :8000
database.host PostgreSQL 主机 127.0.0.1
database.database 数据库名称 refreshing
redis.host Redis 主机 127.0.0.1
storage.endpoint S3 兼容存储端点 s3.amazonaws.com

🔧 开发指南

后端

# 运行 API 服务器
go run main.go api

# 运行定时任务调度器
go run main.go scheduler

# 运行异步任务工作进程
go run main.go worker

# 修改 Controller 后重新生成 Swagger 文档(必须执行)
make swagger

# 代码格式化与检查
make tidy

前端

cd frontend

# 开发模式(Turbopack)
pnpm dev

# 构建生产版本
pnpm build

# 启动生产服务器
pnpm start

# 代码 Lint 和格式化
pnpm lint
pnpm format

📁 项目结构

wavelet/
├── main.go                  # 程序入口(委托给 internal/cmd)
├── config.example.yaml      # 配置模板
├── Makefile                 # 常用命令(swagger、tidy、license、cross-build)
├── docker/                  # Docker 镜像构建文件(集成/前端/后端)
├── docs/                    # Swagger 自动生成文档
├── frontend/                # Next.js 前端应用
│   ├── app/                 # App Router 页面
│   ├── components/          # React 组件(ui、common、layout)
│   ├── lib/services/        # API 服务层
│   └── types/               # TypeScript 类型定义
└── internal/                # Go 后端(private)
    ├── cmd/                 # CLI 命令(api、scheduler、worker)
    ├── apps/                # 业务模块(oauth、user、admin、upload)
    ├── model/               # GORM 实体与业务方法
    ├── router/              # HTTP 路由注册
    ├── task/                # 异步任务定义与工作进程
    ├── db/                  # 数据库与 Redis 初始化
    ├── storage/             # S3 文件存储抽象层
    └── common/              # 公共工具与响应封装

📚 接口文档

Swagger 接口文档在后端启动后自动可用:

http://localhost:8000/swagger/index.html

前端文档中心(路径 /docs)内置以下内容:

  • 使用指南 — 分步入门教程
  • 接口文档 — 详细接口说明
  • 隐私政策 — 隐私政策模板(请按需自定义)
  • 服务条款 — 服务条款模板

🧪 测试

# 后端测试
go test ./...

# 前端 Lint
cd frontend && pnpm lint

🚀 部署

跨平台二进制编译

一条命令构建全部 6 个平台的静态二进制文件(Linux / macOS / Windows × amd64 / arm64)。 前端已内嵌到每个二进制文件中,无需单独部署。

前提条件: 已安装 Docker 且启用 BuildKit(Docker 23+ 默认开启)。

# 构建全部 6 个二进制文件 → ./bin/
make cross-build

# 指定版本号
make cross-build VERSION=v1.2.3

# 只构建指定系统(两种架构均会构建)
make cross-build GOOS=linux
make cross-build GOOS=darwin
make cross-build GOOS=windows

# 只构建指定架构(所有系统均会构建)
make cross-build GOARCH=amd64
make cross-build GOARCH=arm64

# 同时指定系统和架构 — 只生成单个文件
make cross-build GOOS=linux GOARCH=arm64
make cross-build GOOS=darwin GOARCH=amd64 VERSION=v1.2.3

输出到 ./bin/ 目录:

文件名 平台
wavelet_linux_amd64 Linux x86-64
wavelet_linux_arm64 Linux ARM64
wavelet_darwin_amd64 macOS Intel
wavelet_darwin_arm64 macOS Apple Silicon
wavelet_windows_amd64.exe Windows x86-64
wavelet_windows_arm64.exe Windows ARM64

版本号可通过 wavelet --version 在运行时查看。

Docker

# 构建镜像
docker build -t refreshing .

# 运行(通过卷挂载传入配置文件)
docker run -d -p 8000:8000 \
  -v $(pwd)/config.yaml:/app/config.yaml \
  refreshing api

生产环境

  1. 构建前端资源:

    cd frontend && pnpm build
    
  2. 编译后端程序:

    go build -o refreshing main.go
    
  3. 配置生产环境的 config.yaml。

  4. 启动服务:

    ./refreshing api        # HTTP API
    ./refreshing scheduler  # 定时调度器(可选)
    ./refreshing worker     # 任务工作进程(可选)
    

🤝 贡献指南

我们欢迎社区贡献!请在提交代码前阅读以下文档:

贡献流程

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/your-feature)
  3. 提交更改 (git commit -am 'Add your feature')
  4. 推送到分支 (git push origin feature/your-feature)
  5. 创建 Pull Request

📄 许可证

本项目基于 Apache 2.0 许可证 开源。