Hotdry.
systems-engineering

Copyparty:无数据库 FOSS 文件服务器,卷挂载与认证层实现高吞吐自托管分享

详解 Copyparty 单文件部署无 DB 文件服务器,支持卷挂载、多层认证和高吞吐 up2k 流式传输的自托管参数与监控要点。

在自托管文件分享场景中,许多开源方案依赖数据库来管理用户、权限和元数据,导致部署复杂、维护成本高。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),每卷独立权限矩阵。

多层策略实现:

  1. 用户认证-a admin:strongpass -a guest:weakpass,admin 获 rwmd(读写移动删除),guest 仅 r(读)。
  2. 卷级权限-v /share:/share:r:* rwmd:admin,* 表示所有匿名用户只读,admin 全权。
  3. IP 限制--ip-allow 192.168.1.0/24 --ip-deny 10.0.0.0/8,结合防火墙增强安全。
  4. 密钥认证:生成临时分享链接 ?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)。

自托管分享的最佳实践与清单

  1. 部署清单

    步骤 命令 / 配置
    下载 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 高吞吐 如上例
  2. 性能基准:局域网 1Gbps 满速,WAN 经 up2k 续传损耗 <5%。

  3. 安全清单:HTTPS (--ssl cert.pem key.pem),--no-robots 防爬虫,定期 rm .hist/up2k.db.bak.*。

  4. 扩展:Nginx 反代 --xff-hdr X-Forwarded-For,rclone 挂载 S3 作为后端卷。

Copyparty 的 DB-less 设计在自托管中脱颖而出,结合卷挂载和 up2k 实现简单高效分享。实际部署中,从单卷基础版起步,渐进认证与调优,即可支撑团队级使用。

资料来源

查看归档