Skip to content

Commit 39f14c9

Browse files
authored
Update README.md
1 parent 459031f commit 39f14c9

File tree

1 file changed

+166
-131
lines changed

1 file changed

+166
-131
lines changed

.github/README.md

Lines changed: 166 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,188 +1,223 @@
1-
# GitHub Actions 工作流程
1+
# FileCodeBox · Go Edition
22

3-
本项目包含了完整的 CI/CD 工作流程,用于自动化构建、测试和发布
3+
> 一个专为自托管场景打造的高性能文件 / 文本分享平台,提供安全、可扩展、可插拔的“随手分享”体验
44
5-
## 工作流程概览
5+
---
66

7-
### 1. CI (持续集成) - `.github/workflows/ci.yml`
7+
## 📌 项目概览
88

9-
**触发条件:**
10-
- 推送到 `main``develop` 分支
11-
- 创建 Pull Request
9+
FileCodeBox 是一个使用 Go 实现的轻量级分享服务,核心目标是“部署简单、使用顺手、运营安心”。无论你想在团队内搭建一个文件投递站,还是希望为个人项目提供临时分享通道,都可以通过它快速上线并稳定运行。
1210

13-
**功能:**
14-
- 多版本 Go 测试 (1.20, 1.21)
15-
- 代码质量检查 (golangci-lint)
16-
- 安全扫描 (gosec)
17-
- 测试覆盖率报告
11+
### 你可以用它做什么?
1812

19-
### 2. Build and Release - `.github/workflows/build.yml`
13+
- 📁 **拖拽上传**,生成短链接后分享文件或文本片段
14+
- 🔐 **后台管理**,集中查看、搜索、统计、审核、删除分享内容
15+
- 🪶 **多存储后端**,根据需求切换本地/对象存储/WebDAV/OneDrive 等方案
16+
- ⚙️ **自定义配置**,调整限速、过期策略、主题皮肤,让系统和业务完美贴合
2017

21-
**触发条件:**
22-
- 推送标签 (v*.*.*)
23-
- 推送到 main 分支
24-
- Pull Request
18+
---
2519

26-
**功能:**
27-
- **多平台构建:**
28-
- Linux (amd64, arm64)
29-
- macOS (amd64, arm64)
30-
- Windows (amd64, arm64)
31-
- **Docker 镜像构建**
32-
- **自动发布:** 标签推送时自动创建 GitHub Release
20+
## 🌟 关键特性
3321

34-
### 3. Deploy - `.github/workflows/deploy.yml`
22+
| 分类 | 能力速览 |
23+
| --- | --- |
24+
| 性能 | Go 原生并发、分片上传、断点续传、秒传校验 |
25+
| 分享体验 | 文本 / 文件双通道、链接有效期控制、密码和访问次数限制 |
26+
| 管理后台 | 仪表板、文件列表、用户管理、存储面板、系统配置、维护工具 |
27+
| 安全 | 初始化向导、动态路由热载、JWT 管理登录、限流中间件、可选用户体系 |
28+
| 存储 | 本地磁盘、S3 兼容对象存储、WebDAV、OneDrive(均可扩展) |
29+
| 部署 | Docker / Docker Compose、systemd、Nginx 反代、跨平台二进制 |
30+
| 前端 | 主题系统(`themes/2025`)、自适应布局、可自定义静态资源 |
3531

36-
**触发条件:**
37-
- 发布新版本
38-
- 手动触发
32+
---
3933

40-
**功能:**
41-
- Docker 镜像发布到 Docker Hub
42-
- Docker 镜像发布到 GitHub Container Registry
34+
## 🧩 架构速写
4335

44-
## 使用指南
36+
```
37+
┌───────────────────────────────────────────────────────────┐
38+
│ Client │
39+
│ Web UI (themes) · 管理后台 · RESTful API · CLI · WebDAV │
40+
└───────────────▲───────────────────────────────▲───────────┘
41+
│ │
42+
Admin Console Public Sharing
43+
│ │
44+
┌──────────────┴───────────────────────────────┴─────────────┐
45+
│ FileCodeBox Server │
46+
│ │
47+
│ Routes ─ internal/routes Middleware │
48+
│ Handlers ─ internal/handlers RateLimit · Auth │
49+
│ Services ─ internal/services Chunk · Share · User │
50+
│ Repos ─ internal/repository GORM Data Access │
51+
│ Config ─ internal/config 动态配置管理 │
52+
└──────────────┬───────────────────────────────┬─────────────┘
53+
│ │
54+
Storage Manager Database (SQLite/MySQL/PG)
55+
└─ local / S3 / WebDAV / OneDrive · 可插拔
56+
```
4557

46-
### 🏗️ 日常开发
58+
初始化流程已经内置了“未初始化只允许访问 `/setup`”的安全护栏:
4759

48-
1. **推送代码**`main``develop` 分支会触发 CI 流程
49-
2. **创建 PR** 会运行完整的测试套件
50-
3. **推送到 main** 会额外触发构建流程
60+
1. 首次运行 → 自动跳转至 Setup 向导创建数据库 + 管理员
61+
2. 一旦初始化成功 → 所有用户请求 `/setup` 会被重定向至首页,同时拒绝重复初始化
5162

52-
### 📦 发布新版本
63+
---
64+
65+
## 🚀 快速起步
5366

54-
1. **创建标签:**
55-
```bash
56-
git tag -a v1.0.0 -m "Release version 1.0.0"
57-
git push origin v1.0.0
58-
```
67+
### 1. 环境要求
5968

60-
2. **自动执行:**
61-
- ✅ 构建多平台可执行文件
62-
- ✅ 构建 Docker 镜像
63-
- ✅ 创建 GitHub Release
64-
- ✅ 上传构建产物
69+
- **Go** 1.21 及以上(开发环境推荐 1.24+)
70+
- **SQLite / MySQL / PostgreSQL**(三选一,默认 SQLite)
71+
- 可选:Docker 20+、docker-compose v2、Make、Git
6572

66-
### 🐳 Docker 镜像
73+
### 2. 本地开发
6774

68-
**公开镜像:**
6975
```bash
70-
# Docker Hub
71-
docker pull filecodebox/filecodebox:latest
72-
docker pull filecodebox/filecodebox:v1.0.0
76+
# 拉取依赖
77+
go mod tidy
7378

74-
# GitHub Container Registry
75-
docker pull ghcr.io/zy84338719/filecodebox:latest
79+
# 运行服务
80+
go run ./...
81+
# 或编译后运行
82+
make build && ./bin/filecodebox
7683
```
7784

78-
### 📋 配置要求
85+
服务默认监听 `http://127.0.0.1:12345`。首次访问会被引导到 `/setup` 完成初始化。
7986

80-
为了完整使用所有功能,需要在 GitHub 仓库中配置以下 Secrets:
87+
### 3. Docker / Compose
8188

82-
#### 必需的 Secrets
89+
```bash
90+
# Docker
91+
docker build -t filecodebox .
92+
docker run -d \
93+
--name filecodebox \
94+
-p 12345:12345 \
95+
-v $(pwd)/data:/data \
96+
filecodebox
97+
98+
# docker-compose
99+
cp docker-compose.yml docker-compose.override.yml # 如需自定义
100+
docker-compose up -d
101+
```
83102

84-
| Secret Name | 描述 | 用途 |
85-
|-------------|------|------|
86-
| `DOCKER_USERNAME` | Docker Hub 用户名 | 发布 Docker 镜像 |
87-
| `DOCKER_PASSWORD` | Docker Hub 密码/Token | 发布 Docker 镜像 |
103+
**生产环境建议**
88104

89-
#### 可选的 Secrets
105+
- 使用 `docker-compose.prod.yml` + `.env` 管理数据库凭证
106+
- 通过 Nginx/Traefik 等反向代理启用 HTTPS 与缓存策略
107+
-`data/`、数据库与对象存储做持久化与定期备份
90108

91-
| Secret Name | 描述 | 用途 |
92-
|-------------|------|------|
93-
| `CODECOV_TOKEN` | Codecov Token | 上传测试覆盖率 |
109+
### 4. CLI 管理
94110

95-
### 🔧 自定义构建
111+
```bash
112+
./filecodebox admin user list
113+
./filecodebox admin stats
114+
```
96115

97-
#### 修改构建平台
116+
所有 CLI 子命令定义在 `internal/cli`,适合在自动化运维或脚本中使用。
98117

99-
编辑 `.github/workflows/build.yml` 中的 `matrix` 部分:
118+
---
100119

101-
```yaml
102-
strategy:
103-
matrix:
104-
include:
105-
- goos: linux
106-
goarch: amd64
107-
output: filecodebox-linux-amd64
108-
# 添加或删除平台...
109-
```
120+
## 🛠️ 配置指南
110121

111-
#### 修改 Docker 配置
122+
所有配置均由 `config.yml` + 数据库动态配置组合而成:
112123

113-
编辑 `Dockerfile` 和相关工作流程文件。
124+
| 配置域 | 说明 |
125+
| --- | --- |
126+
| `base` | 服务端口、站点名称、DataPath |
127+
| `storage` | 存储类型、凭证、路径 |
128+
| `transfer` | 上传限额、断点续传、分片策略 |
129+
| `user` | 用户系统开关、配额、注册策略 |
130+
| `mcp` | 消息通道 / WebSocket 服务配置 |
131+
| `ui` | 主题、背景、页面说明文案 |
114132

115-
#### 自定义发布说明
133+
初始化完成后,配置会同步写入数据库并可在后台在线修改。每次操作都走事务保证一致性。
116134

117-
修改 `.github/workflows/build.yml` 中的 `Generate release notes` 步骤
135+
> **提示**:未初始化时,仅开放 `/setup`、部分静态资源与 `GET /user/system-info`,避免系统在部署初期被误用
118136
119-
## 构建产物
137+
---
120138

121-
### 可执行文件
139+
## 🧑‍💻 管理后台一览
122140

123-
每次发布会生成以下文件:
141+
- **仪表盘**:吞吐趋势、存储占用、系统告警
142+
- **文件管理**:模糊搜索、批量操作、访问日志
143+
- **用户管理**:启用用户系统、分配配额、状态冻结
144+
- **存储配置**:即时切换存储后端,并对接健康检查
145+
- **系统配置**:修改站点基础信息、主题、分享策略
146+
- **维护工具**:清理过期数据、生成导出、查看审计日志
124147

125-
- `filecodebox-linux-amd64.tar.gz`
126-
- `filecodebox-linux-arm64.tar.gz`
127-
- `filecodebox-darwin-amd64.tar.gz`
128-
- `filecodebox-darwin-arm64.tar.gz`
129-
- `filecodebox-windows-amd64.zip`
130-
- `filecodebox-windows-arm64.zip`
148+
访问入口:`/admin/`,登录采用 JWT + Bearer Token。自 2025 版起,所有 `admin` 静态资源均由后台鉴权动态下发,避免公共缓存泄露。
131149

132-
### Docker 镜像
150+
---
133151

134-
- 支持 `linux/amd64``linux/arm64` 架构
135-
- 多标签发布:`latest`, `v1.0.0`, `v1.0`, `v1`
152+
## 📦 存储与上传
136153

137-
## 版本信息
154+
| 类型 | 说明 |
155+
| --- | --- |
156+
| `local` | 默认方案,数据持久化在 `data/uploads` |
157+
| `s3` | 兼容 S3 的对象存储(如 MinIO、阿里云 OSS) |
158+
| `webdav` | 适合挂载 NAS / Nextcloud |
159+
| `onedrive` | 利用 Microsoft Graph 的云端存储 |
138160

139-
构建的可执行文件包含版本信息
161+
上传采用“分片 + 秒传 + 断点续传”的三段式策略
140162

141-
```bash
142-
./filecodebox -version
143-
```
163+
1. `POST /chunk/upload/init/` 初始化会返回 upload_id
164+
2. 并行调用 `POST /chunk/upload/chunk/:id/:idx`
165+
3. 最后 `POST /chunk/upload/complete/:id` 合并并校验
144166

145-
输出示例:
146-
```
147-
FileCodeBox v1.0.0
148-
Commit: a1b2c3d4e5f6...
149-
Built: 2024-01-01T12:00:00Z
150-
Go Version: go1.21+
151-
```
167+
上传状态可通过 `GET /chunk/upload/status/:id` 观察,也可主动 `DELETE /chunk/upload/cancel/:id` 终止。
168+
169+
---
170+
171+
## 📚 API 与 SDK
172+
173+
虽然 FileCodeBox 主要针对 Web 场景,但服务本身围绕 REST API 架构,便于集成:
174+
175+
| 模块 | 典型接口 |
176+
| --- | --- |
177+
| 分享 | `POST /share/text/` · `POST /share/file/` · `GET /share/select/?code=...` |
178+
| 分片 | `POST /chunk/upload/init/` · `POST /chunk/upload/complete/:id` |
179+
| 用户 | `POST /user/login` · `POST /user/register`(启用用户系统时) |
180+
| 管理 | `GET /admin/stats` · `POST /admin/files/delete`|
181+
| 健康检查 | `GET /health` |
182+
183+
API 文档位于 `docs/swagger-enhanced.yaml`,可通过 `go install github.com/swaggo/swag/cmd/swag@latest` 生成最新文档。
152184

153-
## 故障排除
185+
---
186+
187+
## 🧑‍🔬 本地开发与贡献
188+
189+
1. Fork & clone 仓库
190+
2. `make dev`(或参考 `Makefile`
191+
3. 运行测试:`go test ./...`
192+
4. 提交前确保通过 `golangci-lint`/`go fmt`(在 CI 中亦会执行)
193+
194+
项目保持模块化、接口清晰,欢迎贡献以下方向:
154195

155-
### 常见问题
196+
- 新的存储适配器 / 用户登录方式
197+
- 管理后台的交互优化与国际化支持
198+
- 自动化部署脚本(Helm / Terraform)
199+
- 更丰富的 API 客户端(Python/Node/Swift)
156200

157-
1. **Docker 推送失败**
158-
- 检查 `DOCKER_USERNAME``DOCKER_PASSWORD` 是否正确配置
159-
- 确认 Docker Hub 仓库权限
201+
提交 PR 时请附上:变更说明、测试方式、潜在影响。如涉及迁移,请编写相应文档放在 `docs/`
160202

161-
2. **构建失败**
162-
- 检查 Go 版本兼容性
163-
- 查看构建日志中的具体错误信息
203+
---
204+
205+
## 🗺️ 路线图(节选)
164206

165-
3. **测试失败**
166-
- 确保所有依赖都在 `go.mod` 中正确声明
167-
- 检查代码质量问题
207+
- [ ] Webhook / EventHook(上传完成、分享到期、超额告警)
208+
- [ ] 更细颗粒度的访问控制(到期提醒、下载密码、白名单)
209+
- [ ] 多节点部署指南(对象存储 + Redis + MySQL)
210+
- [ ] 管理后台模块化主题系统 & 深色主题
211+
- [ ] CLI 支持导入/导出配置模板
168212

169-
### 调试技巧
213+
欢迎在 Issues 区讨论新需求或报告缺陷。
214+
215+
---
170216

171-
1. **查看工作流日志:** GitHub Actions 标签页
172-
2. **本地测试:**
173-
```bash
174-
# 运行测试
175-
go test ./...
176-
177-
# 代码检查
178-
golangci-lint run
179-
180-
# 构建测试
181-
go build -v ./...
182-
```
217+
## 📄 许可证
183218

184-
3. **手动触发:** 在 Actions 标签页可以手动触发部署工作流
219+
MIT License © FileCodeBox Contributors
185220

186221
---
187222

188-
更多信息请参考 [GitHub Actions 文档](https://docs.github.com/en/actions)
223+
> 💬 有任何问题、部署疑问或定制需求,欢迎通过 Issue / Discussions / 邮件联系。我们乐于协助每一个想把 FileCodeBox 搭建成“团队内部效率神器”的你

0 commit comments

Comments
 (0)