取件码一发就走:飞牛 NAS 用 Docker 自建 FileCodeBox 文件快递柜 + 内网穿透
作者
小编
发布时间

项目介绍
FileCodeBox 是一个自己托管的「文件快递柜」。把文件拖进网页,它给你一串 5 位取件码;对方打开同一个网址、把码填进去,就能把文件取走。不用注册、不用加好友、不用装客户端 —— 像去快递柜取件一样,凭码开箱。
它最实用的地方是「有期限」:寄件的时候能选按天、按小时、按分钟过期,也能选「按取件次数」—— 比如只允许取一次,对方取走之后这个码就作废了。传完就忘、过期自动清掉,不用回头去删。
它很轻:一个容器,镜像压缩后七十多兆,跑起来常驻内存不到一百兆,编排文件十几行。除了文件,它也能寄纯文本,剪贴板里那段东西想发给另一台机器的时候很顺手。
它是 AGPL 协议的开源项目,用 Python 的 FastAPI 写的,界面是中文的,首屏干干净净就一张卡片:提取文件、请输入您的 5 位取件码、立即提取。
关于镜像
上游仓库里那份 docker-compose.yml 把版本号钉死在某一次发版上,README 里也建议生产环境固定版本号。不过它同时写明了 latest 指向最新正式版 —— 所以下面这份编排用的是 latest,你照着敲的时候拿到的就是当时的最新版,不会卡在我写这篇文章的那一天。
另外上游那份编排挂的是具名卷。下面这份改成了绑定挂载 ./data,数据就落在你选的那个项目目录里,看得见、备份方便、想重来一次直接换个空目录就行。
部署安装
这东西真正好用的场景是「对方不在你家里」:同事要一份文件、朋友要一段日志,你总不能让他先连上你家的局域网。所以它必须能从公网打开 —— 我用的是 帕斯内网穿透,飞牛的应用中心里就能装,装完在插件里直接建隧道,家里没有公网 IP 也能把它开放到公网。
我家是移动宽带,没有公网 IP,去配 IPv6 又嫌麻烦,所以这一步对我来说是必须的。
第一步:新建 Compose 项目
打开飞牛的 Docker 应用,切到上面的 Compose 标签,点「新增项目」。项目名称填 filecodebox,路径挑一个空文件夹 —— 这个目录后面就是它存文件的地方。
来源选「创建 docker-compose.yml」,把下面这段整段贴进去:
1services:2 filecodebox:3 image: lanol/filecodebox:latest4 container_name: filecodebox5 ports:6 # 左边 3390 是 NAS 上对外的端口,浏览器敲它;右边 12345 是容器里的,别改7 - 3390:123458 volumes:9 # 上传的文件和取件码记录都存这儿,容器删了也不丢10 - ./data:/app/data11 environment:12 # 生产模式跑,界面上不会冒出调试信息13 - APP_ENV=production14 # 只记警告以上的日志,日志不会把磁盘撑爆15 - LOG_LEVEL=warning16 # 不逐条记访问日志,NAS 少写点盘17 - ACCESS_LOG=false18 # 工作进程开一个就够,家用 NAS 别开多19 - WORKERS=120 restart: unless-stopped
第二步:编排里要认的三处
第一处是端口。冒号左边的 3390 是 NAS 上对外的端口,浏览器敲的就是它;右边的 12345 是容器里的,别改。左边这个数你可以换成自己没被占用的端口,换了记着后面建隧道要填一致。
第二处是数据目录。./data 就是你刚才选的那个项目目录下面的 data 文件夹,别人寄进来的文件、取件码的记录都在这儿,删了容器也不会丢。
第三处是 WORKERS=1。这类家用 NAS 的 CPU 核心不多,工作进程开一个就够用了,开多了反而抢资源。
底下勾上「创建项目后立即启动」,点确认。第一次要拉镜像,等一小会儿。
第三步:建隧道,把它开放到公网
容器跑起来之后,先别急着在局域网里点。打开飞牛的 PassNAT 插件,切到隧道那一页,点「创建隧道」。隧道名随便起一个,本地地址留默认就行 —— 默认就是 127.0.0.1,插件跟容器在同一台机器上,不用去查自己 NAS 的 IP。本地端口填刚才编排里冒号左边那个 3390。
建好之后按一下电源,隧道那一行会变成运行中,同时给出一个公网地址。后面所有事情都在这个公网地址上做 —— 包括第一次的初始化。
第四步:第一次打开,跑初始化
用公网地址打开,第一次进来是一页初始化向导:站点名称、管理员密码,还有单文件大小限制、上传频率、最长保存时间这些。
这一页里有两个选项值得停一下。一个是「提取码类型」,可以选纯数字,也可以选随机字符 —— 随机字符更难被人试出来。另一个是「允许的过期方式」,把「按取件次数」勾上,你才能寄出那种「只许取一次」的文件。
管理员密码请自己设一个复杂的。这个地址是公网上的,别用弱口令。
用起来是什么样
打开网址,默认停在取件那一面。要寄东西,点下面那行「需要发送文件?」翻到寄件面,把文件拖进去,选好过期方式,点「安全寄送」。
寄完它会给你一张卡片:文件名、大小、什么时候过期,还有那串取件码。旁边有「复制取件链接」,直接把链接发给对方最省事;只发那 5 位码也行,对方自己打开网址填进去一样能取。
对方拿到码之后,在首页那五个格子里填完,点「立即提取」,就能看到文件名、大小和下载按钮。整个过程他不用注册、不用登录,也不知道你 NAS 在哪儿。
几句实在话
单文件大小默认限制 10 MB,初始化那一页里能改大。要传大文件记得先把它调上去。
「允许游客上传」这个开关想清楚再开:开了之后任何拿到你网址的人都能往里传东西。如果这个地址只打算给熟人用,关着更省心。
过期时间别设太长。这东西的价值就在于「发完就过期」,真要长期存的东西该放到网盘或者别的地方去。