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编程
每月401次下载
615KB
4K SLoC
包含 (WOFF字体, 325KB) static/Inter.var.woff2
Redlib
Reddit的替代私有前端,起源于Libreddit。
10秒推销词:Redlib是一个类似Invidious的私有前端,但适用于Reddit。在不被跟踪的情况下浏览r/unpopularopinion的冷门观点。
- 🚀 快速:使用Rust编写,速度极快且内存安全
- ☁️ 轻量:无JavaScript,无广告,无跟踪,无冗余
- 🕵 私密:所有请求都通过服务器代理,包括媒体
- 🔒 安全:内容安全策略(CSP)防止浏览器请求Reddit
目录
实例
[!TIP] 🔗 想自动将Reddit链接重定向到Redlib?请使用LibRedirect或Privacy Redirect!
这两个文件都是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 | |
---|---|---|
速度指数 | 0.6s | 1.9s |
性能评分 | 100% | 64% |
交互时间 | 2.8s | 12.4s |
隐私
日志记录:根据 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上找到,支持amd64
、arm64
和armv7
平台。
Docker Compose
复制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] 这些是免费托管选项,但它们不是私有的,并且会监控服务器使用情况以防止滥用。如果您需要免费且简单的设置,此方法可能最适合您。
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