|
1 | | -# GitHub Actions 工作流程 |
| 1 | +# FileCodeBox · Go Edition |
2 | 2 |
|
3 | | -本项目包含了完整的 CI/CD 工作流程,用于自动化构建、测试和发布。 |
| 3 | +> 一个专为自托管场景打造的高性能文件 / 文本分享平台,提供安全、可扩展、可插拔的“随手分享”体验。 |
4 | 4 |
|
5 | | -## 工作流程概览 |
| 5 | +--- |
6 | 6 |
|
7 | | -### 1. CI (持续集成) - `.github/workflows/ci.yml` |
| 7 | +## 📌 项目概览 |
8 | 8 |
|
9 | | -**触发条件:** |
10 | | -- 推送到 `main` 或 `develop` 分支 |
11 | | -- 创建 Pull Request |
| 9 | +FileCodeBox 是一个使用 Go 实现的轻量级分享服务,核心目标是“部署简单、使用顺手、运营安心”。无论你想在团队内搭建一个文件投递站,还是希望为个人项目提供临时分享通道,都可以通过它快速上线并稳定运行。 |
12 | 10 |
|
13 | | -**功能:** |
14 | | -- 多版本 Go 测试 (1.20, 1.21) |
15 | | -- 代码质量检查 (golangci-lint) |
16 | | -- 安全扫描 (gosec) |
17 | | -- 测试覆盖率报告 |
| 11 | +### 你可以用它做什么? |
18 | 12 |
|
19 | | -### 2. Build and Release - `.github/workflows/build.yml` |
| 13 | +- 📁 **拖拽上传**,生成短链接后分享文件或文本片段 |
| 14 | +- 🔐 **后台管理**,集中查看、搜索、统计、审核、删除分享内容 |
| 15 | +- 🪶 **多存储后端**,根据需求切换本地/对象存储/WebDAV/OneDrive 等方案 |
| 16 | +- ⚙️ **自定义配置**,调整限速、过期策略、主题皮肤,让系统和业务完美贴合 |
20 | 17 |
|
21 | | -**触发条件:** |
22 | | -- 推送标签 (v*.*.*) |
23 | | -- 推送到 main 分支 |
24 | | -- Pull Request |
| 18 | +--- |
25 | 19 |
|
26 | | -**功能:** |
27 | | -- **多平台构建:** |
28 | | - - Linux (amd64, arm64) |
29 | | - - macOS (amd64, arm64) |
30 | | - - Windows (amd64, arm64) |
31 | | -- **Docker 镜像构建** |
32 | | -- **自动发布:** 标签推送时自动创建 GitHub Release |
| 20 | +## 🌟 关键特性 |
33 | 21 |
|
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`)、自适应布局、可自定义静态资源 | |
35 | 31 |
|
36 | | -**触发条件:** |
37 | | -- 发布新版本 |
38 | | -- 手动触发 |
| 32 | +--- |
39 | 33 |
|
40 | | -**功能:** |
41 | | -- Docker 镜像发布到 Docker Hub |
42 | | -- Docker 镜像发布到 GitHub Container Registry |
| 34 | +## 🧩 架构速写 |
43 | 35 |
|
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 | +``` |
45 | 57 |
|
46 | | -### 🏗️ 日常开发 |
| 58 | +初始化流程已经内置了“未初始化只允许访问 `/setup`”的安全护栏: |
47 | 59 |
|
48 | | -1. **推送代码** 到 `main` 或 `develop` 分支会触发 CI 流程 |
49 | | -2. **创建 PR** 会运行完整的测试套件 |
50 | | -3. **推送到 main** 会额外触发构建流程 |
| 60 | +1. 首次运行 → 自动跳转至 Setup 向导创建数据库 + 管理员 |
| 61 | +2. 一旦初始化成功 → 所有用户请求 `/setup` 会被重定向至首页,同时拒绝重复初始化 |
51 | 62 |
|
52 | | -### 📦 发布新版本 |
| 63 | +--- |
| 64 | + |
| 65 | +## 🚀 快速起步 |
53 | 66 |
|
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. 环境要求 |
59 | 68 |
|
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 |
65 | 72 |
|
66 | | -### 🐳 Docker 镜像 |
| 73 | +### 2. 本地开发 |
67 | 74 |
|
68 | | -**公开镜像:** |
69 | 75 | ```bash |
70 | | -# Docker Hub |
71 | | -docker pull filecodebox/filecodebox:latest |
72 | | -docker pull filecodebox/filecodebox:v1.0.0 |
| 76 | +# 拉取依赖 |
| 77 | +go mod tidy |
73 | 78 |
|
74 | | -# GitHub Container Registry |
75 | | -docker pull ghcr.io/zy84338719/filecodebox:latest |
| 79 | +# 运行服务 |
| 80 | +go run ./... |
| 81 | +# 或编译后运行 |
| 82 | +make build && ./bin/filecodebox |
76 | 83 | ``` |
77 | 84 |
|
78 | | -### 📋 配置要求 |
| 85 | +服务默认监听 `http://127.0.0.1:12345`。首次访问会被引导到 `/setup` 完成初始化。 |
79 | 86 |
|
80 | | -为了完整使用所有功能,需要在 GitHub 仓库中配置以下 Secrets: |
| 87 | +### 3. Docker / Compose |
81 | 88 |
|
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 | +``` |
83 | 102 |
|
84 | | -| Secret Name | 描述 | 用途 | |
85 | | -|-------------|------|------| |
86 | | -| `DOCKER_USERNAME` | Docker Hub 用户名 | 发布 Docker 镜像 | |
87 | | -| `DOCKER_PASSWORD` | Docker Hub 密码/Token | 发布 Docker 镜像 | |
| 103 | +**生产环境建议**: |
88 | 104 |
|
89 | | -#### 可选的 Secrets |
| 105 | +- 使用 `docker-compose.prod.yml` + `.env` 管理数据库凭证 |
| 106 | +- 通过 Nginx/Traefik 等反向代理启用 HTTPS 与缓存策略 |
| 107 | +- 将 `data/`、数据库与对象存储做持久化与定期备份 |
90 | 108 |
|
91 | | -| Secret Name | 描述 | 用途 | |
92 | | -|-------------|------|------| |
93 | | -| `CODECOV_TOKEN` | Codecov Token | 上传测试覆盖率 | |
| 109 | +### 4. CLI 管理 |
94 | 110 |
|
95 | | -### 🔧 自定义构建 |
| 111 | +```bash |
| 112 | +./filecodebox admin user list |
| 113 | +./filecodebox admin stats |
| 114 | +``` |
96 | 115 |
|
97 | | -#### 修改构建平台 |
| 116 | +所有 CLI 子命令定义在 `internal/cli`,适合在自动化运维或脚本中使用。 |
98 | 117 |
|
99 | | -编辑 `.github/workflows/build.yml` 中的 `matrix` 部分: |
| 118 | +--- |
100 | 119 |
|
101 | | -```yaml |
102 | | -strategy: |
103 | | - matrix: |
104 | | - include: |
105 | | - - goos: linux |
106 | | - goarch: amd64 |
107 | | - output: filecodebox-linux-amd64 |
108 | | - # 添加或删除平台... |
109 | | -``` |
| 120 | +## 🛠️ 配置指南 |
110 | 121 |
|
111 | | -#### 修改 Docker 配置 |
| 122 | +所有配置均由 `config.yml` + 数据库动态配置组合而成: |
112 | 123 |
|
113 | | -编辑 `Dockerfile` 和相关工作流程文件。 |
| 124 | +| 配置域 | 说明 | |
| 125 | +| --- | --- | |
| 126 | +| `base` | 服务端口、站点名称、DataPath | |
| 127 | +| `storage` | 存储类型、凭证、路径 | |
| 128 | +| `transfer` | 上传限额、断点续传、分片策略 | |
| 129 | +| `user` | 用户系统开关、配额、注册策略 | |
| 130 | +| `mcp` | 消息通道 / WebSocket 服务配置 | |
| 131 | +| `ui` | 主题、背景、页面说明文案 | |
114 | 132 |
|
115 | | -#### 自定义发布说明 |
| 133 | +初始化完成后,配置会同步写入数据库并可在后台在线修改。每次操作都走事务保证一致性。 |
116 | 134 |
|
117 | | -修改 `.github/workflows/build.yml` 中的 `Generate release notes` 步骤。 |
| 135 | +> **提示**:未初始化时,仅开放 `/setup`、部分静态资源与 `GET /user/system-info`,避免系统在部署初期被误用。 |
118 | 136 |
|
119 | | -## 构建产物 |
| 137 | +--- |
120 | 138 |
|
121 | | -### 可执行文件 |
| 139 | +## 🧑💻 管理后台一览 |
122 | 140 |
|
123 | | -每次发布会生成以下文件: |
| 141 | +- **仪表盘**:吞吐趋势、存储占用、系统告警 |
| 142 | +- **文件管理**:模糊搜索、批量操作、访问日志 |
| 143 | +- **用户管理**:启用用户系统、分配配额、状态冻结 |
| 144 | +- **存储配置**:即时切换存储后端,并对接健康检查 |
| 145 | +- **系统配置**:修改站点基础信息、主题、分享策略 |
| 146 | +- **维护工具**:清理过期数据、生成导出、查看审计日志 |
124 | 147 |
|
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` 静态资源均由后台鉴权动态下发,避免公共缓存泄露。 |
131 | 149 |
|
132 | | -### Docker 镜像 |
| 150 | +--- |
133 | 151 |
|
134 | | -- 支持 `linux/amd64` 和 `linux/arm64` 架构 |
135 | | -- 多标签发布:`latest`, `v1.0.0`, `v1.0`, `v1` |
| 152 | +## 📦 存储与上传 |
136 | 153 |
|
137 | | -## 版本信息 |
| 154 | +| 类型 | 说明 | |
| 155 | +| --- | --- | |
| 156 | +| `local` | 默认方案,数据持久化在 `data/uploads` | |
| 157 | +| `s3` | 兼容 S3 的对象存储(如 MinIO、阿里云 OSS) | |
| 158 | +| `webdav` | 适合挂载 NAS / Nextcloud | |
| 159 | +| `onedrive` | 利用 Microsoft Graph 的云端存储 | |
138 | 160 |
|
139 | | -构建的可执行文件包含版本信息: |
| 161 | +上传采用“分片 + 秒传 + 断点续传”的三段式策略: |
140 | 162 |
|
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` 合并并校验 |
144 | 166 |
|
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` 生成最新文档。 |
152 | 184 |
|
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 | +项目保持模块化、接口清晰,欢迎贡献以下方向: |
154 | 195 |
|
155 | | -### 常见问题 |
| 196 | +- 新的存储适配器 / 用户登录方式 |
| 197 | +- 管理后台的交互优化与国际化支持 |
| 198 | +- 自动化部署脚本(Helm / Terraform) |
| 199 | +- 更丰富的 API 客户端(Python/Node/Swift) |
156 | 200 |
|
157 | | -1. **Docker 推送失败** |
158 | | - - 检查 `DOCKER_USERNAME` 和 `DOCKER_PASSWORD` 是否正确配置 |
159 | | - - 确认 Docker Hub 仓库权限 |
| 201 | +提交 PR 时请附上:变更说明、测试方式、潜在影响。如涉及迁移,请编写相应文档放在 `docs/`。 |
160 | 202 |
|
161 | | -2. **构建失败** |
162 | | - - 检查 Go 版本兼容性 |
163 | | - - 查看构建日志中的具体错误信息 |
| 203 | +--- |
| 204 | + |
| 205 | +## 🗺️ 路线图(节选) |
164 | 206 |
|
165 | | -3. **测试失败** |
166 | | - - 确保所有依赖都在 `go.mod` 中正确声明 |
167 | | - - 检查代码质量问题 |
| 207 | +- [ ] Webhook / EventHook(上传完成、分享到期、超额告警) |
| 208 | +- [ ] 更细颗粒度的访问控制(到期提醒、下载密码、白名单) |
| 209 | +- [ ] 多节点部署指南(对象存储 + Redis + MySQL) |
| 210 | +- [ ] 管理后台模块化主题系统 & 深色主题 |
| 211 | +- [ ] CLI 支持导入/导出配置模板 |
168 | 212 |
|
169 | | -### 调试技巧 |
| 213 | +欢迎在 Issues 区讨论新需求或报告缺陷。 |
| 214 | + |
| 215 | +--- |
170 | 216 |
|
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 | +## 📄 许可证 |
183 | 218 |
|
184 | | -3. **手动触发:** 在 Actions 标签页可以手动触发部署工作流 |
| 219 | +MIT License © FileCodeBox Contributors |
185 | 220 |
|
186 | 221 | --- |
187 | 222 |
|
188 | | -更多信息请参考 [GitHub Actions 文档](https://docs.github.com/en/actions)。 |
| 223 | +> 💬 有任何问题、部署疑问或定制需求,欢迎通过 Issue / Discussions / 邮件联系。我们乐于协助每一个想把 FileCodeBox 搭建成“团队内部效率神器”的你。 |
0 commit comments