Campsend:自托管开源版 WeTransfer,Rails 8 + SQLite
给客户发照片集,一直是压缩上传 Google Drive 再发链接。文件和个人资料混在同一个网盘,链接看起来和自己的工作毫无关系。直到遇到 WeTransfer:上传、填邮箱、发送,完事——像把工作"递给"对方而不是"归档"到某处。九年后作者用 Rails 8 和 SQLite 做了开源、可自托管的版本 Campsend。
什么改变了所有权观念
2025 年 WeTransfer 更新服务条款,新措辞覆盖了对上传内容的使用(包括机器学习用途),引发大量用户同样解读后一周内撤回。这带来一串问题:**谁控制我发送的文件?定价或商业模式变了怎么办?我已经有存储桶,想让文件落到里面怎么办?**作者要的是 WeTransfer 那种愉快的发送体验,但不交出存储层。
为什么现有选项不合适
MASV 是托管服务,同样的问题;Erugo 可自托管,但感觉像个"超级文件分享应用",仍然不是那种舒服的文件分享体验。作者的定位更小、更明确:把工作发给客户、让交付页面看起来像自己的、文件放在自己选的地方——就这些。
Campsend 做什么
发送文件、给交付页打品牌、看收件人是否打开或下载、选择文件存哪里;也可以整个自己跑、指向自己的对象存储。自托管是最在意的部分,所以应用必须简单到能运维。
为什么 Rails 8 + SQLite
Rails 8 方向正好:更少的部件。不想自托管意味着先配队列、缓存、会话存储和 Postgres 集群。想要一个应用、一个数据库、对象存储、一次部署。SQLite 契合:Campsend 围绕单一可写主机构建。
负载测试(笔记本上):200 并发用户、每秒 72 请求、每秒 3.3 次交付创建、p95 36ms,SQLite 从未遇到锁竞争;先耗尽的是 Puma 线程而不是数据库。
两个意外
存储账单:Cloudflare R2 每月每 GB $0.015 且无 egress 费;S3 是 $0.023 + 每 GB 出站 $0.09。每月给客户发 100GB:S3 花 $2.30,R2 扣掉免费 10GB 后 $1.35。文件分享服务收的钱几乎不是存储——是围绕它的产品。
要自己写的东西少:认证、邮件、后台任务、数据库访问、文件存储都已就位,大部分时间花在了真正差异化的事情上。
实践建议
- 自托管应用选型先算运维成本:一个数据库 vs 一整套基础设施,Rails 8 + SQLite 这类"少部件"路线适合个人与小团队;
- 对象存储看 egress:R2 无出站费对发送型应用优势明显;
- 差异化在"产品层"而非"存储层"——交付体验与归属感是用户感知的价值。
来源:Why I Built An Open Source Alternative To WeTransfer - DEV Community