copyparty:单文件可移植文件服务器(断点续传 / WebDAV / SFTP / FTP / TFTP / SMB / 媒体索引)
copyparty 是一个用单个 Python 文件即可启动的可移植文件服务器,支持 HTTP(S)、WebDAV、SFTP、FTP(S)、TFTP、SMB/CIFS 等多种协议,具备加速断点续传上传、文件去重、媒体库索引、缩略图、zip/tar 打包下载、文件搜索、m3u8 播放列表、Markdown 查看/编辑等能力,服务器端仅需 Python 2 或 3,其余依赖均为可选。
社区作者 · zZz
它解决什么问题
copyparty 的目标是让几乎任何设备通过任意浏览器变成文件服务器,支持可断点续传的上传与下载。项目自我定位为“反向 Unix 哲学”——把所有功能都做进去,并且做得还算可以,强调随手可用的即插即用服务、最小依赖、跨平台、可改可 hack、无构建步骤,并且全部为纯文本代码,便于人工审查是否含恶意代码。
协议支持:http(s)、webdav、sftp、ftp(s)、tftp、smb/cifs,并提供 Android 应用与 iPhone 快捷指令。跨平台覆盖 Windows、Linux、macOS、Android、iOS、FreeBSD、arm32/arm64、ppc64le、s390x、risc-v/riscv64,甚至 SGI IRIX。
后端能力:IPv6 与 unix-socket、多进程(真正的多线程)、卷(挂载点)、账户、FTP/TFTP/WebDAV/SMB 服务器、二维码快捷访问、upnp/zeroconf/mDNS/SSDP、事件钩子与脚本执行、反向代理支持。
上传能力:基础 multipart(兼容 IE6)、up2k(JS 实现,可断点续传、多线程、无文件大小上限,即使在 Cloudflare 后也可用)、stash 简易 PUT 投放、文件名随机化、只写文件夹、unpost 撤销/删除误传、自毁(服务端或客户端指定生存期)、race the beam(边上传边下载)、基于内容比对的符号链接/丢弃重复文件。
下载能力:浏览器内下载单文件、将文件夹打包为 zip/tar、只读 FUSE 客户端。
浏览器端(配图 2):导航窗格目录树、文件管理器(剪切/粘贴、删除、批量重命名,配图 9)、音频播放器(支持系统媒体控制与 opus/mp3 转码)、把视频当音频播放、创建并播放 m3u8 播放列表、图片画廊与 webm 播放、cbz 漫画阅读器、带语法高亮的文本查看器、增长中文件(日志等)的实时流式查看、缩略图(配图 3:图片用 Pillow/pyvips/FFmpeg,RAW 用 libraw-dcraw_emu 或 rawpy,视频与音频频谱图用 FFmpeg,含按最大缓存时长的淘汰)、多语言 UI(英语、挪威语、中文,可自行添加)、SPA 边上传边浏览、文件搜索(配图 6、配图 11)、zip 下载选择(配图 4)、上传界面(配图 5、配图 8 显示控制面板 ETA)、unpost 撤销(配图 7)、Markdown 查看与编辑器(配图 10)。
服务端索引:按内容定位文件、按名称/路径/日期/大小搜索、按 ID3 标签等搜索。客户端支持:单向文件夹同步、curl 友好、OpenGraph(Discord 嵌入)。
账户与卷权限:可用 -a 和 -v 参数或配置文件定义,权限包括 r(读)、w(写)、m(移动)、d(删除)、.(显示点文件)、g(仅下载不可列目录)、G(upget)、h(html)、a(admin)、A(等同于 rwmda)。示例:-v /mnt/music:music:r,u1,u2:rw,u3。
性能:默认通常足够,下载约 8 GiB/s,上传约 1 GiB/s。安全方面有 CSP nonce、CORS、filekeys 防文件名爆破、dirkeys、密码哈希、HTTP/HTTPS 双支持。项目同时提供 systemd/openrc/rc/podman-systemd/nixos 服务脚本与 nginx 反代示例。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
准备环境:服务器只需要 Python(2 或 3),所有依赖都是可选的。
一、最快上手(推荐 sfx)
- 直接运行 copyparty-sfx.py,仅此而已。
- 说明:sfx 是一个自解压文件,会把内嵌的 tar.gz 解包到 $TEMP;如果觉得不妥,可以改用 zipapp(性能略差)。
二、其他安装方式
pypi:
python3 -m pip install --user -U copyparty- 无法安装 Python:使用 copyparty.exe(win8+)或 copyparty32.exe(win7+)
Arch:
pacman -S copyparty(位于 arch linux extra)
- Gentoo:emerge www-servers/copyparty::guru
Homebrew:
brew install copyparty ffmpeg- Nix:nix profile install github:9001/copyparty;NixOS 可用 nixos module
已安装 uv:
uv tool run copyparty- Android:在 termux 中安装
- iOS/iPad:在 a-Shell 中安装
- Synology NAS / DSM
- 需要隔离运行:prisonparty 创建 tiny chroot(可移植性好),或 bubbleparty 用 bubblewrap 包装(更好)
Docker:可直接使用,
docker 镜像内置全部依赖,可跳过下面安装可选依赖的步骤
- 系统已无法启动:使用可启动闪存盘 / CD-ROM
三、安装可选依赖(启用缩略图、媒体索引、音频转码)
- Alpine:apk add py3-pillow ffmpeg
Debian:
apt install --no-install-recommends python3-pil ffmpeg- Fedora:rpmfusion + dnf install python3-pillow ffmpeg --allowerasing
- FreeBSD:pkg install py311-sqlite3 py311-pillow ffmpeg
- MacOS:port install py-Pillow ffmpeg
MacOS(另一种):
brew install pillow ffmpegWindows:
python -m pip install --user -U Pillow- Windows 注意:手动安装 python 和 ffmpeg,不要使用 winget 或 Microsoft Store(会破坏 $PATH)
- copyparty.exe 自带 Pillow,仅媒体标签/视频缩略图需要 ffmpeg
- 更多功能见 optional dependencies
四、首次运行与推荐参数
- 不带参数运行(例如在 Windows 上双击)会给所有人对当前文件夹的读/写权限,建议配置账号与卷。
- 推荐选项:
- -e2dsa 启用通用文件索引
- -e2ts 启用音频元数据索引(需要 FFprobe 或 Mutagen)
- -v /mnt/music:/music:r:rw,foo -a foo:bar 表示把 /mnt/music 共享为 /music,任何人可读,用户 foo(密码 bar)可读写
- 把 :r:rw,foo 换成 :r,foo,则该文件夹只对 foo 可读
- 语法与更多权限参见 accounts and volumes 或运行 --help-accounts。
五、软件包/镜像
- 官方镜像:https://copyparty.eu/