初始化蓝鸟文件快递柜源码与部署文档

This commit is contained in:
lhc committed 2026-10-05 23:41:07 +08:00
commit 5643d22242
70 files changed
+18669

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
# 运维与容量
首次安装与systemd部署步骤见 [deployment.md](deployment.md)。
## 两层限制
`file_budget` 限制实体对象与尚未写入的预留之和,重复分享共用一个实体;声明清单仍按每个文件完整预留。`data_budget` 另考虑 SQLite/WAL、隔离对象及余量;`min_free_bytes` 防止侵占主机最后的可用空间。配额按文件系统分配块保守估计,不等同于原始文件大小。到期但尚未删除、删除失败或仍有下载引用的对象继续占用额度。
Btrfs等文件系统可能以inode总数0表示不提供统计,此时不根据free_inodes=0拒绝上传;记录上限及文件系统硬配额仍生效。
应用控制无法为 SQLite、文件系统目录元数据、系统日志及管理员外部写入提供字节级绝对上限。严格模式需为 `/opt/bluebird/var` 设置独立文件系统项目配额或定容卷;应用预算必须低于硬上限,建议另留至少1GiB,并限制 inode。先用主机实际文件系统支持的管理方式配置配额,再验证 `quota`/`xfs_quota` 等工具显示的限制;软件不自动格式化或修改磁盘。
如现有主机不支持项目配额,可将数据目录挂载到专用定容卷。数据库、objects和tmp放在同一可靠本机文件系统,tmp与objects必须支持原子rename。不要把SQLite WAL放到NFS/SMB。
journald 不在 `/opt/bluebird` 下,主机需设置 `SystemMaxUse` 等日志上限。外部反向代理、备份、TLS证书与发布包有各自容量;严格整机预算须一起计入。
## 清理与故障
文件传输默认最长1小时、读写空闲30秒,配置可调整。
默认每分钟回收失效引用,删除最后引用后才删除实体。正在传输的对象延后删除。进程重启撤销尚未发布的上传,避免部分文件可见;未能确认实际输入量的中断尝试按完整预留流量保守计费。日额度按UTC日期计算。孤儿实体移入不可访问的 quarantine,24小时后清理。文件或密钥异常时不通过生成替代对象恢复权限。
已失效包裹在其文件全部清理、且距记录寄出时间超过30天后删除元数据;审计默认30天/10万条/32MiB估算内容,可在后台“容量与保留”修改;最大文件/访客/授权数受 `max_records` 限制。达到容量或记录上限后拒绝新增,不偷偷删除尚有效的分享。
停止服务后可执行 `check`(SQLite完整性、全部对象解密/哈希及启动对账)和 `cleanup`。启动恢复会取消未发布会话,故维护命令需安排窗口;不是无副作用的在线巡检。
## 安全部署
二进制及配置归 root,服务以专用账号仅写 var。按示例 systemd 收紧权限。支持配置中的HTTP与HTTPS入口;HTTP传输不加密,HTTPS入口使用Secure cookie。只信任实际代理IP/CIDR。上传对象不可通过代理 alias/root 直接获取。
加密 private identity 和 HMAC 密钥都有恢复意义。密钥轮换目前仅支持开关混存和保留同一既有 identity,不提供后台轮换旧私钥;不要手工覆盖 age.key,否则既有文件无法读取。
静止备份会短暂中断服务。不要在运行中只复制主数据库文件,不要把不同时间的数据库和对象目录拼接。升级或恢复前保存配置及密钥副本。恢复得到的是历史快照,所以旧分享/会话全部失效,需要管理员逐项审核重新发布。
后台容量与审计设置保存在SQLite runtime_settings中,TOML的相应值仅首次初始化使用。降低文件预算会停止超出预算的新上传,不删除有效文件;降低审计预算会清理最旧事件。审计计数及内容量由SQLite触发器维护,避免每次日志写入扫描所有记录。