5ebe562a62
之前用 nginx 做反代是从 cmd/gui/gui.go 的双端口架构沿袭下来的,
没必要——rclone rcd 的 --rc-files 参数本来就能用 http.FileServer
服务静态文件,--rc-serve 服务远端文件下载,浏览器同源访问无需
CORS、无需双端口、无需额外镜像。
- 删除 Dockerfile.webgui、docker/nginx.conf、docker/、.dockerignore
(单容器用官方 rclone/rclone 镜像,不再需要构建前端镜像)
- docker-compose.yml: 单服务 rclone rcd,5580 端口同时承担:
* GET / 静态前端 (--rc-files=/web)
* POST /* RC API(内置)
* GET /<remote>:* 远端文件下载 (--rc-serve)
webgui/web/ 只读挂载到 /web
- README: 移除 nginx 说明,标注后续 TLS / 自定义 header 由用户
自行在前面加反代
97 lines
3.3 KiB
Markdown
97 lines
3.3 KiB
Markdown
# rclone-webgui
|
|
|
|
浏览器端的 rclone 图形界面,使用 Anthropic / Claude 设计语言。
|
|
|
|
`rclone/` 是 [github.com/rclone/rclone](https://github.com/rclone/rclone)
|
|
的 git submodule,锁定在上游某个 commit,**不携带我们的任何改动**。
|
|
所有 webgui 源码、Docker 编排、文档都在本仓库。
|
|
|
|
## 项目结构
|
|
|
|
```
|
|
.
|
|
├── webgui/ # webgui 源码(在父仓库,不在 rclone 子模块里)
|
|
│ ├── webgui.go # Go 子命令源码(仅当自行构建 rclone 时需要)
|
|
│ ├── rclone-cmd-all-add-webgui-import.patch # 注解:把 webgui 注册进 rclone 的 cmd/all
|
|
│ └── web/ # 静态前端(rclone rcd 直接服务)
|
|
│ ├── index.html
|
|
│ └── assets/
|
|
├── config/rclone/ # rclone.conf 挂载点(bind mount,不提交)
|
|
├── docker-compose.yml # 单容器 rclone rcd
|
|
├── DESIGN.md # UI 设计系统规范
|
|
├── CLAUDE.md # Claude Code 协作指引
|
|
└── rclone/ # submodule → github.com/rclone/rclone,纯净不改动
|
|
```
|
|
|
|
## 功能
|
|
|
|
- **Remotes 管理** — 在浏览器里创建 / 编辑 / 删除 rclone remote,表单从
|
|
`/config/providers` 动态生成,覆盖全部 70+ 后端的全部选项。
|
|
- **文件浏览** — 面包屑导航 + 文件表格,支持 mkdir / upload / delete /
|
|
rename / download。
|
|
- **同步任务** — copy / sync / move 异步任务,1.5 秒轮询进度(速度、
|
|
ETA、已传输 / 总量、错误计数),任务元信息(src→dst)持久化到
|
|
localStorage,刷新页面不丢。
|
|
|
|
> OAuth 后端(drive、dropbox、onedrive 等)目前仅显示提示横幅,
|
|
> 引导用户在终端跑 `rclone config` 完成授权。
|
|
|
|
## 快速开始
|
|
|
|
```bash
|
|
# 1. 拉取子模块(rcd 流程用不到,自行构建 rclone 二进制时才需要)
|
|
git clone --recurse-submodules <your-fork-url>
|
|
|
|
# 2. 启动堆栈(单容器,无需 build)
|
|
docker compose up -d
|
|
|
|
# 3. 打开 http://localhost:5580
|
|
```
|
|
|
|
## 架构
|
|
|
|
只用一个 rclone rcd 容器,一个端口(5580),同时承担:
|
|
|
|
| 职责 | URL | 配置项 |
|
|
|---|---|---|
|
|
| 静态前端 | `GET /` | `--rc-files=/web` |
|
|
| RC API | `POST /config/*`、`/operations/*`、`/sync/*`、`/job/*` | 内置 |
|
|
| 远端文件下载 | `GET /<remote>:<path>` | `--rc-serve` |
|
|
|
|
浏览器同源访问 → 不需要 CORS、不需要 nginx、不需要双端口。
|
|
要加 TLS 或自定义 header 时,**在前面套你自己的反代**即可。
|
|
|
|
## 自行构建 rclone(可选)
|
|
|
|
Docker 编排默认使用官方 `rclone/rclone:latest` 镜像,配合 rcd 即可。
|
|
如果你想构建一个内置 webgui 命令的 rclone 二进制(`rclone webgui`
|
|
能像 `rclone gui` 那样独立运行),可以:
|
|
|
|
```bash
|
|
# 1. 把 webgui 源码软链或拷贝到 rclone 子模块的 cmd/ 下
|
|
ln -s ../../webgui rclone/cmd/webgui
|
|
|
|
# 2. 应用注册补丁
|
|
cd rclone && git apply ../webgui/rclone-cmd-all-add-webgui-import.patch
|
|
|
|
# 3. 构建
|
|
make
|
|
```
|
|
|
|
## 升级 rclone 子模块
|
|
|
|
```bash
|
|
cd rclone
|
|
git fetch origin
|
|
git checkout <new-tag-or-commit>
|
|
cd ..
|
|
git add rclone
|
|
git commit -m "chore: 升级 rclone 至 <new-tag>"
|
|
```
|
|
|
|
## 协议
|
|
|
|
- 本外层仓库:MIT
|
|
- `rclone/` 子模块:遵循上游 [rclone](https://github.com/rclone/rclone)
|
|
的 MIT 协议
|