⬆ 顶部
对 Ta-Na-Si Media & Document Repository 的透明概览 —— 架构、技术栈与开发致谢。

档案库核心

本页说明 Ta-Na-Si Media & Document Repository 由什么构成 —— 它的架构、它的技术,以及其开发背后的人。我们相信完全的透明:任何使用档案库、或考虑运营自己档案库的人,都有权确切知道这个系统由什么组成。“关于”页面解释这个档案库是为了什么;本页解释它如何运作。

1. 档案库核心是什么

档案库核心是本档案库运行于其上的软件:一个完全独立、自托管的数字档案系统,为一个目的从零写起 —— 把文档和媒体作为可佐证的源材料加以存储、组织并开放提供。它不基于 WordPress、Joomla、Drupal 或任何其他现成的 CMS,也不使用任何 PHP 框架。每个组件 —— 数据库层、搜索引擎、策展工作间、公开页面 —— 都是为这项任务专门设计和编写的。

这套软件按多安装平台构建:它不服务于一个中央档案库,而是驱动许多彼此分离、相互独立的档案库。每个档案库 —— 无论是小小的家庭收藏还是大型的地区性档案库 —— 都是一个自成一体的完整安装,拥有自己的数据库、自己的文件和自己的守护者。档案库之间没有共享的基础设施,也没有它们所依赖的中央服务。

2. 一套代码库,众多独立档案库

每个安装运行完全相同的代码库。所有专属于某一台服务器的内容 —— 它的公开地址、它的数据库访问、它的邮件发送方 —— 都存放在一个环境文件中,该文件在安装时创建一次,并且从不随代码流转。正是这种严格分离让这一模式得以成立:同一个软件更新可以应用到每一个档案库,无论大小,而不触碰任何档案库的个体配置。

新档案库通过浏览器中的引导式设置助手安装 —— 无需命令行,无需手工编辑配置文件。助手支持 18 种语言,检查服务器的运行条件,在写入任何内容之前先测试数据库连接,并以安全哈希的密码创建所有者账户。数据库表由一个幂等的迁移系统创建:它可以运行任意多次,并且总能收敛到正确的模式。之后的模式变更都带有版本并被跟踪,因此每个安装都能确切看到自己所处的位置;常规变更自动应用,而重量级变更会等待所有者的明确确认。更新遵循同样审慎的次序:先备份,再迁移,然后清空缓存。

3. 技术栈 版本 1.0.0 (Thuringia)

🖥️ 服务器标准的 Apache + PHP 环境 —— 可运行在普通的共享主机或任何自有服务器上;无需容器、无需构建工具、无需外部服务
🐘 后端PHP 8.1 或更新版本 —— 不用框架;服务器端唯一的第三方库是小巧的 Parsedown Markdown 解析器
🗄️ 数据库一个多驱动层,支持 SQLite(零配置)、MySQL/MariaDB 和 PostgreSQL —— 每个档案库按自己的规模选择
🔎 搜索覆盖所有记录文本的全文索引,外加九条分面轴(主题、地点、语言、贡献者、体裁、属于、馆藏、系列、访问),带实时命中数
🌐 语言界面已为 18 个语言包做好准备(翻译中);搜索与分面原生支持 49 种内容语言,包括从右至左的文字
📦 文件存储按 UUID 分片的媒体目录树,路径确定 —— 为增长到数以百万计的文件而设计;可选异地复制到 S3 兼容的对象存储
🎨 前端手写的 HTML5 与 CSS3,采用分层设计系统,配以极少量原生 JavaScript —— 每个页面首先在无脚本时即可工作
🧩 浏览器库三个自托管的开源组件,由档案库自身提供,绝不来自 CDN:用于图像可缩放深度视图的 OpenSeadragon(New BSD 3-Clause)、富文本编辑器 Jodit(MIT)和 Markdown 编辑器 EasyMDE(MIT)
🔒 身份验证基于会话的登录,配以强密码哈希、可选的双重验证代码(TOTP)、登录尝试锁定,以及每个表单上的 CSRF 防护
⚡ 缓存基于文件的页面缓存,带防踩踏保护,并为服务器、浏览器和 CDN 设置各自的生存期;可选在前面加 Cloudflare
🗺️ SEO 与可发现性流式 XML 站点地图(单文件或面向超大档案库的索引模式)、自动生成的 robots.txt、结构化元数据(JSON-LD)、干净稳定的 URL
💾 备份四种可选的 ZIP 备份类型,带保留策略,可选经 rclone 的异地同步,以及一个受保护的恢复流程 —— 恢复前先创建一份安全备份

4. 搜索与分面导航

公开档案库的心脏是它的搜索。一个统一的全文索引覆盖每条已发布的记录 —— 标题、描述、摘要、备注和文章正文 —— 因此一个搜索框就能触及一切。但仅有全文对严肃的研究并不足够,所以每条记录还沿九条分面轴加以分类:

  • 主题 —— 记录所涉及的话题与主题。
  • 地点 —— 记录所关联的地理位置,取自结构化的地点目录(见下文 GeoNames 一节)。
  • 语言 —— 记录内容的语言,出自 49 种原生支持的语言。
  • 贡献者 —— 参与其中的人:作者、讲述者、摄影师、编辑。
  • 体裁 —— 材料的性质:证言、分析、报道等等。
  • 属于 —— 记录所属的更大作品,把多部分材料联结起来。
  • 馆藏 —— 由档案库守护者维护的、经策展的命名分组。
  • 系列 —— 为有先后顺序的材料设置的有序分组。
  • 访问 —— 记录的访问级别,例如公开或仅限会员。

分面导航的工作方式,正如研究者在大型机构档案馆所习惯的那样。在结果旁边,每条轴都显示其最常见的取值并附实时命中数 —— 点击一下即可缩小结果,来自不同轴的筛选器可以自由组合:例如,主题为教育、语言为德语、来自 1990 年代的全部音频记录。已激活的筛选器以可移除的小标签显示在结果上方,因此当前的收窄条件始终清晰可见,任何筛选器都能一键再次去掉。当某条轴的取值多于侧边栏所能展示时,还可以逐字母浏览整条轴的完整字母索引。

在分面之外,结果还可以按材料种类(文章、音频、视频、文档、图像、数据集 —— 需要时可多选)和按日期限定,后者既可通过快捷的年代链接,也可给出精确的年份区间。结果可按相关性、标题或日期排序,并以四种方式显示:详细列表、图片画廊、紧凑网格或全屏幻灯片。整个搜索状态 —— 查询、筛选、排序、视图 —— 都存在于地址栏中,因此任何结果页都可以原样收藏、引用和分享。

这些分面并不是随意漂浮的标签:它们的词表由档案库的守护者策展维护,馆藏和系列等轴可以按层级组织。记录页上显示的每个分面值都反向链接回搜索,因此读者随时可以从一条有意思的记录转向档案库中关于同一主题、地点、人物或系列的所有其他藏品。

5. 记录页

每条记录都有自己的页面,并按类型恰当呈现:音频和视频直接在页面中播放,PDF 文档在内嵌查看器中打开,图像可在可缩放的深度视图中细看,文章则由经过安全过滤的 Markdown 渲染而成。在文件本身之外,记录页还显示完整描述、贡献者、它所属的更大作品(含各部分之间的导航)、值得接着看的相关条目,以及 Chicago、APA 和 MLA 格式的现成引用。每条记录都带有机器可读的元数据(schema.org JSON-LD)和一个永不改变的稳定地址;还可以为其分配形如 /go/… 的短永久链接,便于在印刷品和外部引用中使用。

6. 语言

这个档案库为一个多语言的世界而建,分为两个不同的层面。

界面 —— 访客或守护者在页面上读到的一切 —— 以英语写成,并把每一段可见文本保存在可翻译的语言文件中,绝不埋进代码。18 种语言的界面语言包正在准备并处于翻译之中:英语、德语、法语、意大利语、西班牙语、葡萄牙语、荷兰语、俄语、波兰语、瑞典语、丹麦语、挪威语、中文、日语、韩语、土耳其语、捷克语和罗马尼亚语。语言包在管理面板中安装和管理,面板还会跟踪每份翻译相对英语原文的完成度。设置助手如今已经会说全部 18 种语言。

内容 —— 归档的材料本身 —— 原生支持 49 种语言:英语、德语、法语、意大利语、西班牙语、葡萄牙语、荷兰语、俄语、乌克兰语、波兰语、希腊语、瑞典语、丹麦语、挪威语、土耳其语、中文、印地语、阿拉伯语、印度尼西亚语、日语、越南语、韩语、白俄罗斯语、捷克语、斯洛伐克语、匈牙利语、罗马尼亚语、保加利亚语、克罗地亚语、斯洛文尼亚语、芬兰语、孟加拉语、乌尔都语、波斯语、冰岛语、爱尔兰语、斯瓦希里语、泰语、菲律宾语、希伯来语、旁遮普语、泰卢固语、泰米尔语、马拉地语、豪萨语、约鲁巴语、阿姆哈拉语、爪哇语和普什图语。记录会被标注其内容的语言,搜索中的语言分面可按其中任意一种筛选 —— 例如,读者一键即可调出档案库收藏的所有乌克兰语或阿拉伯语内容。阿拉伯语、希伯来语、波斯语和乌尔都语等从右至左的文字在全站均正确显示。

此外,每个公开页面上的语言切换器还可以打开该页面的机器翻译视图,而不会向页面本身加载任何第三方脚本。

7. 地点数据:GeoNames

地点分面背后是一个按层级组织的地理目录 —— 国家、地区、地点 —— 让记录可以被精确定位,也可以按地理再次找到。基础数据(全球各国及其行政区划)来自 GeoNames 地理数据库,在安装时或之后从管理面板导入到本地查询存储中;档案库的守护者可以用自己的本地地点加以扩充。地点数据:GeoNames.org,依 CC BY 4.0 许可。

8. 词表数据:主题与体裁目录

支撑主题、体裁等分面的策展词表随软件一同交付并集中翻译,因此其词条在每种界面语言中都有明确含义。为使其与公认的知识组织标准保持兼容,目录工作以下列公开受控词表作为参考来源:欧盟多语言叙词表EuroVoc(© 欧洲联盟,CC BY 4.0)、IPTC Media Topics(© IPTC,CC BY 4.0)以及Getty Art & Architecture Thesaurus(ODC-By 1.0)。凡源自外部词表的目录词条均记录其出处;所有第三方组件与数据来源的完整清单随每个安装一同提供:在此阅读。

9. 工作的一面

公开档案库的背后是一个分为四个区域的管理面板:人员治理(运营者与会员账户、角色、权限)、内部出版(记录策展工作间与编辑器)、平台配置(设置、媒体形式、分面、语言、站点结构)和技术与数据(系统状态、诊断、备份)。档案库守护者需要配置的一切都能通过这些页面完成 —— 运营一个档案库不需要改动代码。

记录沿一条清晰的策展流程流转:先作为草稿创建,填入元数据和分面,可选择提交审核,然后发布 —— 之后也可以再次归档。文件以可断点续传的小分块上传,因此大体积媒体也能挺过不稳定的连接;每次上传在被接受之前,都会通过文件签名检查核对其声明的类型。在服务器支持的情况下,预览图会自动生成。

一个可选的会员区域让档案库的成长超越它的守护者:注册会员可以沿四个固定层级逐步获得信任,从阅读和讨论直到策展和发布记录。权限在两侧都足够精细 —— 管理角色可自由定义,取自一份详尽的权限登记表,而针对个人的覆盖设置可以放宽或收紧任何一个人的访问。所有者的访问被有意地完全保存在数据库之外,因此一个损坏的文件或一次失败的变更永远无法把档案库的大门锁死。

10. 数据安全

备份是头等要务:档案库守护者可以为数据库、媒体内容、安装本身或全部内容创建带日期戳的 ZIP 备份 —— 随时按需,并配有保留最新、移除最旧的保留策略。每个备份还可以额外复制到任何 S3 兼容的异地存储提供商。恢复被有意地设了防护:系统会先核验备份与安装是否匹配,并在触碰任何内容之前先做一次新的安全备份。加上带版本的模式跟踪,这意味着一个用心建立的档案库可以被长期维护、迁移和修复。

11. 设计原则

这个档案库围绕一小组不容商量的原则构建,它们指引了每一个架构决策:

  • 不跟踪、不做分析、无第三方请求 —— 每一项资源,包括字体和脚本库,都由档案库自己的服务器提供。关于访客的任何信息都不会被发往任何地方。
  • 生来即可被开放抓取 —— 干净的 HTML、结构化的站点地图、描述性的元数据,以及一份欢迎搜索引擎和 AI 系统的 robots.txt,让归档的事实被广泛找到和阅读。
  • 可打印、可下载 —— 文档就该离开屏幕、进入现实世界。
  • 能以多种语言阅读 —— 18 个界面语言包正在准备,搜索与分面原生支持 49 种内容语言,每个公开页面都有语言切换器(见上文“语言”一节)。
  • 依赖极少且受约束 —— 屈指可数的几个自托管组件(服务器上的一个 Markdown 解析器;浏览器中的编辑器与查看器库),与系统自身的代码严格分离。没有 CDN,没有包管理器,没有构建步骤。
  • 环境无关 —— 完全相同的代码运行在每一个安装上;每台服务器只有一个环境文件不同。
  • 体面地降级 —— 可选功能会检查自己的前提条件,在服务器无法支持时干净地关闭,而不是弄坏档案库。

12. 开发致谢

👥 项目与内容

Raven D. Pond & Keylam Folker —— Ta-Na-Si 项目的创立者,也是这套档案库软件的守护者。这款软件背后所有的编辑方向、策展决定和项目愿景都完全出自 Raven 与 Keylam。他们定义了每一项需求,测试了每一个功能,引导这个系统从最初的构想发展到今天的形态;每一个架构决策都由 Keylam 作出并批准。

✨ 软件开发

Claude (Anthropic) —— AI 助手 Claude 担任本档案库的主要开发伙伴。PHP 后端、多驱动数据库层、搜索与分面引擎、管理面板、前端设计系统以及全部辅助工具,都是在 Raven 与 Keylam 的需求和 Claude 的代码工作之间的协作过程中设计和编写的。这个档案库是一个实例:一个通过人与 AI 直接协作进行软件工程、为真实世界项目而建的独立档案库。

📅 开发时间线

开发始于 2026 年 5 月中旬,此后一直在每日协作中继续。软件当前版本为 1.0.0;本页反映其 2026 年 7 月的状态。

13. 随这款软件而来的规则

这款软件的每一个安装都携带同样的规则,而安装本档案库的人在写下第一个文件之前就已同意了它们。这些规则很短,写来是给人读的,不是给律师解析的:在这里阅读。

一句话概括:您眼前的这个档案库完全属于运营它的人 —— 它的名字、它的馆藏、它的会员、它的数据 —— 软件背后的项目不持有其中任何一把钥匙。在每一个安装中留下来的,是软件自己的名字、那些基础文本,以及对创立这个项目的两个人的署名。不是因为某份许可证如此规定,而是因为一个对自己出身撒谎的档案库,已经亲手打碎了它存在的意义。

14. 联系与反馈

这是一个活着的系统 —— 它随项目一同演进。如果您遇到技术问题、失效的链接,或有改进建议,请通过每页页脚中链接的联系页面找到我们,或在我们任何一个平台频道留言。我们会阅读每一条。