MCPcopy Index your code
hub / github.com/devld/go-drive

github.com/devld/go-drive @v0.13.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.13.0 ↗ · + Follow
4,062 symbols 12,317 edges 291 files 422 documented · 10% updated 3d agonightly · 2026-07-05★ 799
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

go-drive logo go-drive

一个跨平台、可自托管的文件管理服务器,配备现代化的 Web 界面。

通过统一的界面管理本地文件以及多种云存储服务。

License: MIT Go Report Card Vue Docker Docker Pulls GitHub Release

在线演示 · 文档 · 版本发布

English | 简体中文


目录

项目简介

go-drive 是一个使用 Go 编写、前端基于 Vue/TypeScript 的轻量级文件管理服务器。它让你能够通过一个简洁的 Web 界面,在多种存储后端之间浏览、上传、整理和分享文件 —— 包括本地磁盘、FTP/SFTP、WebDAV、S3 兼容对象存储、OneDrive、Google Drive 等等。

整个应用以单个自包含的二进制文件分发(Web 界面与 i18n 资源已内嵌),因此可以非常方便地部署在服务器、NAS 或容器中。

默认账号:用户名 admin,密码 123456请在首次登录后立即修改密码。

功能特性

  • 文件管理 —— 浏览、复制、移动、重命名、删除,支持拖拽操作以及拖拽/粘贴上传。
  • 上传与下载 —— 大文件分片上传,批量文件打包为 zip 下载。
  • 权限控制 —— 基于用户与组的细粒度路径权限控制。
  • 路径挂载 —— 将任意存储或子路径挂载到统一的虚拟目录树中。
  • 媒体预览 —— 基于 PhotoSwipe 的图片画廊、内置音乐播放器以及视频播放。
  • 编辑器 —— 使用 CodeMirror 进行文本编辑,使用 Monaco Editor 进行完整的代码编辑。
  • 缩略图 —— 为图片、文本、视频和音频生成缩略图(处理器可插拔,可选 libvips/ffmpeg)。
  • 全文搜索 —— 可选的跨挂载存储的文件搜索。
  • WebDAV 访问 —— 通过 WebDAV 协议访问你的存储。
  • 定时任务 —— 基于 gocron 的 cron 风格后台任务。
  • 可扩展存储 —— 使用 JavaScript 添加新的存储后端,无需重新编译。
  • 管理控制台 —— 在浏览器中管理存储、用户、用户组、权限和任务。

支持的存储类型

存储 说明
本地文件 主机文件系统上的文件
FTP FTP 服务器
SFTP 基于 SSH 的文件传输
WebDAV 任意兼容 WebDAV 的服务器
S3 Amazon S3 及 S3 兼容对象存储
OneDrive 微软 OneDrive
Google Drive 谷歌云端硬盘
Dropbox 通过脚本(JavaScript)实现
七牛云 通过脚本(JavaScript)实现

各存储类型的具体配置方式请参见文档

快速开始

Docker

mkdir go-drive-data
docker run -d --name go-drive \
  -p 8089:8089 \
  -v "$(pwd)/go-drive-data:/app/data" \
  devld/go-drive

go-drive-data 是数据目录。将其映射到容器之外,可确保在应用升级后数据得以保留。启动后,访问 http://localhost:8089

官方 Docker 镜像已内置 ffmpeglibvips,并自动启用视频/音频以及高性能图片缩略图处理器。

如需自定义配置,可先从镜像中提取默认的 config.yml,再将其映射回容器:

# 通过一个临时容器提取 config.yml
cid=$(docker run -d devld/go-drive) && docker cp "$cid:/app/config.yml" . && docker stop "$cid" && docker rm "$cid"

# 同时将数据目录和配置文件映射到容器外
docker run -d --name go-drive \
  -p 8089:8089 \
  -v "$(pwd)/go-drive-data:/app/data" \
  -v "$(pwd)/config.yml:/app/config.yml" \
  devld/go-drive

Docker Compose

services:
  go-drive:
    image: devld/go-drive
    container_name: go-drive
    ports:
      - "8089:8089"
    volumes:
      - ./go-drive-data:/app/data
    restart: unless-stopped
docker compose up -d

预编译二进制文件

Releases 页面下载对应平台的压缩包,解压后运行:

  • Linux
./go-drive
  • Windows

直接运行 go-drive.exe 即可。

默认情况下,go-drive 会读取工作目录中的 config.yml(如果存在),并监听 :8089。常用参数:

./go-drive -c /path/to/config.yml   # 使用指定的配置文件
./go-drive -show-config             # 打印解析后的配置
./go-drive -v                       # 打印版本信息

配置

go-drive 通过 YAML 文件进行配置。完整且带注释的参考配置位于 docs/config.yml,可复制后按需修改。部分常用选项:

选项 默认值 说明
listen :8089 HTTP 服务监听地址
data-dir ./data 所有应用数据目录(数据库、会话、缩略图、本地文件等)
temp-dir data-dir/temp 临时文件目录
max-concurrent-task 100 最大并发任务数(复制、移动、删除)
free-fs false 允许本地存储使用绝对路径(存在安全风险
trusted-proxies 用于解析真实客户端 IP 的可信代理 IP/CIDR
api-path / web-path 在子路径下提供服务时覆盖 API/静态资源路径

go-drive 支持 SQLite(默认)和 MySQL。WebDAV 访问、全文搜索、缩略图处理器以及反向代理/子路径部署等也都在此配置 —— 完整参考请见 docs/config.yml文档

⚠️ 设置 free-fs: true 会允许管理员用户通过本地存储浏览整个主机文件系统。除非你完全了解其影响,否则请保持为 false

从源码构建

前置要求: go.mod 中指定的 Go 版本、Node.js 24,以及 C 工具链(SQLite 需要 CGO)。

git clone https://github.com/devld/go-drive.git
cd go-drive

# 构建全部:前端、后端及发布压缩包
make all

make all 会构建 Vue 前端(web/dist),将其与 i18n 资源一起内嵌到 Go 二进制文件中,并在 build/ 下生成发布压缩包。仅前端开发时:

cd web
npm install
npm run dev        # 启动开发服务器
npm run lint       # 类型检查 + lint
npm run build-web  # 生产构建

参与贡献

欢迎贡献代码!请遵循以下流程:

  1. Fork 仓库并创建特性分支。
  2. 后端改动请运行相关包的测试(go test,并发代码使用 go test -race)。
  3. 前端改动请在 web/ 目录下运行 npm run lintnpm run build-web
  4. 使用 Conventional Commits 规范,并带上简短的小写 scope(例如 fix(server): ...)。
  5. 提交 Pull Request,说明改动的动机与行为变化。

许可证

基于 MIT 许可证 发布。版权所有 © 2020 devld。

Extension points exported contracts — how you extend this code

IContent (Interface)
IContent is the extension of IEntry for file [16 implementers]
common/types/drive.go
ObjectDisposable (Interface)
(no doc) [29 implementers]
script/runtime.go
FileURL (Interface)
(no doc) [15 implementers]
server/webdav/file.go
Error (Interface)
(no doc) [8 implementers]
common/errors/errors.go
ReadCloser (Interface)
(no doc) [14 implementers]
docs/scripts/global.d.ts
AuthProvider (Interface)
AuthProvider is the core authentication abstraction. Name is specified at registration time, not on the interface. [2 …
server/auth/auth.go
TypeHandler (Interface)
(no doc) [4 implementers]
server/thumbnail/thumbnail.go
DriveCache (Interface)
(no doc) [3 implementers]
common/drive_util/cache.go

Core symbols most depended-on inside this repo

Error
called by 210
common/errors/errors.go
call
called by 196
drive/script/index.go
get
called by 166
docs/scripts/env/drive.d.ts
_classPrivateFieldGet
called by 155
web/public/pdf.js/web/viewer.js
_classPrivateMethodGet
called by 148
web/public/pdf.js/web/viewer.js
Get
called by 128
common/types/drive.go
then
called by 113
web/src/utils/http/types.ts
T
called by 103
common/i18n/i18n.go

Shape

Method 1,868
Function 1,406
Struct 423
Interface 204
Class 122
TypeAlias 27
FuncType 7
Enum 5

Languages

Go61%
TypeScript39%

Modules by API surface

web/public/pdf.js/web/viewer.js844 symbols
server/webdav/internal/xml/marshal_test.go92 symbols
docs/scripts/global.d.ts70 symbols
server/webdav/internal/xml/xml.go58 symbols
web/src/api/admin.ts51 symbols
server/webdav/file.go50 symbols
common/errors/errors.go50 symbols
server/webdav/internal/xml/read_test.go45 symbols
docs/scripts/env/drive.d.ts45 symbols
common/drive_util/fs.go45 symbols
server/webdav/internal/xml/marshal.go42 symbols
common/types/common.go42 symbols

For agents

$ claude mcp add go-drive \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page