目 录CONTENT

文章目录

【好玩儿的 Docker 项目】10 分钟搭建一个火狐加密文件外链自托管版本——Send,对方打开浏览器就能下,不用装 App

咕咕
2026-08-27 / 0 评论 / 0 点赞 / 73 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
广告

1. 唠嗑

日常不管是工作还是生活中,我经常会有这样的需求:给别人一个安装包、一个配置文件、或者是一份内部资料,偶尔会需要传个视频。

一般这种情况下会用微信来传,但是有些敏感一点或者私密一点的东西,不想用它(尤其是apk文件默认还会给你改后缀);用邮箱附件的话工作上的可能更好一些,但是朋友之前的就显得比较麻烦了;我自己本身有搭建了nextcloud,用 Nextcloud 分享是OK的,但是有时候也觉得太重了一些;网上那些 WeTransfer 用着方便,文件却跑到别人服务器上,心里始终有点膈应。(都在一个局域网内的话,都是mac我就用airdrop,localsend也很好用,但是得对方有客户端)

今天咕咕给大家分享一个可以私有化部署的文件外链服务:Send

它是当年火狐 Firefox Send 停更之后,社区继续维护的版本。简单来说就是:

自己搭一个极简的传文件的网站。打开网页,把文件拖上去,得到一条链接发给对方。对方用手机浏览器点开就能下载,不用注册,也不用装 App。

文件会在浏览器里先加密再传到你的服务器,解密钥匙写在链接的 # 后面。次数用完或者到期,文件会从硬盘删掉,不会在你机器上当网盘一直占着。

注意一下:它和 Bitwarden 密码管理器里那个也叫 Send 的功能不是一回事。Bitwarden Send 适合临时丢密码、一段敏感文字;今天这个是专门传文件的。

2. Send 简介

4b4ed9eef46e1a6dc6f2a0d9b6ca37c6.png

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_DOWNLOADSDOWNLOAD_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:打开
0ea6ecb43aedaa1f6cb63a0b3e58ac96.png 2929415e5366a3073e04dede1814ea3f.png 4f43a034a076a5153ac52d5df9d5e4c0.png

SSL 那边:

  • 勾选 Request a new SSL Certificate
  • 勾选 Force SSL
  • 填邮箱
  • 同意协议
  • 保存

然后点进这个齿轮,贴上下面这段。

80eeee6ba958c32c6cd5ad47073bd27f.png f53f1aefd67aee477758345fc97af23e.png

大文件上传不写这个,很容易被 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. 怎么用

打开你的域名,把文件拖进去,选一下下载次数和过期时间,点上传。

7774bc6c7df40a8111c1f402005a9052.png

右侧会出现一张卡片,上面有:

  • 文件名和大小
  • 还剩几次下载、多久后过期
  • 下载
  • 复制链接

2cd925edd70334eea6897076f4a81b30.png

把链接发给对方即可。对方用电脑浏览器或 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. 注意事项

  1. BASE_URL 必须写成 https://你的域名,和反代域名一致,末尾不要 /
  2. Nginx Proxy Manager 里记得打开 WebSocket,Advanced 里加上上传大小和超时,否则大文件很容易失败。
  3. Send 没有「无限下载次数」,只能把数字调很大。
  4. Send 没有后台查看历史链接,发出去的地址要自己保管。
  5. 过期或次数用完后文件会删,别拿它当网盘。
  6. 这和 Bitwarden 里的 Send 不是同一个产品。

11. 最后

Send 这个项目还是挺有意思的。它不是网盘,也不是同步工具,就是当年火狐那个「加密外链」的自托管版。

相比 Nextcloud,它轻很多,对方也不用装客户端;相比商业传文件网站,数据在自己的 VPS 上,次数和到期时间自己决定。

如果你本来就有 VPS,又经常要把文件丢给别人,可以折腾一下。搭好之后,以后发个包就是打开网页、拖上去、复制链接,还是挺方便的。

0
广告

评论区