ArchiveBox 快速上手指南:自托管网页存档的安装、初始化与官方文档导航
2026/9/20 21:35:06 网站建设 项目流程
  • 后端
  • 数据工程

【免费下载链接】ArchiveBox

🗃 Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...

项目地址:https://gitcode.com/gh_mirrors/ar/ArchiveBox
点击查看免费下载

ArchiveBox 是一个开源的自托管互联网存档工具(self-hosted internet archive),它可以把任意 URL、浏览器历史、书签以及 Pocket、Pinboard 等服务的导出数据保存为 HTML、JS、PDF、媒体文件等静态快照。本文以官方文档首页 docs/index.rst 为骨架,完整展开其快速上手流程中的每一条命令,并结合仓库源码剖析initinstalladdstatus的底层实现,最后给出官方文档的完整导航地图,帮助读者从零开始搭建并理解自己的私有网页档案馆。


项目定位:面向个人与团队的自托管网页存档

正如文档首页所声明的,ArchiveBox 的定位是 "The open-source self-hosted internet archive"(开源的自托管互联网档案馆)。它与在线存档服务的关键区别在于:

  • 数据自持:所有存档内容保存在你自己的目录与数据库中,不依赖任何第三方托管服务;
  • 格式开放:每个 URL 的存档结果以标准文件形式(HTML、PDF、截图、warc 等)落在文件系统中,可通过 docs/Publishing-Your-Archive.md 介绍的方式对外发布;
  • 输入广泛:既支持直接传入 URL,也支持从文本文件、RSS 订阅源、浏览器书签导出、Pocket/Pinboard 等服务的导出数据导入。

仓库根目录 README.md 中对项目的功能描述也与此一致:它接收 URL、浏览器历史、书签、Pocket/Pinboard 等输入,保存 HTML、JS、PDF、媒体等各类存档产物。这意味着 index.rst 首页所呈现的,是整个项目"自托管、可保存、可检索、可发布"能力的入口。


五分钟快速上手:从零到第一个存档

index.rst 首页给出了一条完整的快速上手命令序列,它覆盖了"安装 → 初始化 → 装依赖 → 添加链接 → 查看状态"的完整闭环:

mkdir my-archive; cd my-archive/ uv tool install --python 3.13 --prerelease explicit --upgrade 'archivebox>=0.9.0rc0,<0.10' archivebox init archivebox install archivebox add https://example.com archivebox status

下面逐条展开说明,并结合源码解释每一条命令背后实际发生了什么。

1. 用 uv 安装 ArchiveBox(0.9.x 预发布版本)

uv tool install --python 3.13 --prerelease explicit --upgrade 'archivebox>=0.9.0rc0,<0.10'

这条命令使用uv将 ArchiveBox 安装为全局工具(tool):

  • --python 3.13:要求使用 Python 3.13 作为运行环境;
  • --prerelease explicit:明确允许安装预发布版本(因为 0.9 尚未正式发布,需要 rc 版本);
  • --upgrade:如果已安装旧版本则升级到满足版本约束的最新版;
  • 'archivebox>=0.9.0rc0,<0.10':版本区间约束在 0.9.0 的候选发布版与 0.10 之间,确保使用的是 0.9 系列。

安装完成后,archivebox命令即进入 PATH,可在任意目录执行。官方文档 docs/Install.md 与 docs/Docker.md 分别介绍了原生安装与 Docker / Docker Compose 部署的更多细节(macOS 与 Ubuntu 的amd64/arm64为官方支持平台,见 docs/Quickstart.md)。

注意:文档首页给出的安装命令面向 0.9.x 开发周期;对于正式发布版本,请以 docs/Install.md 中对应你平台的方式为准。

2.archivebox init:初始化集合

init是创建新 ArchiveBox 集合(collection)的入口,其命令行入口定义在 archivebox/cli/archivebox_init.py:

archivebox init # 可选参数: archivebox init --force # -f:忽略当前目录中的无关文件,强制初始化 archivebox init --quick # -q:快速模式,跳过对 snapshot 目录的重新检查 archivebox init --install # -s/--setup:初始化后自动调用 install 安装依赖

从 archivebox/cli/archivebox_init.py 的init()实现可以还原它的完整工作流:

  1. 安全校验:调用check_not_inside_source_dir()拒绝在源码目录内初始化,避免污染代码仓库;
  2. 环境判断:检查当前目录是否为空、是否已存在index.sqlite3database_exists()),据此决定是"初始化新集合"还是"校验并升级已有集合";若目录中已有非 ArchiveBox 文件但无数据库,则会报错退出,只有加--force才继续;
  3. 创建目录骨架:依次创建archives/sources/users/logs/目录,并按配置项OUTPUT_PERMISSIONS(8 进制权限字符串)设置权限位;
  4. 生成集合标识与配置:创建.archivebox_id文件写入该集合的唯一 ID;随后调用write_config_file({"SECRET_KEY": config.SECRET_KEY})生成ArchiveBox.conf配置文件(详见下文);
  5. 准备数据库ensure_database_ready()确保 SQLite/PostgreSQL 可用,setup_django()完成 Django 初始化,随后apply_migrations()执行初始迁移建表;
  6. 创建管理员账号:若配置中已设置ADMIN_USERNAMEADMIN_PASSWORD,则自动创建超级用户,免去后续手工操作;
  7. 收尾提示:如果集合中链接少于 25 个,会打印后续操作提示——运行archivebox server后访问 Admin UI 完成 Web 端设置,或用archivebox add < links.txt添加链接。

值得注意的是,初始化完成后init会明确提示:孤儿快照(orphaned snapshot directories)的导入与文件系统状态对账需要运行archivebox update

3.archivebox install:安装存档所需的外部依赖

install负责探测并安装 ArchiveBox 进行网页存档所需的外部二进制依赖(Chromium、yt-dlp、wget 等),其实现位于 archivebox/cli/archivebox_install.py:

archivebox install # 探测并安装全部依赖 archivebox install wget curl # 只安装 wget 与 curl archivebox install --binproviders=pip yt-dlp # 只用 pip 提供者安装 yt-dlp archivebox install --binproviders=brew,apt # 只用 brew/apt 安装全部依赖 archivebox install --dry-run # 只展示将要执行的动作,不真正安装

命令参数说明:

参数说明
binaries(位置参数)要安装的插件名或二进制别名,可传多个;不传则安装全部
--binproviders/-p允许使用的安装提供者,逗号分隔:pipnpmbrewaptenvcustom,默认*(全部)
--dry-run/-d预演模式,只打印将要执行的动作

从源码看,其内部逻辑分两条路径执行:

  • 插件路径:通过_resolve_install_targets()将用户传入的名字解析为插件名与二进制别名,再经由 abx-dl 总线调用run_install()完成插件及其依赖的安装;
  • 裸二进制路径_install_raw_binary_names()会为当前机器创建/更新Binary记录(archivebox.machine.models.Binary),将其置为QUEUED状态并调用run_due_binary()立即执行安装。

同时,install要求必须先有可用的数据库(用于存储 Binary 记录),因此若尚未初始化,它会自动先执行init()。命令结束时还会调用archivebox version展示完整版本信息与已安装的二进制状态。archivebox init --install则把这两步合并为一条命令执行。

4.archivebox add:把 URL 加入存档队列

add是 ArchiveBox 最核心的日常命令,负责把 URL 列表加入新的 Crawl(抓取任务)并执行存档,入口在 archivebox/cli/archivebox_add.py:

archivebox add https://example.com # 直接传 URL archivebox add < your_urls.txt # 从 stdin 读入 URL 列表 archivebox add --depth=1 https://example.com # 递归抓取一层链接 curl -fsSL 'https://getpocket.com/users/USER/feed/all' | archivebox add # 从 RSS 流导入

add支持从命令行参数与 stdin 两种方式收集输入:_collect_input_urls()通过read_args_or_stdin()统一解析,支持纯文本 URL、带#注释的行以及urls字段等格式;当没有位置参数且 stdin 非 TTY 时自动读取 stdin。每个 URL 都会经过validate_url()校验。

常用参数(均在 archivebox/cli/archivebox_add.py 的 CLI 定义中声明):

参数默认值说明
--depth/-d0递归存档链接的跳数,仅允许 0–4
--max-urls0本次抓取最多快照的 URL 数(0 为不限制)
--crawl-max-size0整个抓取任务的总大小上限,支持45mb1gb等单位(0 不限制)
--crawl-timeout0抓取任务总运行时间上限(秒,0 不限制)
--snapshot-max-size0单个快照的大小上限(0 不限制)
--crawl-max-concurrent-snapshots继承配置单个抓取任务内并发快照数,最小为 1
--tag/-t""逗号分隔的标签,附加到每个快照上
--url-allowlist/--domain-allowlist""本次抓取的 URL/域名白名单
--url-denylist/--domain-denylist""本次抓取的 URL/域名黑名单
--parserauto输入解析器:autotxthtmlrssjsonjsonlnetscape
--plugins/-p""逗号分隔的提取插件列表,如title,favicon,screenshot,singlefile
--extract""按输出类型选择插件,如pdfimage
--personaDefault存档时使用的认证档案(persona)
--only-new/--no-only-new继承ONLY_NEW配置是否跳过已存在的 URL;--overwrite/--update是其别名
--index-onlyFalse只把 URL 写入索引,不立即存档
--bgFalse后台模式:入队后立即返回,由后台 runner 处理

从源码可以看到,add的核心是创建一条Crawl记录并把相关运行参数冻结到crawl.config中(如CRAWL_MAX_URLSCRAWL_MAX_SIZECRAWL_TIMEOUTSNAPSHOT_MAX_SIZEURL_ALLOWLISTURL_DENYLISTPARSERONLY_NEW等),然后由 runner 消费该 Crawl:先为所有 URL 创建 Snapshot,再运行提取插件,解析器插件发现的新 URL 会继续生成子 Snapshot,直到达到max_depth

执行模式有三种:

  • 前台模式(默认)add进程直接接管前台 runner,循环执行run_runner_worker(["--crawl-id", str(crawl.id)], ...)直到 Crawl 封存(SEALED),期间会处理Ctrl+C中断并提示用archivebox run --crawl-id=<id>恢复;
  • 后台模式(--bg:仅入队并通过ensure_background_runner()确保有后台 runner 在跑(如archivebox serverarchivebox run --daemon);
  • 仅索引模式(--index-only:只写入索引、不启动 runner。

前台模式结束后会打印本次抓取的摘要:crawl 输出目录(相对DATA_DIR)、Admin UI 管理链接、快照总数、总大小与总耗时。

5.archivebox status:查看集合健康与统计

status打印整个集合的信息与统计,实现见 archivebox/cli/archivebox_status.py:

archivebox status

它依次输出以下几类信息:

  1. 主索引概况DATA_DIRindex.*文件的总大小与文件数;
  2. 链接统计:SQL 主索引中的链接总数、archives/*/index.json中的传统链接详情数;已索引 / 已存档(status 为sealed)/ 未存档的快照数;
  3. 磁盘占用:递归扫描archives/目录(含users/子目录)得到的总体积、文件数与目录数;当链接数超过常量MAX_STATUS_FS_DIR_SCAN = 5000时,自动改用数据库统计(对Snapshot.output_size求和、统计非空output_files的 ArchiveResult 数量),避免整盘递归扫描的性能问题;
  4. 文件系统一致性:磁盘上存在的快照目录数(present)、与数据库记录匹配的目录数(valid)、以及没有对应数据库记录的孤儿目录数(orphaned)——出现孤儿目录时,status会提示运行archivebox update自动导入;
  5. 用户与最近动态:Admin UI 用户列表、最近登录时间、最近下载时间;
  6. 最近快照列表:按downloaded_at倒序展示最近 10 个快照的下载时间、输出数量、存档状态、大小、标题与 URL。

status是日常巡检集合健康状态最直接的命令:索引是否损坏、磁盘占用是否异常、是否存在孤儿目录,一目了然。


集合的配置与磁盘布局:init 之后发生了什么

init完成后,当前目录会形成 ArchiveBox 的集合骨架,其目录结构与配置约定如下:

my-archive/ ├── ArchiveBox.conf # 集合配置文件(INI 格式,与数据库中的 Machine.config 双向同步) ├── index.sqlite3 # SQL 主索引(PostgreSQL 时替换为外部数据库) ├── .archivebox_id # 集合唯一标识 ├── archives/ # 存档产物目录(每个快照一个子目录) ├── sources/ # 导入的原始 URL 源文件 ├── users/ # 按用户组织的快照目录(当前布局位于 archives/users/ 之下) └── logs/ # 日志目录

配置文件的读写逻辑集中在 archivebox/config/collection.py,几个值得注意的实现细节:

  • INI 配置与数据库双向镜像ArchiveBox.conf与数据库中Machine.config保持 1:1 同步——write_config_file()写文件后会镜像到数据库,Machine.save()时又会调用mirror_machine_config_to_file()写回文件,并通过模块级_MIRROR_IN_PROGRESS标志防止循环回写;
  • 启动时对账sync_machine_and_file()在进程启动时合并文件与数据库两侧的配置,键冲突时以修改时间更新的那一侧为准(文件 mtime vs.Machine.modified_at);
  • 按语义分组_resolve_section_for_key()会把不同的配置键归类到对应 INI section(核心配置、服务器配置、PLUGINS等),未知键统一落入SERVER_CONFIG而不丢失;
  • 原子写入_write_file_if_changed()仅在内容变化时才原子重写文件,避免热循环中的无谓磁盘写;
  • 写前备份write_config_file()写新配置前会把旧内容备份为ArchiveBox.conf.bak,若新配置解析失败则自动回滚。

日常修改配置有两种方式:直接编辑ArchiveBox.conf,或运行archivebox config --set KEY=VALUE(配置文件头注释中明确指出了该命令)。完整配置项参考 docs/Configuration.md,存储与备份建议见 docs/Setting-Up-Storage.md。


官方文档导航:从首页出发的完整阅读路线

index.rst 通过 toctree 引入了 docs/Contents.rst,后者是整套官方文档的目录树。以仓库根目录为基准,这份文档地图整理如下:

Overview(概览)

文档内容
docs/Home.md项目主页文档
README.md项目根 README,含功能特性与快速开始

Getting Started(入门)

文档内容
docs/Quickstart.md约 5 分钟的上手流程:安装、导出 URL 列表、添加链接、启动 Web UI
docs/Install.md各平台原生安装指南
docs/Docker.mdDocker 与 Docker Compose 部署
docs/Configuration.md全部配置项参考
docs/Security-Overview.md安全模型与加固建议
docs/Usage.mdCLI 与 Web UI 的完整用法

Guides(进阶指南)

文档内容
docs/Setting-Up-Storage.md存档目录、外部存储与备份
docs/Setting-up-Authentication.md身份认证与用户管理
docs/Setting-up-Search.md全文搜索(Sonic 等)配置
docs/Publishing-Your-Archive.md对外发布你的档案馆
docs/Scheduled-Archiving.md定时自动存档
docs/Chromium-Install.mdChromium 浏览器依赖安装
docs/Upgrading.md版本升级说明
docs/Upgrading-or-Merging-Archives.md升级或合并既有档案馆
docs/Merging-Collections.md合并多个集合
docs/Troubleshooting.md常见问题排查

Architecture(架构)

文档内容
docs/ArchiveBox-Architecture-Diagrams.md系统架构图与组件关系

API Reference(API 参考)

文档内容
docs/apidocs/index.rst由 Sphinx 生成的 Python API 文档,覆盖archivebox.apiarchivebox.cliarchivebox.configarchivebox.corearchivebox.crawlsarchivebox.machinearchivebox.services等全部子模块
文件系统布局详见 Usage 文档中的 Disk Layout 章节
SQL APIUsage 文档中的 SQL Shell Usage 章节
REST API官方 Demo 站点/api端点

Meta(元信息)

文档内容
docs/Roadmap.md项目路线图
docs/Changelog.md变更日志
docs/Donations.md捐赠信息
docs/Web-Archiving-Community.md网页存档社区资源

对于希望从源码层面继续深入本文所讲命令的读者,建议按以下路径阅读:

  • CLI 入口与参数:archivebox/cli/下的archivebox_init.pyarchivebox_install.pyarchivebox_add.pyarchivebox_status.pyarchivebox_run.py
  • 配置系统:archivebox/config/collection.py(文件-数据库双向镜像)、archivebox/config/common.py(配置模型与读取)、archivebox/config/constants.pyCONSTANTS路径常量);
  • 抓取任务模型:archivebox/crawls/models.pyCrawl)、archivebox/core/models.pySnapshotArchiveResult);
  • 服务层:archivebox/services/runner.py(runner 与安装流程)、archivebox/services/crawl_service.py
  • 对应测试:archivebox/tests/test_cli_init.pyarchivebox/tests/test_cli_add.pyarchivebox/tests/test_cli_install.pyarchivebox/tests/test_cli_status.py等。

下一步:从"能跑"到"用好"

走完init → install → add → status这四步,你已经拥有了一个可用的私有网页档案馆。接下来的进阶路径建议:

  1. 启动 Web UI:运行archivebox server,按提示访问 Admin UI 完成首个管理员账号与BASE_URL的 Web 设置向导(见 docs/Quickstart.md);
  2. 批量导入历史:把浏览器书签/历史、Pocket、Pinboard 等导出为 URL 列表后通过 stdin 导入,参见 docs/Quickstart.md 第 2 步;
  3. 配置存档行为:编辑ArchiveBox.conf或用archivebox config --set调整SAVE_TITLEONLY_NEWOUTPUT_PERMISSIONS等选项,完整清单见 docs/Configuration.md;
  4. 定时自动存档:按 docs/Scheduled-Archiving.md 配置每日增量存档;
  5. 数据一致性巡检:定期运行archivebox status检查孤儿目录,用archivebox update对账导入,再配合 docs/Setting-Up-Storage.md 做好备份。

至此,从官方文档首页出发,你已完整掌握 ArchiveBox 的安装、初始化、依赖管理、URL 添加与状态巡检的整条链路,并理解了这些命令背后基于Crawl/Snapshot/Binary模型与配置文件双向镜像机制的实现原理。

  • 后端
  • 数据工程

【免费下载链接】ArchiveBox

🗃 Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...

项目地址:https://gitcode.com/gh_mirrors/ar/ArchiveBox
点击查看免费下载

相关推荐

上一篇:DataHub DynamoDB 元数据摄取进阶配置指南:schema_sampling_size 与 include_table_item 实战解析
下一篇:Dgraph存储压缩比测试:不同数据类型的压缩效果

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询