Sharry 介绍与选型指南
自托管文件分享服务 Sharry 全景认知:双向收发模型、Scala+JVM 架构、tus 断点续传、可插拔认证与 GPLv3 许可证,附 8 款同类组件量化选型对比与适用场景边界,关键结论均标注来源与查询日期。
Sharry 介绍与选型指南
目标:面向需要「自托管文件收发分享」场景的读者,讲清 Sharry 是什么、架构与功能边界、适用场景限制,并与同类自托管文件分享服务做量化对比。本文为认知篇,全部结论来自官方文档站、GitHub 仓库与 Docker Hub 实查(检索日期 2026-10-31,版本与星数于 2026-11-01 复核)。
一、环境信息
本文为联网溯源的认知篇,检索与写作依据如下:
- 调研对象:Sharry(eikek/sharry),自托管文件分享 Web 应用
- 官方文档站:https://eikek.github.io/sharry/
- 源码仓库:https://github.com/eikek/sharry
- 最新稳定版:v1.17.0(GitHub Releases 于 2026-10-05 发布,releases.atom 实查;Docker Hub 镜像 tag
v1.17.0更新于 2026-10-05,实查一致) - 许可证:GPLv3+(openapi 规范 license 字段与仓库 README 均实查确认)
- 技术栈:后端 Scala 3(typelevel cats / fs2 / http4s 技术族),前端 Elm,JVM 运行(要求 JDK 17+,v1.13.0 起)
- 社区活跃度:GitHub 星数约 1.4k(shields.io 实时徽章数据,2026-11-01 复核);官方镜像累计下载版本自 v1.3.0(2020-05)延续至今
- 检索日期:2026-10-31(2026-11-01 复核版本、许可证与星数)
二、软件概述
Sharry 是开源开发者 eikek 用 Scala 编写的自托管文件分享服务,核心概念一句话概括:上传文件,拿回一个 URL,把这个 URL 分享给任何人。它同时支持两个方向的收发:
- 认证用户 → 匿名访客(发件):登录用户上传文件,可附加密码、有效期、下载次数上限,发布后生成一个「难以猜测但无需登录即可访问」的公开 URL;
- 匿名访客 → 认证用户(收件):每个注册用户可以维护若干 alias pages(别名页),别名页同样藏在难猜 URL 后面,任何人打开即可向对应用户上传文件,用户可收到邮件通知。
Sharry 的定位关键词是「可靠」:它实现了 tus 协议 做断点续传上传——大文件传到一半断网,重新上传同一文件会从上次接收的分块继续;下载侧则用 ETag 与 range 请求(字节服务)支持浏览器缓存与视频在线拖动播放。README 原文表述:"Sharry implements the tus protocol and the webapp uses it to send files to the backend server. This allows to send even large files reliably through http."(实查于仓库 README,2026-10-31)
💡 技术拓展:开源许可证常见类型对比——
许可证 核心特点 商用友好度 MIT / Apache-2.0 允许闭源分发,仅保留版权声明 高 GPL-3.0 衍生作品必须开源(分发即触发) 中 AGPL-3.0 网络服务形式提供也触发开源义务 低 Sharry 采用 GPLv3+(仓库 LICENSE 与 API 规范声明实查一致):自托管自用无负担;若二次开发后以分发的形式对外提供需开放源码。相比 AGPL 系组件(如部分同类分享服务),GPL-3.0 对「纯网络服务」形态的约束更宽松。
三、核心架构
Sharry 是「REST 服务器 + Web 单页客户端」的双组件架构(官方文档站《How it works》与 REST API 文档实查归纳):
- REST 服务器(sharry-restserver):全部能力由 REST API 暴露,基于 Scala 生态的 http4s 构建。官方明示:"The REST Api is specified using openapi 3.0",并把路由分为四类权限域——
/open/*(无需认证)、/sec/*(需认证用户)、/alias/*(凭Sharry-Alias头的别名上传)、/admin/*(需管理员); - Web 客户端:Elm 语言编写的单页应用,部署时由服务器一并分发(实测部署后页面位于
/app路径),Web 客户端同样走这套 REST API; - 认证层:可插拔登录模块,按
order顺序依次尝试——fixed(配置文件内固定账号,用于引导管理员)、http/http-basic(转外部 HTTP 服务校验)、command(调用外部命令校验)、internal(内置数据库账号)、oauth(OAuth2 Code Flow,内置 GitHub/Google/Azure AD 示例配置)、proxy(信任反向代理注入的请求头)。登录成功签发签名 token,默认 8 分钟有效、Web 端定时续期; - 存储层:元数据存关系数据库,官方支持 PostgreSQL、MariaDB 与 H2(H2 为进程内数据库,免独立数据库服务);文件本体三种落点可选——数据库内、本地文件系统、S3 兼容对象存储(如 MinIO),且内置跨存储迁移命令(
copy-files配置段); - 后台任务层:上传后异步计算校验和(
compute-checksum),内置周期清理任务(cleanup,默认 14 天一轮)回收过期分享与过期邀请。
💡 技术拓展:文件分享类服务的「上传可靠性」技术路线对比——
路线 原理 代表 取舍 普通 multipart 一次上传 单请求整包提交 多数轻量组件 实现简单,大文件断网即重来 分块上传 前端切片、逐块 POST Chibisafe 等 可恢复,需前端配合切片 tus 协议断点续传 开放协议,POST 建档 + PATCH 按偏移续块 Sharry 标准化、可重试,服务端实现较重 Sharry 同时保留普通 multipart 端点(便于脚本调用)与 tus 协议端点(Web 客户端默认使用),本文实际介绍的是后者为主的混合路线。
四、功能特性
以下清单来自官方文档站与 GitHub Releases 实查(2026-10-31),并标注引入版本:
- 双向收发:认证用户对外发布分享,匿名用户经别名页向内上传,双方均无需为对方注册账号;
- 分享三要素管控:每条分享可独立设置有效期(validity)、密码(password)、最大查看次数(maxViews),服务器端强制执行——密码保护分享的匿名访问不带密码返回 401、密码错误返回 403(REST API 文档实查);
- 可恢复上传(tus):v1.x 全系支持;Web 客户端默认走 tus 分块上传,失败重试序列由
retry-delays配置控制(默认 6 次退避); - 流式下载:ETag 缓存 + range 字节请求,支持浏览器内拖动播放视频;
- ZIP 打包下载:v1.16.0 引入"Download all files as zip",v1.17.0 增强为可勾选部分文件打包(Releases 实查);
- 文件详情展示:v1.17.0 起每个文件显示精确大小、上传时间与校验和(Releases 实查:"Show exact size, upload date and checksum per file");
- 上传后自动发布:v1.17.0 引入
auto-publish-enabled配置,用户可在设置页选择文件传完自动发布(Releases 实查); - 服务器强制分享密码:v1.17.0 引入
require-share-password,可要求所有分享必须带密码,且 API 侧同步强制(Releases 实查); - 本地时区显示:v1.17.0 起时间戳按「用户设置 > 浏览器自动探测 > 服务器默认
default-timezone> UTC」四级优先展示(配置文档实查); - 注册策略三模式:
open(开放注册)/invite(管理员凭口令生成邀请码)/closed(关闭); - 多语言界面:含德、法、西、意、日、捷克、巴西葡语等(各版本 Releases 陆续加入,默认
default-language = "gb"); - 邮件通知:可配置 SMTP,内置「下载就绪」「别名页链接」「文件送达」三类邮件模板(默认配置文件实查);
- REST API + 在线文档:全功能 REST API,服务器自带 swagger 交互文档(部署后访问
/api/doc),静态规范为 openapi 3.0; - 强制分享密码 / OAuth2 / 反向代理认证:可与已有用户体系集成(http/http-basic/command 登录模块)。
五、快速开始(最小可用示例)
以下为官方仓库 docker/docker-compose.yml 的公开口径(实查于仓库 master 分支,2026-10-31),是最小可用的双服务拓扑——一个 Sharry 服务进程 + 一个 PostgreSQL:
version: '3.7'
services:
restserver:
image: eikek0/sharry:latest
container_name: sharry
command: /opt/sharry.conf
expose:
- 9090 # informational only
ports:
- "9090:9090"
volumes:
- ${PWD}/sharry.conf:/opt/sharry.conf
healthcheck:
test: ["CMD-SHELL", "wget --spider http://localhost:9090/api/v2/open/info/version"]
interval: 1m
timeout: 10m
retries: 2
start_period: 30s
depends_on:
db:
condition: service_healthy
db:
image: postgres:18.6
container_name: postgres_db
volumes:
- postgres_data:/var/lib/postgresql
environment:
- POSTGRES_USER=dbuser
- POSTGRES_PASSWORD=dbpass
- POSTGRES_DB=dbname
- PGUSER=dbuser
healthcheck:
test: pg_isready -q -d dbname
interval: 15s
timeout: 5s
retries: 3
start_period: 15s
volumes:
postgres_data:
三个关键点(官方配置文档实查):Sharry 的服务进程以一个 HOCON 配置文件为唯一配置入口(启动参数传入 /opt/sharry.conf),配置也可全部用 SHARRY_ 前缀环境变量覆盖;默认监听 9090 端口;数据库连接走 sharry.restserver.backend.jdbc 配置段。完整的参数级配置、JVM 堆内存限定与逐命令部署步骤见 《Sharry 1.17.0 Docker Compose 部署指南》与 《Sharry 1.17.0 配置参数详解》。
六、适用场景与限制
适合的场景:
- 团队/家庭内网或个人 VPS 上的「临时传大文件」:对方只需点链接,无需注册账号,断点续传对弱网友好;
- 对外收件入口:给客户/合作方一个别名页链接,文件自动归集到自己的账号并可邮件通知,避免邮件附件体积限制;
- 需要与既有用户体系集成:http/http-basic/command 登录模块 + OAuth2(GitHub/Google/Azure AD)+ 反向代理头认证均可插拔;
- 需要脚本化/自动化收发文件:全功能 REST API + tus 协议,适合备份投递、报告分发等自动化链路。
限制与注意点(官方文档与 Releases 实查归纳):
- JVM 运行时:要求 JDK 17+(v1.13.0 起),常驻内存高于 Go/PHP 系同类组件,小内存机器需显式限定堆;
- 不支持子路径部署:官方配置文件注释明示 "Currently deploying behind a path is not supported",只能整域或子域部署,
base-url必须与外部访问地址一致,否则浏览器报 "network error"; - 数据库选型注意:默认 H2 仅适合试用;v1.15.0 官方公告对 MariaDB/H2 存在分页 SQL 顺序缺陷(issue #1643),至 v1.16.0+ 修复——MariaDB 用户不要停留在 1.15.x;
- 无在线编辑/预览协作:Sharry 只做「收、存、发」,不做文档协作或相册展示,此类需求应选 Nextcloud 等网盘类组件;
- 单实例架构:无内置集群/高可用方案,多实例部署需共享数据库与文件存储(S3 模式)并共用
server-secret。
七、同类选型对比
下表将 Sharry 与同属「自托管文件分享/临时传输」赛道的代表组件横向对比(Sharry 数据实查于 2026-11-01;其余组件为其对应专栏已发布文档的实测结论,星数/版本以各自检索日为准):
| 维度 | Sharry 1.17.0 | PicoShare 1.5.4 | Plik 1.4.3 | Jirafeau | Chibisafe | Gokapi 2.2.4 | FileGator | goploader 1.0.2 |
|---|---|---|---|---|---|---|---|---|
| 开发语言/运行时 | Scala 3 / JVM 17+ | Go | Go | PHP | Node.js/TypeScript | Go | PHP | Python |
| 许可证 | GPL-3.0+ | AGPL-3.0 | BSD-2 | AGPL-3.0 | MIT | GPL-3.0 | MIT | MIT |
| GitHub 星数量级 | 1.4k(2026-11-01 shields.io) | 3.1k(2026-10-30) | — | — | — | 2.9k(2026-10-26) | — | — |
| 数据库 | PostgreSQL / MariaDB / H2 | SQLite 单文件 | 内置元数据 + 文件落盘 | 平面文件 | SQLite/MySQL(可选 S3) | SQLite | SQLite/MySQL/Postgres | SQLite |
| 文件存储 | 数据库 / 文件系统 / S3 兼容 | 本地磁盘(blob 入库) | 本地/自定义后端 | 本地磁盘 | 本地 / S3 兼容 | 本地 / S3 兼容 | 本地 / S3 | 本地磁盘 |
| 断点续传上传 | ✅ tus 协议(标准实现) | ❌ | ✅(自有分块) | ❌ | ✅ 分块 | ❌ | ❌ | ❌ |
| 匿名收件(访客→用户) | ✅ 别名页 + 邮件通知 | ✅ 访客链接 | ⚠️ 管理员建流 | ❌ 单向发布 | ✅ 上传 token | ⚠️ 有限 | ❌ | ⚠️ 单文件投递 |
| 分享管控粒度 | 有效期+密码+最大查看数,服务端强制 | 有效期+下载次数 | 有效期+密码+一次性 | 有效期+密码+一次性 | 有效期+密码 | 有效期+下载次数 | 有效期 | 有效期 |
| 特色能力 | REST API 全暴露、可插拔认证(OAuth/代理头/外部命令)、S3 存储 | 上传即直链、无跟踪脚本 | 临时投递流(turbolift CLI)、管理员可审计 | 单文件极简部署 | 现代化 UI、收藏夹、预览 | 轻量、易迁移 | 多用户文件管理器(类网盘) | 阅后即焚式单文件分享 |
| 部署重量 | 中(JVM + 独立数据库建议) | 低(单二进制) | 低(单二进制) | 极低(PHP 单目录) | 中(Node + 数据库) | 低(单二进制) | 低(PHP) | 低(Python) |
关键差异与选型解读:
- 要「双向收发 + 认证集成 + API 自动化」,选 Sharry:它是本赛道内少数把「访客收件(别名页)」做成一等公民、且认证模块可对接外部用户体系的组件;tus 断点续传对不稳定网络下的大文件传输是硬优势;
- 要「极简单向直链」,选 PicoShare/Gokapi:单二进制 + SQLite,资源占用低一个数量级,但没有访客上传与丰富认证集成;
- 要「投递流可审计」,选 Plik:Plik 的「投递(drop)」概念自带管理员审计视角,适合有留痕要求的临时传输;
- 要「现代网盘式体验」,选 Chibisafe/FileGator:它们偏向文件管理器形态,Sharry 更纯碎地聚焦「分享链接的生命周期管理」;
- 资源受限设备(NAS/树莓派):优先 Go/PHP 系轻量组件;Sharry 需 JVM(实测堆可限定 256–512MB 运行),PostgreSQL 也需计入内存预算。
站内同族实测文档可进一步参考:《PicoShare 介绍与选型指南》、《Plik 介绍与选型指南》、《Jirafeau 介绍与选型指南》、《Chibisafe 介绍与选型指南》、《Gokapi 2.2.4 介绍与选型指南》、《FileGator 介绍与选型指南》、《goploader 1.0.2 介绍与选型指南》、《copyparty 1.20.26 介绍与选型指南》。
八、参考链接
- 官方文档站:https://eikek.github.io/sharry/(功能特性、配置参考、REST API 文档)
- 源码仓库:https://github.com/eikek/sharry(README、Releases、docker/docker-compose.yml)
- Releases 页:https://github.com/eikek/sharry/releases(v1.17.0 于 2026-10-05 发布)
- 版本发布 Atom 订阅:https://github.com/eikek/sharry/releases.atom
- REST API 静态规范(openapi 3.0):https://eikek.github.io/sharry/openapi/sharry-openapi.html
- 配置参考文档:https://eikek.github.io/sharry/doc/configure
- Docker Hub 镜像仓库:https://hub.docker.com/r/eikek0/sharry(tag 列表实查于 2026-10-31)
- 星数徽章数据:shields.io(
img.shields.io/github/stars/eikek/sharry.json,2026-11-01 实查为 1.4k) - 本专栏实测文档:《Sharry 1.17.0 Docker Compose 部署指南》、《Sharry 1.17.0 配置参数详解》、《Sharry 1.17.0 API 使用详解》