79
stars
+0+0
3
forks
0
watchers
–
prs
–
issues
9
releases
–
discussions
README
Tessera 自托管的文件与文本分享服务,用完会自己清理。 English · 繁體中文 · 简体中文 · 日本語 https://github.com/user-attachments/assets/f1c95b78-8561-4184-9616-c57e3fa3bc5a 上传文件、文件夹、一段代码或一个链接,就会得到一个简短的取件码和网址。拿到的人可以打开它,直到它过期,或下载次数达到你设定的上限,之后它就会被删除。 发送东西不需要账号,除非你关闭这个功能。Tessera 是单个可执行文件,网页界面直接内嵌其中;数据存放在 SQLite、PostgreSQL 或 MySQL,文件放在本地磁盘或对象存储。 适合谁用 自己和信任的人用。 部署在 NAS 或家用服务器上、放在 VPN 后面,在自己的设备之间传文件,或发给朋友。默认值就是为这种情况设计的:开启匿名上传、SQLite 加本地磁盘,其他都不用配置。参考个人使用的示例配置。 向陌生人开放的公共实例。 任何人都能上传,所以这台机器的每一份资源都在被陌生人使用。限制单个文件大小和总容量、缩短默认保留时间、保持关闭注册或改为邀请制,并接入恶意软件扫描。参考公共实例的示例配置。 团队或组织。 关闭匿名上传,让大家用公司的 OpenID Connect 登录。用角色控制谁能上传、谁能查看所有人的分享、谁能修改设置,每个账号也可以单独设置容量上限。需要不止一台机器时,可以换成 PostgreSQL 和 S3 兼容存储。 功能 底层设计 - 大文件可以不经过你的服务器。 接入 S3 或 Google Cloud Storage 后,上传会直接写入 bucket,普通下载也会直接重定向到 bucket。有密码或下载次数限制的分享一律经过服务器,所以这些限制依然有效。 - 限制在高负载下也守得住。 每次取件都用一条带条件的数据库更新来计数,两个人同时抢一次性分享,不会两人都拿到。每个请求都会检查期限,查询取件码也有限流。 - 流式传输,不先整个读入内存。 无论文件多大,内存占用都保持平稳。 - 存储后端可以混用。 本地磁盘、S3 兼容存储、Azure Blob、Google Cloud Storage 和 WebDAV,可以同时使用多个,在后台添加或停用都无需重启。大文件甚至可以拆分到多个 bucket 存储(默认关闭)。 - 支持 SQLite、PostgreSQL 或 MySQL,每种数据库都有各自手写的迁移脚本。 - 可以用来开发的 API。 OpenAPI 规范由服务器代码生成,CI 会检查并做模糊测试。命令行工具和 API token 使用与网页界面相同的端点。 - 容量与限制可以按角色、按账号设置,也能限制所有匿名上传的总量;此外支持断点续传,可选接入恶意软件扫描。 使用上 - 期限与下载次数。 每个分享都有保留时间,也可以限制最多被取几次。 - 密码,输入正确才能看到内容或下载。 - 预览。 代码带语法高亮,图片、SVG 和 Mermaid 图表直接显示在页面上。链接粘贴到聊天软件时会生成预览卡片。 - 文件夹与多个文件,可以打包成一个压缩包下载。 - 需要时再用账号。 注册可以设置为开放、邀请制或关闭;可以用密码、GitHub、Discord 或任意 OpenID Connect 登录。 - 界面提供英文、繁体中文和日文。 管理后台 管理所需的一切都在 /admin,几乎所有设置修改后下一个请求就生效,无需重启: - 仪表盘: 用了多少空间、存在哪里、流量和趋势,以及有风险的设置提醒。 - 用户: 停用或删除账号、调整角色、设置单个账号的容量上限,也能一次结束某个账号上传的所有分享。 - 分享: 实例上的所有分享,包括匿名上传的,以及上传者是谁。 - 邀请码、角色与权限。 - 设置: 登录方式、上传限制、默认期限、存储后端、电子邮件、扫描、链接预览和外观。 没有浏览器时,同样的设置也可以用命令修改:tessera-server settings list、settings set 。 快速开始 使用 Docker: bash docker run -d --name tessera --restart unless-stopped \ -p 12923:12923 -v tessera-data:/data ghcr.io/limatura/tessera 然后打开 。首次启动时,服务器会创建一个管理员账号,并把密码打印在日志里,只打印一次: bash docker logs tessera | grep password 在本仓库的克隆中执行 docker compose up -d 效果相同,配置保存在 docker-compose.yml 里。 开放到公网之前,请先阅读公共实例的示例配置。匿名上传默认开启,没有设置容量上限的话,任何能访问这台服务器的人都能把磁盘写满。 从源码运行 需要 Rust 和 pnpm。 bash pnpm install pnpm --filter web build pnpm server:dev 配置 大部分设置都在管理后台。少数必须在服务器启动前确定的,例如端口、数据库地址和数据目录,用环境变量设置: bash TESSERA_SERVER__PORT=9000 TESSERA_DATABASE__URL=postgres://tessera:secret@localhost/tessera TESSERA_SERVER__DATA_DIR=/var/lib/tessera 有两份带注释的示例可以作为起点:个人使用和公共实例。使用 systemd 的话有现成的 unit 文件。 存储 文件默认存放在本地目录,要使用其他存储后端可以在管理后台添加。 | 存储后端 | 说明 | | --- | --- | | 本地磁盘 | 默认 | | S3 兼容存储 | 已用 MinIO、Garage、RustFS、SeaweedFS、VersityGW 和 s3proxy 测试。提供凭证时,也会测试 AWS S3、Cloudflare R2 和 Backblaze B2。 | | Azure Blob Storage | 已用 Azurite 测试 | | Google Cloud Storage | 已内置,但尚未被测试覆盖 | | WebDAV | 仅支持小文件,上限为 share.inline_threshold_bytes(默认 64 KiB) | 命令行工具 在 Linux 或 macOS 安装 tess。Windows 版在 releases 页面;也可以用 cargo install --path apps/cli 从源码编译。 bash curl -fsSL https://raw.githubusercontent.com/Limatura/tessera/main/scripts/install.sh | sh 正式