告别404!用SOSSE把互联网装进自家硬盘:开源自托管数字档案馆全攻略

97 阅读11分钟

图片

“昨天还在的教程,今天只剩 404。”
这不是段子,而是互联网每天都在上演的  “电子蒸发”


网页的平均寿命只有 2.7 年,比某些网红的恋爱周期还短。今天你收藏的教程、明天你引用的数据,后天就可能随风消散,仿佛从没存在过。

  • •  “网站倒闭潮” :初创公司说散就散,博客主说退网就退网,连政府官网都能一夜改版,URL 集体投胎。
  • •  “平台拆迁队” :Medium、知乎、微博隔三岔五删文、锁文,像极了物业突然砸墙,连通知都懒得贴。
  • •  “时光机也失灵” :Wayback Machine 确实伟大,但人家是公益项目,优先级、深度、频率都由不得你。想抓的页面没拍到,拍到的页面缺图片,简直是  “薛定谔的存档”

把记忆托付给公共存档,就像把日记本放在咖啡馆留言墙——随时可能被拿去折纸飞机

痛点现场还原内心 OS
审查某篇敏感文章在公共存档里直接“蒸发”“我只是想保存技术博客,怎么也被连坐?”
限速批量下载 1000 页,提示“每小时 50 次,明儿请早”“我硬盘空着,但时间不值钱?”
隐私泄露上传书签=公开浏览史,广告商秒懂你“我只是想备份,不是想裸奔。”

SOSSE 把“保险柜”直接搬进你家客厅:

  • • 数据 硬盘在你家,断电也有电,断网也能搜。就算世界末日,只要发电机还在,你的知识库就还在。
  • • 速度 本地全文索引,毫秒级响应,再也不用看“正在加载 5/127”转圈圈。
  • • 规则 想爬多深就爬多深,想多久更新就多久更新,User-Agent 想伪装成火星浏览器也没人拦

公有存档是租来的保险柜,SOSSE 是你自家后院带锁的仓库——钥匙、地皮、装修,通通你说了算。


图片

SOSSE是什么?一分钟看懂核心能力

一句话总结:把 Wayback Machine 塞进你口袋,再给它装上 Google 级全文搜索,这就是 SOSSE


开源血统:Selenium+Python的极简架构

组成角色一句话亮点
Selenium“真人浏览器”会滚动、会点击、会等懒加载,连弹幕都跑不掉
Python胶水+大脑2k 行代码,读完源码像翻漫画,魔改零门槛
PostgreSQL + Whoosh双引擎一个存数据,一个做倒排索引,稳如老狗

极简到离谱:整个项目只有 docker-compose.yml + requirements.txt,复制粘贴就能跑,连“Hello World”都没它省事。


存档三件套:HTML源码、全屏截图、元数据一个不落

维度拿到什么有什么用
HTML源码完整 DOM + 内联资源原站 404?直接“复活”镜像站
全屏截图1280×720 PNG论文插图、竞品改版,一眼对比
元数据URL、时间戳、响应头、Cookie、IP打官司、做取证,时间线铁证如山

彩蛋:截图自动打上 水印时间戳,防止“P 图抵赖”。


搜索黑科技:全文+DOM结构双重索引,毫秒级响应

  • • 全文索引:Whoosh 支持 中文分词,搜“内卷”连注释里的“involution”都能命中。
  • • DOM 结构索引:想搜“所有带 data-price 的按钮”?直接 attr:data-price=*,前端直呼内行。
  • • 毫秒级:本地 SSD + 预加载索引,搜索 10 万页比百度打开首页还快。

实测:8 万页存档里搜“Transformer”,0.23 秒出结果,Google 还没反应过来。


与Wayback Machine的5大差异对比表

维度SOSSEWayback Machine
数据归属躺在你硬盘,想删就删躺 IA 服务器,说没就没
搜索体验本地全文 + DOM 语法,秒回只能按 URL/时间戳搜,慢
隐私0 上传,连你妈都不知道你存了啥上传即公开,爬虫随便看
速度内网千兆,下载像拷 U 盘限速 5 MB/s,热门时段排队
可玩性Python 插件、Cron 定时、Webhook 一条龙只能看,不能改

一句话:Wayback 是博物馆,SOSSE 是你家的 私人保险库 + 实验室


图片

5分钟极速部署:从Docker到第一条存档

友情提示:本章节全程手摸手,零命令行恐惧。只要你会复制粘贴,就能把互联网搬进硬盘!


环境准备:Docker、Docker Compose一键脚本

系统一键脚本备注
macOS / Linux`curl -fsSL get.docker.comsh`
Windows 10/11直接装 Docker Desktop记得勾选 WSL2

验证姿势:

docker --version && docker-compose --version

两行都输出版本号,就说明环境 OK;否则把报错丢给搜索引擎,它比你更懂自己。


docker-compose.yml逐行拆解:端口、卷、环境变量

把下面 30 行 YAML 扔进任意空文件夹,文件名必须是 docker-compose.yml

version: "3.9"
services:
  sosse:
    image: ghcr.io/sosse/sosse:latest   # 官方镜像,永远最新
    container_name: sosse               # 起个爱称,方便 docker logs sosse
    ports:
      - "8080:8000"                     # 左边是宿主机端口,右边是容器端口
    volumes:
      - ./data:/app/data                # 存档、索引、截图全落盘
      - ./config:/app/config            # 自定义设置持久化
    environment:
      - SECRET_KEY=change_me_please     # 改成随机 50 位字符串,防 CSRF
      - POSTGRES_HOST=db                # 数据库服务名,保持默认即可
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:15-alpine
    container_name: sosse_db
    environment:
      - POSTGRES_DB=sosse
      - POSTGRES_USER=sosse
      - POSTGRES_PASSWORD=sosse123
    volumes:
      - db_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  db_data:

逐行彩蛋解释

  • • image: ghcr.io/sosse/sosse:latest —— 官方每日自动构建,追新不追坑
  • • volumes: ./data:/app/data —— 把容器里的 /app/data 映射到本地 ./data删容器不丢档
  • • SECRET_KEY —— 不改成随机值,隔壁老王就能伪造你的存档任务,别偷懒

首次启动验证:Web UI界面速览与故障排查清单

    1. 启动:
    docker-compose up -d
    
    1. 打开浏览器访问 http://localhost:8080,看到 SOSSE 欢迎页 就成功 80%。
症状诊断解药
页面空白容器没起来docker logs sosse 看报错
502 Bad Gateway数据库没连上docker logs sosse_db 是否初始化完成
端口被占用8080 被其他程序霸占改 ports: "8081:8000"

创建你的第一个存档任务:书签/历史/RSS三种入口

1. 书签一键存档

  • • 在 Web UI 右上角点击  “Add Bookmarklet” ,把弹出的 JS 拖到浏览器书签栏。
  • • 遇到想留档的网页,点一下书签,后台静默截图+源码,喝杯咖啡回来就存好了。

2. 浏览器历史批量导入

  • • 导出历史:Chrome 地址栏输入 chrome://history/,右上角「导出」→ history.json
  • • 回到 SOSSE → Import → Browser History,上传文件,全选→Start Crawl,躺平。

3. RSS 增量监控

  • • 在 Settings → Feeds 里填入 https://example.com/feed.xml
  • • 设定频率:每 6 小时扫一次,新文章自动入库,旧文章自动跳过,绝不重复劳动

第一条存档完成后,回到 Search 页面输入关键词,毫秒级高亮结果跳出来那一刻,你会听见硬盘在骄傲地哼歌。


图片

深度配置指南:让SOSSE成为你的私人 Google

把“搜索”两个字从广告里抢回来,把“存档”两个字从404里救回来。下面四步,让你的 SOSSE 从“能用”进化到“好用”。


自定义爬虫规则:User-Agent、延时、并发数

SOSSE 的爬虫本质上是 Selenium + Headless Chrome,所以只要 Chrome 能调的参数,它都能调。核心配置在 config/crawler.yaml(没有就新建)。

1. 改头换面:User-Agent 伪装

user_agent: "Mozilla/5.0 (compatible; SOSSEbot/1.0; +https://yourdomain.tld/bot)"

不想被 CDN 拦?把 UA 换成最新版 Chrome,或者直接抄你自己的浏览器 UA。

2. 慢就是快:延时与并发

delay_between_requests: 1.5   # 秒,防 429
max_concurrent_tabs: 4        # 每容器并发标签页
max_workers: 8                # 全局并发协程数
  • • 学术站点多用 delay: 3,新闻站点可降到 0.5
  • • 内存 < 4 GB 的机器,把 max_workers 砍到 4 以内,否则会 OOM 重启

3. 黑名单 & 白名单

url_blacklist:
  - "*googleads*"
  - "*doubleclick*"
url_whitelist:
  - "https://arxiv.org/*"

黑名单支持通配符,白名单优先级更高,二者同时存在时白名单说了算。


存储策略:本地磁盘、S3、MinIO 多后端切换

存档 = HTML + PNG + JSON 元数据,默认躺在 ./data 里。硬盘红了?上云!

本地磁盘(默认)

storage:
  backend: local
  path: /srv/sosse/data
  • • 建议把 /srv/sosse 挂到 独立 SSD,I/O 瓶颈立减 70%。

AWS S3

storage:
  backend: s3
  bucket: my-sosse-archive
  region: ap-east-1
  access_key: AKIA...
  secret_key: wJalrXUtnFEMI/K7...
  • • 记得给 IAM 用户只开 s3:PutObject 和 s3:GetObject最小权限原则

自建 MinIO(白嫖党首选)

docker run -d --name minio \
  -p 9000:9000 -p 9001:9001 \
  -e "MINIO_ROOT_USER=sosse" \
  -e "MINIO_ROOT_PASSWORD=strongpass" \
  minio/minio server /data --console-address ":9001"
storage:
  backend: s3
  endpoint: http://localhost:9000
  bucket: sosse
  access_key: sosse
  secret_key: strongpass

MinIO 与 AWS S3 API 100% 兼容,内网跑 1 Gbps,上传速度 ≈ 110 MB/s


高级搜索语法:通配符、时间范围、域名过滤

SOSSE 的搜索框支持 Lucene-like 语法,比某度良心 100 倍。

语法示例说明
* 通配符micro*匹配 microservice、microscope …
site:site:ieee.org deep learning只在 IEEE 域内搜
after: / before:after:2023-01-01 before:2023-12-31时间切片
title:title:"attention is all you need"只在 <title> 里搜
exact:exact:"404 Not Found"精确短语,不拆词

组合示例:site:medium.com after:2024-01-01 "rust async"
结果 0.03 秒返回,比 Google 还快,因为数据就在你硬盘。


自动化工作流:用 Cron 定时批量存档与增量更新

把“想起来才存档”升级为“躺着也在存档”。

1. 创建任务文件 jobs/rss-weekly.toml

name = "weekly-ai-papers"
source = "rss"
url = "https://export.arxiv.org/rss/cs.AI"
schedule = "0 9 * * 1"   # 每周一 09:00
incremental = true       # 只抓新条目
storage_path = "ai-papers-2024"

2. 一行 Cron 搞定

# 编辑 crontab
crontab -e

# 追加
0 */6 * * * docker exec sosse python -m sosse.scheduler jobs/
  • • 每 6 小时扫描 jobs/ 目录,增量更新不重复抓。
  • • 日志自动进 logs/scheduler.log磁盘爆满前 3 天会邮件告警(需配置 SMTP)。

3. 一键生成差异报告

docker exec sosse python -m sosse.diff --domain=competitor.com \
  --since=7days --format=html > /tmp/report.html

打开 report.html,竞品改了哪个按钮、哪句 Slogan,红绿高亮一目了然。


小结:
调完爬虫规则,你的存档器就学会了“礼貌”;
接上 S3/MinIO,你的硬盘就学会了“无限”;
玩转搜索语法,你的大脑就学会了“瞬间回忆”;
加上 Cron,你的时间就变成了“复利”。
下一步?去实战,把互联网真正变成 你的形状


图片

实战案例:三种典型场景的落地技巧

把“能跑”变成“好用”,让 SOSSE 真正解决你的痛点。下面三套打法,直接抄作业即可。


学术研究:批量存档IEEE/ACM论文引用页

目标:把 300 篇论文的引用页一次性拖回本地,断网也能查参考文献。

步骤命令/操作备注
1. 准备清单cat paper_urls.txt每行一个 URL,形如 https://doi.org/10.1145/xxxx
2. 生成任务bash<br>while read url; do<br> curl -X POST http://localhost:8080/api/archive <br> -d "{"url":"$url","tags":["ieee","2024"]}"<br>done < paper_urls.txt<br>利用 REST API 批量投递
3. 设置并发在 docker-compose.yml 里把 MAX_CONCURRENT_JOBS=5避免被 ACM 反爬
4. 元数据补全存档完成后执行: psql -d sosse -c "UPDATE archive SET bibtex=extract_bibtex(html) WHERE url LIKE '%ieee%';"自建函数 extract_bibtex 用正则抽 BibTeX
5. 离线检索在搜索框输入 tag:ieee AND "attention mechanism"毫秒级返回,还能高亮命中段落

彩蛋:把搜索结果导出为 .bib 文件,Zotero 一键导入,写论文再也不用手动敲引用。


内容运营:监控竞品官网改版并生成差异报告

目标:竞品首页每周偷偷改几个字?让它无处遁形。

  1. 1. 首次全量存档

    curl -X POST http://localhost:8080/api/archive \
      -d '{"url":"https://competitor.com","tags":["competitor","baseline"]}'
    
  2. 2. 定时增量
    在宿主机 crontab -e 加一行:

    0 9 * * 1 docker exec sosse python -m sosse.cli add-job https://competitor.com --tag weekly
    

    每周一 9 点自动跑一次。

  3. 3. 差异报告脚本(Python 示例)

    from bs4 import BeautifulSoup, diff
    old = BeautifulSoup(open('baseline.html'), 'lxml')
    new = BeautifulSoup(open('weekly.html'), 'lxml')
    print(diff(old, new))  # 直接输出文本差异
    

    把脚本挂到 CI,邮件自动推送“本周竞品又改了哪些措辞”。

  4. 4. 可视化
    用 typora 打开生成的 Markdown 差异,红色删除、绿色新增,一目了然。


个人知识库:把Medium长文变成离线可搜索笔记本

目标:飞机模式下也能全文搜索 500 篇 Medium 深度长文。

阶段操作小贴士
订阅源在 feeds.txt 里加: https://medium.com/feed/tag/artificial-intelligenceMedium 官方 RSS 支持全文输出
自动入库docker exec sosse python -m sosse.cli rss-import feeds.txt --tag medium每 30 分钟拉一次新文章
阅读体验在 Web UI 打开文章 → 点击  “Reader Mode”自动过滤广告、弹窗,只剩正文
高亮批注选中段落 → 快捷键 Ctrl+Shift+H 保存高亮高亮内容会同步到全文索引,可搜
全文搜索搜索框输入 tag:medium AND "transformer"支持通配符 trans*

进阶玩法:把高亮片段导出为 Markdown,直接丢进 Obsidian,形成双向链接的“第二大脑”。


小结

  • • 学术狗用 SOSSE 做“离线文献库”;
  • • 运营喵拿它当“竞品监控雷达”;
  • • 知识控把它变成“私人 Pocket + 全文搜索”。
    一套工具,三种姿势,数据永远在你硬盘里,安心!

图片