7个版本 (4个重大更新)

0.35.1 2024年6月29日
0.35.0 2024年6月29日
0.34.0 2024年5月30日
0.33.2 2024年5月30日
0.30.2 2023年12月27日

#101 in Web编程

Download history 303/week @ 2024-05-24 93/week @ 2024-05-31 28/week @ 2024-06-07 13/week @ 2024-06-14 298/week @ 2024-06-28 11/week @ 2024-07-05

每月401次下载

AGPL-3.0

615KB
4K SLoC

包含 (WOFF字体, 325KB) static/Inter.var.woff2

Redlib

Reddit的替代私有前端,起源于Libreddit

screenshot


10秒推销词:Redlib是一个类似Invidious的私有前端,但适用于Reddit。在不被跟踪的情况下浏览r/unpopularopinion的冷门观点。

  • 🚀 快速:使用Rust编写,速度极快且内存安全
  • ☁️ 轻量:无JavaScript,无广告,无跟踪,无冗余
  • 🕵 私密:所有请求都通过服务器代理,包括媒体
  • 🔒 安全:内容安全策略(CSP)防止浏览器请求Reddit

目录

  1. Redlib
  2. 实例
  3. 关于
  4. 比较
  5. 部署
  6. 配置

实例

[!TIP] 🔗 想自动将Reddit链接重定向到Redlib?请使用LibRedirectPrivacy Redirect

最新的实例表可在Markdown机器可读JSON中找到。

这两个文件都是redlib-instances仓库的一部分。要将您的自托管实例添加到列表中,请参阅redlib-instances README

关于实例运行时间的详细信息,请参阅 Uptime Robot 状态页面


关于

[!注意] 在 💬 Matrix、🐋 Quay.io、:octocat: GitHub 和 🦊 GitLab 上找到 Redlib。

Redlib 希望提供一种更简单的浏览 Reddit 的方式,无需广告、跟踪器和冗余功能。Redlib 受到其他替代流行服务的启发,例如 Invidious(YouTube)、Nitter(Twitter)和 Bibliogram(Instagram)。

Redlib 目前实现了 Reddit 大多数(未登录)功能,但仍然缺少 一些功能

构建工具

与其他Reddit前端相比有何不同?

Teddit

Teddit 是另一个旨在为 Reddit 提供替代前端的开源项目。这两个项目之间没有联系,您可以根据自己的喜好选择使用。竞争促进创新,Teddit 的发布激励我将 Redlib 打造成一个更加精致的产品。

如果您想进行比较,我注意到最大的区别是

  • Redlib 围绕 Reddit 的新版设计,而 Teddit 似乎更接近于 Reddit 的旧设计。这可能会更适合一些用户,因为设计总是主观的。
  • Redlib 使用 Rust 编写,以实现速度和内存安全。它使用 Hyper,这是一种快速且轻量级的 HTTP 服务器/客户端实现。

Libreddit

虽然最初是 Libreddit 的分支,但采用“Redlib”这个名字是为了避免法律问题,因为 Reddit 只允许以“XYZ For Reddit”的结构使用他们的名字。

还进行了几项技术改进,包括

  • OAuth 令牌欺骗:为了绕过 Reddit 强制执行的速率限制,使用 OAuth 令牌欺骗来模仿最常用的 iOS 和 Android 客户端。虽然探讨了同时欺骗 iOS 和 Android 客户端,但由于匿名 iOS 客户端使用时的内容限制,最终选择了 Android 客户端。
  • 令牌刷新:认证令牌每 24 小时刷新一次,模仿官方 Android 应用程序的行为。
  • HTTP 头部模仿:尽量发送尽可能多的官方应用程序的头部信息,以减少 Reddit 对 Redlib 请求的打击。

比较

本节概述了 Redlib 在速度和隐私方面与 Reddit 的比较。

速度

最后测试于 2024 年 1 月 12 日。

Google PageSpeed Insights 的结果(Redlib 报告Reddit 报告)。

性能指标 Redlib Reddit
速度指数 0.6s 1.9s
性能评分 100% 64%
交互时间 2.8s 12.4s

隐私

Reddit

日志记录:根据 Reddit 的 隐私政策,他们“可能会[自动]记录信息”,包括

  • IP 地址
  • 用户代理字符串
  • 浏览器类型
  • 操作系统
  • 引用 URL
  • 设备信息(例如,设备 ID)
  • 设备设置
  • 访问的页面
  • 点击的链接
  • 请求的 URL
  • 搜索词

位置:相同的隐私政策继续描述,位置数据可能通过以下方式收集

  • GPS(同意)
  • 蓝牙(同意)
  • 与位置相关的内容(同意)
  • 您的 IP 地址

cookies:Reddit的cookie声明记录了Reddit使用的cookie,包括/关于

  • 身份验证
  • 功能
  • 分析和性能
  • 广告
  • 第三方cookie
  • 第三方网站

Redlib

为了透明度,我希望描述Redlib处理用户隐私的所有方式。

服务器

  • 日志记录:在生产环境中(运行二进制文件、使用Docker托管或使用官方实例时),Redlib不记录任何内容。在调试时(从源代码运行,没有--release),Redlib记录检索到的帖子ID以帮助故障排除。

  • cookies:Redlib使用可选的cookies来存储设置菜单中配置的任何设置。这些不是跨站cookie,并且cookies不包含任何个人信息。

官方实例(redlib.matthew.science)

官方实例托管在https://redlib.matthew.science

  • 服务器:官方实例运行生产二进制文件,因此不记录任何内容。

  • DNS:官方实例的域名使用Cloudflare作为DNS解析器。然而,此网站不是通过Cloudflare代理的,因此Cloudflare无法访问用户流量。

  • 托管:官方实例托管在Replit上,该平台监控使用情况以防止滥用。我理解这可能会使某些用户的威胁模型无效,因此,欢迎自行托管、使用非官方实例以及通过Tor浏览。


部署

本节涵盖了Redlib的多种部署方式。建议在生产环境中使用Docker

有关配置选项,请参阅配置部分

Docker

Docker允许您运行容器化应用程序。容器是松散隔离的环境,轻量级且包含运行应用程序所需的所有内容,因此无需依赖主机上安装的内容。

Redlib的Docker镜像可在quay.io上找到,支持amd64arm64armv7平台。

Docker Compose

[!IMPORTANT]这些说明假定已安装Compose插件。如果没有,请按照Docker文档中的说明进行操作。

复制compose.yaml并修改任何相关值(例如,Redlib应监听的端口号)。

以分离模式启动Redlib(在后台运行)

docker compose up -d

从Redlib容器流式传输日志

docker logs -f redlib

Docker CLI

部署Redlib

docker pull quay.io/redlib/redlib:latest
docker run -d --name redlib -p 8080:8080 quay.io/redlib/redlib:latest

在主机上的不同端口上部署(在这种情况下,端口80)

docker pull quay.io/redlib/redlib:latest
docker run -d --name redlib -p 80:8080 quay.io/redlib/redlib:latest

如果您在Redlib前面使用反向代理,请在端口号前加上127.0.0.1,以便Redlib仅在本地监听主机端口。例如,如果Redlib的主机端口为8080,则指定127.0.0.1:8080:8080

从Redlib容器流式传输日志

docker logs -f redlib

二进制文件

如果您在Linux上,您可以从GitHub上的最新版本中获取二进制文件。

使用Wget下载二进制文件

wget https://github.com/redlib-org/redlib/releases/download/v0.31.0/redlib

将二进制可执行文件的所有权更改为root

sudo chmod +x redlib && sudo chown root:root redlib

将二进制文件复制到/usr/bin

sudo cp ./redlib /usr/bin/redlib

将Redlib部署到0.0.0.0:8080

redlib

[!IMPORTANT] 如果您通过NGINX代理Redlib(参见问题#122),请在您的NGINX配置文件中在proxy_pass行上方添加以下内容:

proxy_http_version 1.1;

作为systemd服务运行

您可以使用在contrib/redlib.service中提供的systemd服务(将其安装到/etc/systemd/system/redlib.service)。

您可以通过在/etc/redlib.conf中创建文件来选择性地配置该服务,使用contrib/redlib.conf作为模板。您还可以添加上面解释的REDLIB_DEFAULT__{X}设置。

当使用“使用NGINX代理”并且代理在同一台机器上时,您应该确保nginx等待此服务启动。编辑/etc/systemd/system/redlib.service.d/reverse-proxy.conf

[Unit]
Before=nginx.service

从源代码构建

要部署尚未包含在最新版本中的Redlib更改,您可以从源代码构建应用程序。

git clone https://github.com/redlib-org/redlib && cd redlib
cargo run

Replit/Heroku

[!WARNING] 这些是免费托管选项,但它们不是私有的,并且会监控服务器使用情况以防止滥用。如果您需要免费且简单的设置,此方法可能最适合您。

Run on Repl.it Deploy

launchd(macOS)

如果您使用的是macOS,您可以使用在contrib/redlib.plist中提供的launchd服务。

使用以下命令安装它:cp contrib/redlib.plist ~/Library/LaunchAgents/

使用以下命令加载并启动它:launchctl load ~/Library/LaunchAgents/redlib.plist


配置

您可以使用环境变量进一步配置Redlib。例如

REDLIB_DEFAULT_SHOW_NSFW=on redlib
REDLIB_DEFAULT_WIDE=on REDLIB_DEFAULT_THEME=dark redlib -r

您还可以使用名为redlib.toml的配置文件配置Redlib。例如

REDLIB_DEFAULT_WIDE = "on"
REDLIB_DEFAULT_USE_HLS = "on"

[!NOTE] 如果您使用Docker CLI或Docker Compose部署Redlib,可以在.env文件中定义环境变量,使您能够在一个地方集中和管理配置。

要使用.env文件配置Redlib,将.env.example文件复制到.env并根据需要编辑它。

如果使用Docker CLI,请将 --env-file .env添加到运行Redlib的命令中。例如

docker run -d --name redlib -p 8080:8080 --env-file .env quay.io/redlib/redlib:latest

如果使用Docker Compose,无需更改,因为.env文件已在compose.yaml中通过env_file: .env行引用。

实例设置

通过将环境变量传递给Redlib,为每个实例特定的设置分配默认值,格式为REDLIB_{X}。将{X}替换为设置名称(见下表)的大写字母。

名称 可能值 默认值 描述
SFW_ONLY ["on", "关闭"] 关闭 启用实例的SFW-only模式,即过滤所有NSFW内容。
横幅 字符串 (空) 允许服务器设置要显示的横幅。目前它显示在实例信息页面上。
ROBOTS_DISABLE_INDEXING ["on", "关闭"] 关闭 禁用搜索引擎对实例的索引。
PUSHSHIFT_FRONTEND 字符串 恢复删除.拉取推送.io 允许服务器设置与"已删除"链接一起使用的Pushshift前端。
PORT 整数 0-65535 8080 Redlib监听的内部端口。

默认用户设置

通过传递格式为 REDLIB_DEFAULT_{Y} 的环境变量到Redlib,为每个可修改的设置分配默认值。用设置名(见下表)替换 {Y},首字母大写。

名称 可能值 默认值
THEME ["系统", "浅色", "深色", "黑色", "dracula", "nord", "激光波", "紫罗兰", "金色", "玫瑰盒", "gruvboxdark", "gruvboxlight", "tokyoNight", "icebergDark"] 系统
FRONT_PAGE ["默认", "热门", "全部"] 默认
LAYOUT ["卡片", "简洁", "紧凑"] 卡片
["on", "关闭"] 关闭
POST_SORT ["热门", "", "顶部", "上升", "有争议"] 热门
COMMENT_SORT ["置信度", "顶部", "", "有争议", ""] 置信度
BLUR_SPOILER ["on", "关闭"] 关闭
显示NSFW ["on", "关闭"] 关闭
模糊NSFW ["on", "关闭"] 关闭
使用HLS ["on", "关闭"] 关闭
隐藏HLS通知 ["on", "关闭"] 关闭
自动播放视频 ["on", "关闭"] 关闭
SUBSCRIPTIONS 用加号分隔的子版块列表(sub1+sub2+sub3... (无)
隐藏奖项 ["on", "关闭"] 关闭
禁用访问Reddit确认 ["on", "关闭"] 关闭
隐藏得分 ["on", "关闭"] 关闭
固定导航栏 ["on", "关闭"] on

依赖关系

~26–39MB
~752K SLoC