蓝鸟文件快递柜

匿名寄件、凭码取件,管理员独立登录。Go + Vue 3 + SQLite,本机文件存储。相同内容完整上传校验后共用一个对象,分享权限、次数和自动续期按每个文件独立计算。支持取件密码和可选 age 落盘加密。

从源码构建并运行

需要 Go(见 go.mod)和 Node.js 仅用于构建,构建脚本无需 make。运行发布包不需要它们,也不需要外部数据库。

./scripts/build.sh build
cp deploy/config.example.toml config.toml
./build/bluebird init --config config.toml
./build/bluebird serve --config config.toml

打开 http://localhost:8080。首次初始化在终端设置管理员密码,无默认密码。自动化可通过 BLUEBIRD_ADMIN_PASSWORD 环境变量传入,避免命令行参数泄露密码。默认只监听回环地址;可通过 access_urls 增加公网HTTP、HTTPS和独立内网IP入口。浏览器cookie按入口协议自动处理,主入口的 secure_cookies 与其协议一致。内网HTTP需显式开启 allow_lan_http,并绑定可访问的内网地址。

直接运行发布包

解压对应架构的发布包,进入解压目录后运行,无需安装Go、Node.js或数据库服务:

./bluebird init --config config.toml
./bluebird serve --config config.toml

默认地址为 http://localhost:8080。其他访问入口按部署指南配置。

Linux 服务器安装

Linux amd64发布包包含首次安装脚本,默认将二进制、配置及数据安装到 /opt/bluebird,使用独立bluebird账号和systemd运行,不覆盖已有安装。运行时无需Go、Node.js或外部数据库。

mkdir bluebird-release
tar -xzf bluebird-linux-amd64.tar.gz -C bluebird-release
cd bluebird-release
sudo ./install.sh --url https://files.example.com \
  --access-url http://files.example.com \
  --lan-url http://192.168.1.10:8080 --encrypt --no-start

将域名替换成自己的,按提示设置管理员密码。配置好已有HTTPS代理后启动:

sudo systemctl daemon-reload
sudo systemctl enable --now bluebird.service

完整步骤、内网HTTP选项、目录权限、备份及升级见 部署指南。脚本不修改代理、DNS或防火墙。管理员通过 https://你的域名/#/admin 登录。

匿名会话7天、默认每天每 IP 最多20批及1GiB、默认单文件100MiB/每批10个/总500MiB。cookie用于寄件历史和所有权,不能替代 IP 限额;NAT 多人会共享 IP 限额,IPv6 按 /64 归并。管理策略可调整这些值。系统不试图证明一个匿名会话对应一个自然人。可在“我的寄件”导出管理凭据,换浏览器后通过同页导入管理。

renewal_mode="add" 默认成功下载延长3天,总保留期最多30天,剩余次数不恢复。初始保留最多7天与总保留期上限是两个控制项。下载后仅该文件续期;最后一次下载不再续期,因为此时已无下载权限。

存储、加密和配额

对象 ID 随机,原文件名不作为服务器路径;上传内容不执行、不解压、不预览。下载统一附件类型。设置 encryption=true 后,新对象直接流式加密落盘;文件/密钥同时泄露时不能提供额外保密,也不是端到端加密。备份 var/secrets,不要删掉既有密钥;缺失加密私钥时服务拒绝启动。

默认跨包裹去重,相同内容、相同存储加密格式/密钥只存一份。服务端完整接收并计算哈希,不接受客户端“已有哈希免上传”。这能节省长期实体占用,不能省网络流量,也不能省上传期间的临时预留。剩余空间不足时,即使文件可能重复,也可能先被拒绝;不要依赖去重保证磁盘装得下。

文件预算原子预留、临时文件计入预算,独立管理元数据和隔离对象。管理员可在“容量与保留”调整文件预算、数据总预算、卷最少保留空间及审计的天数、条数、内容预算;保存后立即生效并持久化,重启不会被TOML初始值覆盖。应用预算是保守接收控制,严格整站磁盘硬上限请设置项目配额/定容卷,见 运维说明。运行日志默认进入 journald,由主机单独限制其容量。

备份、恢复和升级

先停止 systemd 服务;维护 CLI 与服务使用同一个独占进程锁。

sudo systemctl stop bluebird
sudo -u bluebird /opt/bluebird/bluebird backup --config /opt/bluebird/config.toml --output /备份目标/bluebird.tar.gz
sudo systemctl start bluebird

备份输出须位于数据目录之外、目录需对运行账号可写。归档带数据库、对象、密钥和配置,所有内容均为敏感数据;备份可由外部备份系统进一步加密。恢复配置指向一个空数据目录:

./bluebird restore --config /新安装目录/config.toml --input /备份目标/bluebird.tar.gz
./bluebird check --config /新安装目录/config.toml

原配置副本存为数据目录中的 restored-config.toml,供管理员核对,不自动覆盖新主机配置。恢复后所有旧取件码、匿名管理凭据及会话失效,包裹显示“恢复待审核”。管理员可显式重新发布并设置新分享授权,避免回滚快照重开已撤销分享。需重置管理员密码时停止服务后执行 reset-password。

新版发布包包含 upgrade.sh,自动停服、一致性备份、保留配置与数据、替换程序并检查后启动。可用 --access-url 和 --lan-url 添加入口,具体命令见部署指南。当前数据库结构版本1;不支持结构降级,后续不兼容迁移需恢复配套备份。

开发与检查

以下命令在源码目录中运行。

go test -race ./...         # Go race + 业务/故障集成测试
go vet ./...
npm --prefix web run build  # Vue 类型检查及构建
./scripts/build.sh release amd64  # Linux amd64部署包、安装脚本、校验和
# ./scripts/build.sh release     # 同时生成amd64/arm64包

前端开发:npm --prefix web run dev,代理本机8080后端。此时 Origin 仍需匹配配置的 public_url 或 access_urls,如把 public_url 设为 http://localhost:5173。

测试步骤见 测试说明。API 见 接口文档,备份、容量与清理规则见 运维说明。

首版不包含断点续传、服务端自动压缩、在线预览、端到端加密或病毒扫描。系统限制内容执行及资源使用,不能保证收件人下载的任意文件无病毒。

页面、身份与审计

产品显示名称为“蓝鸟”,主色为 #1677ff,使用蓝底白鸟SVG标志及多尺寸favicon。公共页面不展示管理入口;管理员通过 /#/admin 登录独立控制台,寄件/取件通过公共页面匿名使用。

“开放寄件服务”和“开放取件服务”是全站开关,关闭不会出现注册流程,管理员身份也不绕过匿名服务开关。

浏览器识别cookie从首次访问起固定有效7天,访问不会自动续期;“我的寄件”显示实际到期时间。原始管理凭据暂存在当前标签页的sessionStorage,关闭标签页会丢失,可事先导出JSON到其他设备导入。管理凭据只证明对应寄件所有权,不能延长文件保留期或恢复到期/删除文件;记录尚在时显示历史状态,记录已清理则提示凭据失效。

审计默认保留30天、最多100000条、32MiB估算内容预算,任一上限先达到时清理最旧记录。写入时执行条数和内容上限,后台每分钟清理到期记录。估算包括UTF-8字段与每条开销,不等于整个SQLite文件大小;删除后数据库复用空闲页,严格物理上限由文件系统配额约束。

标志源文件位于 web/public/logo.svg,网站图标位于同目录。修改SVG后可运行 node scripts/icons.mjs 生成ICO、PNG及手机图标,再构建前端。

S
Description
文件快递柜
Readme
289 KiB
0 Stars 1 Watchers 0 Forks
Languages
Go 58.2%
Vue 16.1%
TypeScript 12.5%
Shell 7.6%
Python 4.3%
Other 1.3%