在自托管文件分享场景中,许多开源方案依赖数据库来管理用户、权限和元数据,导致部署复杂、维护成本高。Copyparty 作为一款纯 Python 单文件 FOSS 文件服务器,完全无数据库依赖,仅通过本地文件系统和可选的 .hist 元数据目录实现高效运行,支持卷挂载、多层认证和高吞吐量流式传输。本文聚焦其 DB-less 架构的核心实现,提供可落地部署参数、认证策略和高性能调优清单,帮助开发者快速构建可靠的自托管分享服务。
无 DB 架构的核心优势与实现
Copyparty 的 DB-less 设计源于其无状态文件系统直挂载模式,所有持久化数据直接存储在宿主机目录中,避免了 PostgreSQL 或 SQLite 等外部依赖。元数据如上传历史、缩略图和索引保存在服务器根目录下的 .hist 文件夹,使用简单键值文件而非关系型数据库。这种设计确保了零额外组件部署,启动时间小于 1 秒,即使在资源受限的树莓派或旧设备上也能稳定运行。
证据显示,Copyparty 通过内容哈希(up2k 协议)实现文件去重和断点续传,无需 DB 查询即可验证文件完整性。GitHub 仓库数据显示,该项目已获 37k+ stars,用户反馈突出其在高并发场景下的低延迟表现,例如多用户同时上传 10GB 文件时,平均吞吐达 300MB/s(局域网测试)。
落地参数:
- 根目录配置:运行时指定当前目录为根,或使用
-v挂载宿主机卷:copyparty-sfx.py -v /host/share:/share:rw。/host/share 为宿主机路径,/share 为虚拟挂载点,r 表示只读,rw 表示读写。 - 多卷支持:隔离不同数据源,如
-v /mnt/music:/music:r -v /data/docs:/docs:rw,admin,实现媒体与文档分离存储。 - 元数据持久化:默认启用
-e2dsa(文件索引 + 扫描),.hist 目录自动生成,支持撤销上传和搜索,无 DB 开销。
监控要点:观察 .hist/up2k.db 大小(<1MB / 天),若超阈值(--hist-size 1G)则轮转备份。风险:文件系统需支持符号链接(去重机制),否则 fallback 到复制模式。
多层认证策略:从基础用户到 IP / 密钥控制
Copyparty 的认证层设计灵活,支持命令行用户、配置文件和运行时密钥,无需 DB 用户表。基础认证通过 -a user:pass 定义,支持 Argon2 哈希(可选依赖 argon2-cffi),每卷独立权限矩阵。
多层策略实现:
- 用户认证:
-a admin:strongpass -a guest:weakpass,admin 获 rwmd(读写移动删除),guest 仅 r(读)。 - 卷级权限:
-v /share:/share:r:* rwmd:admin,* 表示所有匿名用户只读,admin 全权。 - IP 限制:
--ip-allow 192.168.1.0/24 --ip-deny 10.0.0.0/8,结合防火墙增强安全。 - 密钥认证:生成临时分享链接
?k=secret,绑定到特定卷,支持过期(--expire 1d)。
配置文件示例(copyparty.conf,非 YAML):
[accounts]
admin: $argon2id$v=19$...
guest: guestpass
[/share]
/host/share
accs:
r: *
rwmd: admin
加载:copyparty-sfx.py -c copyparty.conf。
回滚策略:若认证失效,fallback 到匿名模式(--no-auth),但仅限内网。生产中结合 Nginx 反代添加 Basic Auth 层。
高吞吐流式传输:up2k 协议与多进程优化
Copyparty 的高吞吐得益于 up2k 协议(自定义加速续传)和多进程 BrokerMp 架构,支持 GB/s 级流式传输。up2k 将文件分块(默认 16KB),哈希校验,支持边传边下(上传中即下载已传部分),无 DB 状态跟踪纯内存 + 文件锁。
调优参数清单:
- 进程数:
-j 8(CPU 核数 x 1.5),启用多进程绕过 GIL。 - 块大小:
--up2k-chunk 64K(大文件优化),并行上传线程--up2k-threads 16。 - I/O 缓冲:
--bufsize 128M --iobuf 64K,减少系统调用。 - 流式媒体:内置 FFmpeg 转码(可选依赖),
--th-pool 4并行缩略图生成,支持 HLS 流(浏览器直播)。
Docker 部署示例(高吞吐自托管):
docker run -d --name copyparty \
-p 3923:3923 \
-v /host/music:/music:r \
-v /host/docs:/docs:rw,admin \
-v /data/cfg:/cfg \
copyparty/ac:latest \
-j 4 --up2k-chunk 64K -a admin:pass -c /cfg/copyparty.conf
Prometheus 监控:--stats,暴露 /metrics 端点,追踪 QPS、带宽(>1Gbps 内网可达)。
风险阈值:CPU >80% 时降进程数;磁盘 I/O >80% 饱和时加 SSD 缓存(--hist /ssd/.hist)。
自托管分享的最佳实践与清单
-
部署清单:
步骤 命令 / 配置 下载 wget https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py 基础启动 python3 copyparty-sfx.py -v .:rw 认证卷挂载 -a user:pass -v /data:/data:rw,user Docker 高吞吐 如上例 -
性能基准:局域网 1Gbps 满速,WAN 经 up2k 续传损耗 <5%。
-
安全清单:HTTPS (--ssl cert.pem key.pem),--no-robots 防爬虫,定期 rm .hist/up2k.db.bak.*。
-
扩展:Nginx 反代
--xff-hdr X-Forwarded-For,rclone 挂载 S3 作为后端卷。
Copyparty 的 DB-less 设计在自托管中脱颖而出,结合卷挂载和 up2k 实现简单高效分享。实际部署中,从单卷基础版起步,渐进认证与调优,即可支撑团队级使用。
资料来源:
- GitHub 仓库:https://github.com/9001/copyparty (README 与 docs)
- HN 讨论:https://news.ycombinator.com/item?id=41996120 (Dropbox 相关,启发 no-db 需求)