1. 唠嗑
日常不管是工作还是生活中,我经常会有这样的需求:给别人一个安装包、一个配置文件、或者是一份内部资料,偶尔会需要传个视频。
一般这种情况下会用微信来传,但是有些敏感一点或者私密一点的东西,不想用它(尤其是apk文件默认还会给你改后缀);用邮箱附件的话工作上的可能更好一些,但是朋友之前的就显得比较麻烦了;我自己本身有搭建了nextcloud,用 Nextcloud 分享是OK的,但是有时候也觉得太重了一些;网上那些 WeTransfer 用着方便,文件却跑到别人服务器上,心里始终有点膈应。(都在一个局域网内的话,都是mac我就用airdrop,localsend也很好用,但是得对方有客户端)
今天咕咕给大家分享一个可以私有化部署的文件外链服务:Send。
它是当年火狐 Firefox Send 停更之后,社区继续维护的版本。简单来说就是:
自己搭一个极简的传文件的网站。打开网页,把文件拖上去,得到一条链接发给对方。对方用手机浏览器点开就能下载,不用注册,也不用装 App。
文件会在浏览器里先加密再传到你的服务器,解密钥匙写在链接的 # 后面。次数用完或者到期,文件会从硬盘删掉,不会在你机器上当网盘一直占着。
注意一下:它和 Bitwarden 密码管理器里那个也叫 Send 的功能不是一回事。Bitwarden Send 适合临时丢密码、一段敏感文字;今天这个是专门传文件的。
2. Send 简介

Send 能干嘛?
- 网页拖文件,生成加密分享链接
- 对方不用注册、不用装 App,浏览器打开就能下
- 可设置下载次数和过期时间
- 次数用完或到期后,文件从服务器删除
- 文件落在 VPS 本地磁盘,不必接 S3
- 有配套命令行工具 ffsend,喜欢终端的小伙伴也能用
适合的场景包括:
- 给同事、朋友发安装包、压缩包、文档
- 偶尔发一个视频,对方用 iPhone Safari 就能下
- 已经有 VPS,不想再为一两条外链去用商业网盘
- 觉得 Nextcloud 太重,只想要「传完就走」
不适合的场景:
- 当长期网盘、和家人同步相册
- 需要登录后台查看「我发过的所有链接」
- 需要对方在线播放、转码视频(那是另一类项目,视频播放的这个可以看看之前发过的Fire share这个项目)
提醒:Send 没有账号系统。管理卡片只存在你当时上传用的那个浏览器里。链接要自己复制保存,链接丢了,服务器上的密文也解不开。
2.1 和 Nextcloud / 网盘外链怎么选?
看到这里,可能还是有小伙伴会疑惑:
我已经有 Nextcloud 了,直接开分享链接不就好了?为啥还要再搭一个?
可以,但体验不一样。
Nextcloud 是网盘:同步、版本、权限、日历、协作都捆在一起,分享只是其中一项。Send 只做一件事——加密外链,用完就删。
简单对比一下:
| 方案 | 适合谁 | 优点 | 不足 |
|---|---|---|---|
| 微信 / 邮箱附件 | 随便发一下 | 对方一定有 | 体积限制大,不适合视频 |
| Nextcloud 分享 | 已经在用网盘的人 | 和现有文件在一起 | 重,为了外链有点浪费 |
| Bitwarden Send | 丢密码、短文本 | 和密码库一体 | 附件很小,不适合大文件 |
| Send | 有 VPS、要给别人丢文件 | 轻、加密、对方不用装 App | 没有账号后台,链接要自己保管 |
咕咕的建议是:
日常短文本、密码继续用 Bitwarden。
自己的文件同步继续用现有网盘。
专门「发给别人、对方打开就能下」这一件事,用 Send 更干净。
3. 相关地址
项目地址(GitLab 主仓库,GitHub 是镜像):
https://gitlab.com/timvisee/send
https://github.com/timvisee/send
Docker 说明:
https://github.com/timvisee/send/blob/master/docs/docker.md
命令行客户端 ffsend:
https://github.com/timvisee/ffsend
感兴趣的小伙伴可以去给项目点个星星。
当然如果你想自己用 Docker 搭建一个,那我们就继续往下!
4. 搭建环境
- 服务器:咕咕这边建议用 1G 内存以上的 VPS,比如 莱卡云服务器,当然你也可以选择其他 高性价比的服务器。重点看磁盘和带宽,因为文件会先落到服务器硬盘,再从这台机器出站给对方。
- 系统:Debian 11 / Debian 12 / Ubuntu 都可以。
- 安装好 Docker、Docker Compose(相关脚本)
- 【必需】域名一枚,并做好解析到服务器上(域名购买、域名解析)
- 【非必需】提前安装好宝塔面板海外版本 aapanel,并安装好 Nginx(安装地址)
- 【非必需本教程选用】安装好 Nginx Proxy Manager(相关教程)
5. 搭建视频(等有空了补充 = =)
5.1 YouTube
视频地址:
5.2 哔哩哔哩
哔哩哔哩:
6. 搭建方式
6.1 安装 Docker 与 Nginx Proxy Manager
可以直接参考这篇内容:
https://blog.laoda.de/archives/nginxproxymanager/
6.2 创建安装目录
创建一下安装目录:
sudo -i
mkdir -p /root/data/docker_data/send
cd /root/data/docker_data/send
接着我们来编辑 docker-compose.yml:
vim docker-compose.yml
贴入下面内容:
services:
send:
image: registry.gitlab.com/timvisee/send:latest
container_name: send
restart: unless-stopped
depends_on:
- send-redis
ports:
- "1443:1443"
volumes:
- ./uploads:/uploads
environment:
NODE_ENV: production
PORT: "1443"
BASE_URL: https://send.example.com #改成自己之后用的域名
REDIS_HOST: send-redis
FILE_DIR: /uploads
MAX_FILE_SIZE: "8589934592"
MAX_EXPIRE_SECONDS: "604800"
DEFAULT_EXPIRE_SECONDS: "86400"
EXPIRE_TIMES_SECONDS: "3600,86400,259200,604800"
MAX_DOWNLOADS: "20"
DOWNLOAD_COUNTS: "1,2,5,10,20"
DEFAULT_DOWNLOADS: "1"
send-redis:
image: redis:alpine
container_name: send-redis
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- ./redis:/data
需要改的地方:
BASE_URL改成你自己的域名,必须带https://,末尾不要加/- 左边的
1443如果被占用了,可以改成服务器上没人用的端口,比如11443:1443 MAX_FILE_SIZE单位是字节,上面是 8GB,按你VPS实际的磁盘和需求改- 下载次数没有「不限制」这一档。想接近不限,可以把
MAX_DOWNLOADS和DOWNLOAD_COUNTS里加一个很大的数字,比如999999
修改完成之后,英文输入法下按 i 修改,完成之后按 esc,然后输入 :wq 保存退出。
创建数据目录:
mkdir -p uploads redis
如果后面上传报权限错误,可以再执行:
chown -R 1000:1000 uploads redis
6.3 查看端口是否被占用
查看端口是否被占用,以 1443 为例:
lsof -i:1443
如果啥也没出现,表示端口未被占用,可以继续。
如果出现:
-bash: lsof: command not found
运行:
apt install lsof
6.4 启动 Send
cd /root/data/docker_data/send
docker compose up -d
查看日志:
docker compose logs -f
没报错的话,理论上本机访问:
curl -I http://你的ip:1443
能看到响应。这个服务是拿来传文件的,不建议直接裸奔公网,咕咕建议一定要配置 HTTPS 反向代理。
7. 反向代理
7.1 利用 Nginx Proxy Manager
在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:
域名购买、域名解析:https://blog.laoda.de/archives/namesilo/
之后登录 Nginx Proxy Manager,添加一个新的 Proxy Host。
按下面这样填:
- Domain Names:
send.example.com - Scheme:
http - Forward Hostname / IP:
172.17.0.1(如果你的NPM和项目不在同一台服务器上,这边就填你项目所在的服务器的IP) - Forward Port:
1443 - Websockets Support:打开
- Block Common Exploits:打开
SSL 那边:
- 勾选 Request a new SSL Certificate
- 勾选 Force SSL
- 填邮箱
- 同意协议
- 保存
然后点进这个齿轮,贴上下面这段。
大文件上传不写这个,很容易被 NPM 默认限制卡成 413 或者中途断开:
client_max_body_size 8G;
proxy_request_buffering off;
proxy_buffering off;
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
send_timeout 3600s;
BASE_URL 必须和这里的域名、证书完全一致,不然生成出来的链接会错。
配置好之后,访问你自己的域名,比如:
https://send.example.com
就能看到上传页面。
7.2 利用 Caddy 反向代理
如果你用的是 Caddy,也可以这样写:
send.example.com {
reverse_proxy 127.0.0.1:1443
request_body {
max_size 8GB
}
}
Caddy 会自动申请和续期 SSL 证书,适合不想点面板的小伙伴。
8. 怎么用
打开你的域名,把文件拖进去,选一下下载次数和过期时间,点上传。

右侧会出现一张卡片,上面有:
- 文件名和大小
- 还剩几次下载、多久后过期
- 下载
- 复制链接

把链接发给对方即可。对方用电脑浏览器或 iPhone Safari 打开就能下。
链接大概长这样:
https://send.example.com/download/xxxxx/#一串密钥
# 后面是解密密钥,只活在浏览器里,不会进服务器日志。这条链接要自己保存好。关掉页面前不复制,换设备就找不到管理卡片了。
同一个浏览器再打开首页,右侧通常还会列出这个浏览器里传过、还没过期的文件。这是存在浏览器本地的,不是账号系统。
建议:
- 给熟人发文件,默认 1 天、几次下载就够
- 大视频尽量用电脑浏览器上传,手机当接收端更稳
- 不要把域名发到公开论坛当免费网盘,不然磁盘和带宽会很难顶
9. 更新与卸载
更新
cd /root/data/docker_data/send
docker compose pull
docker compose up -d
停止
docker compose down
卸载
cd /root/data/docker_data/send
docker compose down
cd /root/data/docker_data
rm -rf send
删除前记得先备份:
/root/data/docker_data/send/uploads
/root/data/docker_data/send/redis
上传的文件和 Redis 元数据都在这里。
10. 注意事项
BASE_URL必须写成https://你的域名,和反代域名一致,末尾不要/。- Nginx Proxy Manager 里记得打开 WebSocket,Advanced 里加上上传大小和超时,否则大文件很容易失败。
- Send 没有「无限下载次数」,只能把数字调很大。
- Send 没有后台查看历史链接,发出去的地址要自己保管。
- 过期或次数用完后文件会删,别拿它当网盘。
- 这和 Bitwarden 里的 Send 不是同一个产品。
11. 最后
Send 这个项目还是挺有意思的。它不是网盘,也不是同步工具,就是当年火狐那个「加密外链」的自托管版。
相比 Nextcloud,它轻很多,对方也不用装客户端;相比商业传文件网站,数据在自己的 VPS 上,次数和到期时间自己决定。
如果你本来就有 VPS,又经常要把文件丢给别人,可以折腾一下。搭好之后,以后发个包就是打开网页、拖上去、复制链接,还是挺方便的。
评论区