自托管 Reddit:238 亿帖子离线镜像,永久可用
开源项目实现 Reddit 大规模数据自托管和离线使用。数据价值显著,但技术实现亮点不明显,主要是工程规模展示。
开源项目实现 Reddit 大规模数据自托管和离线使用。数据价值显著,但技术实现亮点不明显,主要是工程规模展示。
⭐ 如果觉得这个项目有用,请给仓库点个 Star!这能帮助其他人发现这个工具,也激励我们继续开发。
将压缩数据转储转换为可浏览的 HTML 存档,支持灵活的部署选项。Redd-Archiver 支持通过排序索引页离线浏览、使用 Docker 部署的全文搜索,或直接从 PostgreSQL 动态提供服务。存档通过 Arctic Shift 月度数据转储保持最新状态。功能包括移动优先设计、跨平台支持、操作员可选主题和 PostgreSQL 全文索引。
追踪内容:2.38 亿以上帖子,涵盖 68,883 个社区(完整 Reddit 数据集加月度 Arctic Shift 转储增量更新;Voat/Ruqqus 完整存档)
版本 1.1「活存档」新增三种服务模式、月度增量更新、11 个主题调色板、社区元数据/Wiki 增强功能,以及 1.0 多平台存档、REST API 和 MCP 服务器基础上的大幅性能优化。见 CHANGELOG.md。
一份存档,三种服务方式——数据库是规范存储,随时切换模式:
# Static: export once, host anywhere
reddarc.py /data --subreddit privacy ... --output /var/www/html/
# Hybrid (current default): static pages + search server
docker compose up -d
# Dynamic: no export step, Flask renders pages from PostgreSQL
reddarc.py --import-only /data --subreddit privacy ...
REDDARCHIVER_SERVE_MODE=dynamic python search_server.py
🔄 保持存档最新(增量更新)
将月度 Arctic Shift 转储应用到现有存档——仅导入被追踪的子版块、通过校验和跳过重复运行、刷新评分而不改变已保存内容:
# One month
reddarc.py --update RS_2026-01.zst --comments-file RC_2026-01.zst
# Or point at a downloaded monthly torrent (comments/ + submissions/ layout
# is auto-discovered) and apply every unprocessed month in order:
reddarc.py --update-all /data/monthly/reddit/
reddarc.py --update-status # audit what has been applied
在互联网历史消失前保存它——2 分钟部署,无需域名。
试试在线演示:浏览示例存档 →
→ QUICKSTART.md - 分步部署指南:
2 分钟:Tor 隐藏服务(无域名、无端口转发、支持 CGNAT 后)
5 分钟:本地测试(localhost HTTP)
15 分钟:生产 HTTPS(自动化 Let's Encrypt)
为什么现在?社区被禁、平台关闭、讨论消失。立即开始保存。
→ 首次来此?QUICKSTART.md - 2-15 分钟部署
→ 快速解答?FAQ - 30 秒内回答常见问题
→ 需要帮助?Troubleshooting - 修复常见问题
→ 使用 API?API Reference - 30+ REST 端点
→ 如何运作?Architecture - 技术深入指南
Tor 隐藏服务 - .onion 设置(2 分钟,无需域名)
HTTPS 生产 - Let's Encrypt SSL(15 分钟)
静态托管 - GitHub/Codeberg Pages(仅浏览)
Docker 参考 - 完整 Docker 指南
增量更新 - 通过月度转储保持存档最新
性能 - 内存、存储和优化
扩展 - 多实例部署
搜索设置 - 全文搜索配置
MCP 服务器 - AI 集成(Claude Desktop/Code)
扫描工具 - 数据发现工具
注册表设置 - 实例排行榜
安装指南 - 特定平台设置
贡献 · 安全政策 · 许可证
🌐 跨平台支持
在单个统一存档中存档来自多个链接聚合平台的内容:
自动检测:从文件扩展名自动检测平台
统一搜索:PostgreSQL 全文搜索跨越所有平台
混合存档:在单个存档中组合 Reddit、Voat 和 Ruqqus
🤖 MCP 服务器(AI 集成)
从 OpenAPI 为 AI 助手自动生成 29 个 MCP 工具:
完整存档访问:通过 Claude Desktop 或 Claude Code 查询帖子、评论、用户、搜索
令牌溢出防护:内置 LLM 指导,支持字段选择和截断
5 个 MCP 资源:即时访问统计、热门帖子、子版块、搜索帮助
Claude Code 就绪:复制粘贴配置即可使用
{
"mcpServers": {
"reddarchiver": {
"command": "uv",
"args": ["--directory", "/path/to/mcp_server", "run", "python", "server.py"],
"env": { "REDDARCHIVER_API_URL": "http://localhost:5000" }
}
}
}
完整设置指南见 MCP Server Documentation。
📖 为读者提供的功能(离线、移动、Tor)
📱 移动优先设计:针对所有设备优化的响应式布局,支持触摸导航
⚡ 无需 JavaScript:完整功能不依赖 JS,纯 CSS 交互——Tor 优化,无外部依赖
📇 离线浏览助手:按字母索引(Ctrl+F 友好)、标签索引和存档地图页——零服务器的类搜索导航
🔍 全文搜索(服务器部署):PostgreSQL FTS,支持 Google 风格操作符——关键词、子版块、作者、日期、评分
📰 社区上下文:子版块描述、规则和 Wiki;Voat 子部分元数据、用户资料和标签
♿ 无障碍访问:WCAG 合规——页面类型 Lighthouse 无障碍评分 100
🚄 性能:~13KB gzip CSS,3–32KB gzip 页面,Lighthouse 94–100,为低带宽网络设计
🧭 三种服务模式:静态(在任何地方托管)、混合(静态+搜索服务器)、动态(所有内容从 PostgreSQL 实时提供)——随时切换,同一数据库
🔄 增量更新:月度转储幂等应用;存档保持最新,无需重建
🎨 主题:11 个调色板(default、sepia、nord、solarized、dracula、gruvbox、cyberpunk、midnight OLED、old-reddit、phosphor、high-contrast),通过 --theme / REDDARCHIVER_THEME 指定,另支持 --accent-color 和 --custom-css;纯 CSS 暗/亮模式跟随系统偏好设置,支持手动切换
🗄️ PostgreSQL 后端:流导入,常数内存;COPY 协议;从检查点恢复
🚀 部署选项:localhost/LAN(2 条命令)、HTTPS 带自动 Let's Encrypt(15 分钟)、Tor 隐藏服务(2 分钟,支持 CGNAT 后)、HTTPS+Tor 双模式,或 GitHub/Codeberg Pages(静态)
🔗 SEO 就绪:元标签、XML 站点地图、结构化数据;--precompress + gzip_static,用于高流量静态服务
🏆 实例注册表:具有完整性加权评分的排行榜,支持分布式存档
🔬 为研究者和 AI
🌐 REST API v1:30+ 端点——帖子、评论、用户、统计、搜索、聚合、批量和导出(CSV/NDJSON)——支持字段选择和截断控制
🤖 MCP 服务器:29 个工具用于 Claude Desktop/Claude Code(见上文)
📊 丰富统计:分析仪表板、每个社区的指标、用户活动摘要
主列表页面展示存档概览,显示 Reddit、Voat 和 Ruqqus 中 9,592 条帖子的统计信息。支持自定义品牌(网站名称、项目 URL)、响应式卡片、活动指标和内容统计。(离线工作)
帖子列表,支持排序选项(评分、评论、日期)、分页和标签着色。包含导航和主题切换。(离线工作——按评分/评论/日期排序)
帖子页面含评论
显示嵌套评论线程的单个帖子,支持可折叠 UI、用户标签和时间戳。评论包含锚链接,用于从用户页面直接导航。(离线工作)
移动响应式设计
为移动设备完全优化,支持触摸友好的导航和响应式布局。
带有 Google 风格操作符的 PostgreSQL 全文搜索。支持按子版块、作者、日期范围和评分筛选。(需要 Docker 部署)
搜索结果,使用 PostgreSQL ts_headline() 突出显示摘录。支持 GIN 索引的亚秒级响应时间。(基于服务器,Tor 兼容)
同一帖子页面上的所有 11 个调色板(每个都有暗/亮变体;--accent-color 可重新着色):
reddarc.py ... --theme nord # static export
REDDARCHIVER_THEME=nord search_server.py # dynamic mode
示例存档:由来自 Reddit、Voat 和 Ruqqus 的编程和技术社区组成的多平台存档 · 查看所有屏幕截图 →
前置要求:Python 3.10+、PostgreSQL 14+、4GB+ RAM
快速安装(Docker):
git clone https://github.com/19-84/redd-archiver.git
cd redd-archiver
# Create required directories
mkdir -p data output/.postgres-data logs tor-public
# Configure environment (IMPORTANT: change passwords!)
cp .env.example .env
nano .env # Edit POSTGRES_PASSWORD and DATABASE_URL
# Start services
docker compose up -d
# Generate archive (after downloading .zst files to data/)
docker compose exec reddarchiver-builder python reddarc.py /data \
--subreddit privacy \
--comments-file /data/privacy_comments.zst \
--submissions-file /data/privacy_submissions.zst \
--output /output/
详细安装步骤(Docker、Ubuntu/Debian、macOS、Windows WSL2):
安装指南 - 特定平台设置和故障排查
快速工作流:下载数据 → 运行存档生成器 → 部署
# Docker(规范方式):在 builder 容器内生成归档
docker compose up -d
docker compose exec reddarchiver-builder python reddarc.py /data \
--subreddit privacy \
--comments-file /data/privacy_comments.zst \
--submissions-file /data/privacy_submissions.zst \
--output /output/
# 访问 http://localhost
# 本地开发(uv):使用相同的参数,但路径为宿主机路径
export DATABASE_URL="postgresql://user:pass@localhost:5432/reddarchiver"
uv run python reddarc.py data/ --subreddit privacy \
--comments-file data/privacy_comments.zst \
--submissions-file data/privacy_submissions.zst --output output/
多平台支持
Reddit:来自 Pushshift 的 .zst 文件(3.28TB,23.8 亿条帖子)
Voat:来自 Archive.org 的 SQL 转储文件(15GB,380 万条帖子)——使用预拆分文件可获得 1000 倍的速度提升
Ruqqus:来自 Archive.org 的 .7z 文件(752MB,50 万条帖子)
QUICKSTART.md——分步部署指南(2~15 分钟)
扫描工具——识别高优先级社区
安装指南——详细的设置流程
Docker 部署——通过一个 compose 文件配置 PostgreSQL、nginx、HTTPS 和 Tor
CLI 选项及高级工作流:完整参考请参阅 QUICKSTART.md。
环境变量:
# 必需
DATABASE_URL=postgresql://user:pass@host:5432/reddarchiver
# 服务(搜索服务器)
REDDARCHIVER_SERVE_MODE=dynamic # hybrid(默认)| dynamic
REDDARCHIVER_THEME=nord # 11 种配色:default|sepia|high-contrast|nord|solarized|dracula|gruvbox|cyberpunk|midnight|old-reddit|phosphor
REDDARCHIVER_ACCENT_COLOR="#8b6914" # 强调色覆盖(十六进制),适用于两种模式
REDDARCHIVER_HTTP_CACHE_MAX_AGE=300 # GET 响应的 Cache-Control/ETag(设为 0 则禁用)
REDDARCHIVER_LISTING_CACHE_TTL=300 # 列表计数/统计缓存(dynamic 模式)
GUNICORN_WORKERS=8 # 覆盖根据 CPU 自动调整的 worker 数量(Docker)
# 可选性能调优(未设置时自动检测)
REDDARCHIVER_MAX_DB_CONNECTIONS=8 # 连接池大小
REDDARCHIVER_MAX_PARALLEL_WORKERS=4 # 并行处理 worker 数量
REDDARCHIVER_USER_BATCH_SIZE=2000 # 用户页面批次大小
REDDARCHIVER_QUEUE_MAX_BATCHES=10 # 队列背压控制
REDDARCHIVER_CHECKPOINT_INTERVAL=10 # 进度保存频率
REDDARCHIVER_USER_PAGE_WORKERS=4 # 用户页面生成 worker 数量
基于 PostgreSQL 的模块化设计,包含专用 HTML 模块,并支持多平台导入:
reddarc.py——支持平台自动检测的主 CLI 入口
core/——PostgreSQL 后端、流式导入器(Reddit/Voat/Ruqqus)、增量更新、HTML 生成
api/——REST API v1,包含 30 多个端点
mcp_server/——用于 AI 集成的 MCP 服务器(29 个工具)
dynamic_pages.py——dynamic 服务模式下的 Flask 页面路由
html_modules/——24 个专用模块(Jinja2 渲染、SEO、主题、统计、CSS 压缩)
templates_jinja2/——27 个采用继承体系的 Jinja2 模板
processing/——并行用户处理、批处理优化、统计
monitoring/——性能跟踪、自动调优、系统优化
采用恒定内存占用的流式架构(无论数据集大小如何,均为 4GB)
使用 PostgreSQL COPY 协议,每秒可插入 15K+ 条记录
使用键集分页,实现 O(1) 查询
通过数据库检查点支持断点续传
使用 FTS GIN 索引实现多平台统一搜索
了解更多:ARCHITECTURE.md——完整的技术深度解析
提供 30 多个 REST API 端点,支持以编程方式访问,并针对 MCP/AI 进行了优化:
系统(5 个):健康检查、统计、模式、OpenAPI 规范
帖子(13 个):列表、单条、评论、上下文、树结构、相关内容、随机内容、聚合、批处理
评论(7 个):列表、单条、随机内容、聚合、批处理
用户(8 个):个人资料、摘要、活动、聚合、批处理
Subreddit(4 个):列表、统计、摘要
搜索(3 个):支持 Google 风格运算符的全文搜索、查询调试
针对 AI 优化的功能:字段选择、截断控制、导出格式(CSV/NDJSON)、批处理端点、上下文端点。速率限制为每分钟 100 个请求。
PostgreSQL 全文搜索:使用 GIN 索引实现极速搜索,并支持相关性排名、高亮摘要和高级筛选条件(subreddit、作者、日期、分数)。即使面对大型数据集,也能在一秒内返回结果。
实例注册中心:用于跟踪归档实例的分布式排行榜系统。可配置元数据、自动计算评分,并将团队分组以开展协同归档。
了解更多:API 文档 · 搜索设置 · 注册中心指南
研究在线讨论与社区动态
分析社会运动和趋势
保存互联网文化
在 subreddit 可能被移除之前进行备份
创建可离线访问的社区资源
分发知识库
调查与分析
对已删除/移除内容进行模式分析
研究用户行为
研究内容审核
🚨 参与进来:帮助保存互联网历史
互联网内容每天都在消失。社区遭到封禁、平台停止运营,有价值的讨论也随之消失。你可以帮助阻止这一切。
📥 立即下载并镜像数据
不要等到内容消失才采取行动。立即下载这些数据集:
† Voat 性能提示:使用预拆分文件可将导入速度提升 1000 倍(每个 subverse 仅需 2~5 分钟,而非 30 多分钟)
‡ Ruqqus:Docker 镜像包含 p7zip,可自动解压 .7z 文件
每一个镜像都至关重要。将数据存储在本地、为种子做种、与研究人员共享。成为保存网络的一员。
🌐 加入注册中心:部署你的实例
已经在运行归档实例?将它注册到我们的公开排行榜:
部署你的实例(快速入门——2~15 分钟)
通过注册中心模板提交
与其他团队一起参与协同保存工作
获得公开曝光和访问流量
通过协同归档避免重复工作
获得团队协作机会
获得排行榜认可
👉 立即注册你的实例 →
🆕 提交新的数据源
发现了新的平台数据集?帮助扩展归档网络:
其他 Reddit 归档
其他链接聚合平台
👉 提交数据源 →
让其他归档工作者能够发现数据
避免重复开展保存工作
构建全面的多平台归档生态系统
在平台消失前跟踪数据的可用性
欢迎贡献!有关开发指南、代码结构和测试流程,请参阅 CONTRIBUTING.md。
主要贡献方向:
PostgreSQL 查询优化
新增导出格式
增强搜索功能
改进文档
我们的模块化架构包含 24 个专用 HTML 模块,以及导入器、API 和处理包,为贡献者提供了易于切入的入口。
这是发布到公有领域的自由且不受限制的软件。详情请参阅 LICENSE 文件(Unlicense)。
任何人均可出于任何商业或非商业目的,以任何方式自由复制、修改、发布、使用、编译、销售或分发本软件。
本项目使用了以下来源的公开数据集:
Pushshift——Reddit 数据访问与归档基础设施
Watchful1's PushshiftDumps——全面的数据转储工具和种子管理
Arctic Shift——让研究人员和公众能够访问 Reddit 数据
Ruqqus Public Dataset——752MB 的 Ruqqus 归档(评论和投稿)
SearchVoat Archive——16.8GB 的 Voat.co 完整备份
本项目基于多个优秀归档项目的工作构建:
libertysoft3 的 reddit-html-archiver——静态 HTML 生成的最初灵感和基础
redarc——基于 PostgreSQL、支持全文搜索的自托管 Reddit 归档工具
red-arch——用于 Reddit subreddit 归档的静态网站生成器
zst_blocks_format——用于处理大型数据集的高效分块压缩格式
GitHub Issues:报告错误或提出功能请求
GitHub Discussions:提问或分享想法
安全问题:通过 GitHub Security Advisories 报告
💰 支持本项目
Redd-Archiver 由一个人历时 6 个月独立打造,源于一份热爱:在互联网历史永远消失之前将其保存下来。
本项目没有公司或机构支持,背后只有一位致力于让有价值的讨论持续可访问的个人。你的支持将有助于:
持续开发和修复错误
维护文档并提供支持
承担基础设施成本(服务器、存储、带宽)
保存更多数据源和平台
无论金额大小,每一笔捐赠都有助于维持这项保存工作。
bc1q8wpdldnfqt3n9jh2n9qqmhg9awx20hxtz6qdl7
扫码捐赠 Bitcoin
42zJZJCqxyW8xhhWngXHjhYftaTXhPdXd9iJ2cMp9kiGGhKPmtHV746EknriN4TNqYR2e8hoaDwrMLfv7h1wXzizMzhkeQi
扫码捐赠 Monero
感谢你支持互联网归档工作!每一份贡献都有助于维护和改进本项目。
本软件依据 Unlicense 按“原样”提供。详情请参阅 LICENSE。用户在处理数据时,有责任遵守适用的法律和服务条款。