Hacker News 中文摘要

RSS订阅

Shitter – A Nitter Fork

Shitter(Shitter)是 Nitter(Nitter)的分支,一个免费且开源的推特(Twitter)替代前端,专注隐私与性能,灵感来自 Invidious(Invidious)项目。它不使用 JavaScript 或广告,所有请求经由后端处理,客户端从不直接连接推特,可防止推特追踪 IP 或 JavaScript 指纹,并采用其非官方 API,无需开发者账号。

正文

Shitter——一个 Nitter 分支

Image 1: shitter logo

Shitter 是一个免费开源的 Twitter 替代前端,专注于隐私和性能。其灵感来自 Invidious 项目。

  • 无 JavaScript 和广告
  • 所有请求都经过后端处理,客户端从不与 Twitter 直接通信
  • 防止 Twitter 追踪你的 IP 或 JavaScript 指纹
  • 使用 Twitter 的非官方 API(无需开发者账号)
  • 轻量(感谢 @nim_lang,仅 60KB,而 twitter.com 为 784KB)
  • RSS 订阅源
  • 主题
  • 移动端支持(响应式设计)

资源

维基包含:

贡献

本仓库不接受 Pull Request,但欢迎以补丁文件(Patch files)的形式贡献;补丁可以提交在 issue 中,合并和处理起来都更加方便。

为什么?

不启用 JavaScript 就无法使用 Twitter,而且从 2024 年起,你必须注册账号。对注重隐私的人来说,阻止 JavaScript 分析和基于 IP 的追踪非常重要,但除了使用 VPN 和 uBlock/uMatrix 之外,这几乎无法实现。即便已经使用 VPN 并开启了强力广告拦截器,你仍然可能通过浏览器指纹被准确追踪,而且无需 JavaScript。在 Twitter 取消了让用户控制自身数据是否发送给广告商的能力之后,这一点变得尤其重要。

使用 Nitter 实例(例如托管在 VPS 上),你可以在不启用 JavaScript 的情况下浏览 Twitter,同时保护自己的隐私。除了尊重隐私之外,Nitter 平均比 Twitter 轻量约 15 倍,而且在大多数情况下页面服务速度更快(例如时间线加载速度快 2–4 倍)。

截图

图片 2:Nitter 截图——Framasoft

安装

Docker

Docker 镜像页面:https://hub.docker.com/r/mv12star/shitter

注意:发布的镜像是多架构的 —— mv12star/shitter:latest 可在 amd64/armv7/arm64 上原生运行。

要通过 Docker 运行 Nitter,你需要先单独安装并运行 Redis,然后才能运行容器。下文也介绍了如何用 Docker 一并运行 Redis。

首先创建配置文件。Docker 命令会将其挂载进容器,因此它必须事先存在于主机上。如果你克隆了仓库,执行: cp nitter.example.conf nitter.conf

如果你在没有本地克隆的情况下使用预构建镜像,请下载 nitter.example.conf 并另存为 nitter.conf。

要在 Docker 中构建并运行 Nitter,执行: docker build -t nitter:latest . docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network host nitter:latest

同时也提供了预构建的 Docker 镜像: docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network host mv12star/shitter:latest

若要使用 docker-compose 把 Nitter 和 Redis 作为不同容器运行:在 nitter.conf 中将 redisHost 从 localhost 改为 nitter-redis,然后执行: docker-compose up -d

请注意,Docker 命令会从你运行它们的目录挂载 nitter.conf(使用 docker-compose 时还包括 sessions.jsonl)。如果被挂载的文件不存在,Docker 会静默地在其位置创建一个目录,随后容器会启动失败并提示 not a directory: Are you trying to mount a directory onto a file。此时需删除该目录,并按上面的方式创建文件。

systemd

要通过 systemd 运行 Nitter,可以使用如下服务文件:

[Unit]

Description=Nitter (An alternative Twitter front-end)

After=syslog.target

After=network.target

[Service]

Type=simple

# set user and group

User=nitter

Group=nitter

# configure location

WorkingDirectory=/home/nitter/nitter

ExecStart=/home/nitter/nitter/nitter

Restart=always

RestartSec=15

[Install]

WantedBy=multi-user.target

然后启用并运行服务:systemctl enable --now nitter.service

日志

Nitter 目前会将部分错误输出到 stdout,并没有实现真正的日志功能。如果你用 systemd 运行 Nitter,可以这样查看 stdout:journalctl -u nitter.service(加上 --follow 可查看最后 15 行)。如果你运行的是 Docker 镜像,可以执行:docker logs --follow *nitter 容器 ID*

从源码构建

依赖项

  • libpcre
  • libsass
  • redis/valkey

编译 Nitter 需要 Nim 环境,详见 nim-lang.org。你可以将其安装在系统全局,也可以安装在下面创建的用户目录中。

编译 scss 文件需要安装 libsass。在 Ubuntu 和 Debian 上,可以使用 libsass-dev。

缓存以及未来的账号信息都需要 Redis。截至 2024 年,Redis 已不再是开源软件,因此建议使用其分支 Valkey。大多数发行版中,它以 redis 或 redis-server(Ubuntu/Debian)的形式提供,或者作为 valkey/valkey-server 提供。使用默认配置运行即可,Nitter 的默认配置已设为使用默认端口和 localhost。

下面是如何创建 nitter 用户、克隆仓库,并构建项目及 scss 和 md 文件的步骤: # useradd -m nitter # su nitter $ git clone https://codeberg.org/shitter/shitter $ cd nitter $ nimble -l build -d:danger --mm:refc $ nimble -l scss $ nimble -l md $ cp nitter.example.conf nitter.conf

在 nitter.conf 中设置你的 hostname、端口、HMAC key、https(为使用 cookie,必须正确)以及 Redis 信息。要运行 Redis,可以执行 redis-server --daemonize yes,或者 systemctl enable --now redis(根据发行版也可能是 redis-server)。通过执行 ./nitter 或使用上面的 systemd 服务来运行 Nitter。出于安全和性能考虑,你应该将 Nitter 运行在反向代理(如 Nginx 或 Apache)之后。

Matrix 频道

欢迎加入我们的 Matrix 频道。

评论

讨论几乎被项目名 shitter 牵着走:一方嫌它粗俗、不专业,认为项目缺乏实质说明、只是靠名字上首页;另一方则把它读作对 X/Twitter 的蔑视或黑色幽默。此外还有人从平台归属出发主张停用 X,少量技术讨论则关注实例为何能反复重建,以及 Firefox 下的图片加载问题。

认为名字粗俗、不专业,且只是靠名字博关注

  • 项目名被多名用户批评低俗、不专业,甚至被认为 HN 不该出现这种粗话,有人直接请求这类项目取个正常名字;还有人指出它连为何 fork、和原版有何不同都没解释,怀疑登上首页只是因为名字(较多人) > 连一句解释它为什么是 fork、和原版有什么不同都没有,能上首页大概只是因为名字(@dcre)

把名字理解为对 X/Twitter 的蔑视或玩梗

  • 少数人把 shitter 当成对前 Twitter 的嘲讽:有人用 Xitter 读成 shitter 的发音梗开玩笑,也有人问是不是故意取这个名字来表达蔑视,或觉得它折射甚至抬高了 x.com 的文化定位,还有人顺便怀疑代码质量和是否专为灌水、引战优化(少数人) > 应该叫 Xitter,但发音要读成 shitter(@BLKNSLVR)

认为没必要再为 X/Twitter 生态造工具,应直接停用

  • 有用户从平台归属出发,认为 X/Twitter 已被极右翼或法西斯支持者掌控,继续折腾替代前端没有意义,停用平台才是根本解法(少数人) > 别再用明显由法西斯主义者运营的平台,那样就不需要这类工具了(@ly0n)

好奇实例为何能不断重建,并指出当前可用实例反而更多

  • 有人问这类前端为何不停冒出来又消失、却能随时重新拉起;回应认为它们易于部署和重建,现有可用实例数量不降反增,社区还在维护公开列表(少数人) > 现在可用的实例比之前下架行动前还要多(@grimgrin)

有价值的补充

  • 有用户基于 Nitter 做了一个纯反向时间轴的科技圈时间线,除手动过滤账号外没有算法排序,所有推文都会出现(@SomeonesAccount)
  • 有用户报告部分 shitter 实例在 Firefox 中无法加载头像或推文配图,Chrome 正常,疑似浏览器兼容性 bug,希望修复(@DavCreator)