Sharry 介绍与选型指南

自托管文件分享服务 Sharry 全景认知:双向收发模型、Scala+JVM 架构、tus 断点续传、可插拔认证与 GPLv3 许可证,附 8 款同类组件量化选型对比与适用场景边界,关键结论均标注来源与查询日期。

SharrySharry文件分享文件传输2026/11/01

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 一次上传单请求整包提交多数轻量组件实现简单,大文件断网即重来
分块上传前端切片、逐块 POSTChibisafe 等可恢复,需前端配合切片
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.0PicoShare 1.5.4Plik 1.4.3JirafeauChibisafeGokapi 2.2.4FileGatorgoploader 1.0.2
开发语言/运行时Scala 3 / JVM 17+GoGoPHPNode.js/TypeScriptGoPHPPython
许可证GPL-3.0+AGPL-3.0BSD-2AGPL-3.0MITGPL-3.0MITMIT
GitHub 星数量级1.4k(2026-11-01 shields.io)3.1k(2026-10-30)———2.9k(2026-10-26)——
数据库PostgreSQL / MariaDB / H2SQLite 单文件内置元数据 + 文件落盘平面文件SQLite/MySQL(可选 S3)SQLiteSQLite/MySQL/PostgresSQLite
文件存储数据库 / 文件系统 / 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 介绍与选型指南》。

八、参考链接

Sharry 介绍与选型指南 - Quzuo