103个版本

0.3.115 2024年7月9日
0.3.113 2024年5月1日
0.3.109 2024年2月12日
0.3.105 2023年11月26日
0.3.12 2021年12月30日

Web编程中排名129

AGPL-3.0

280KB
6K SLoC

AodeRelay

一个简单高效的活动pub中继

安装

Docker

如果正在运行docker,可以使用以下命令启动中继

$ sudo docker run --rm -it \
    -v "$(pwd):/mnt/" \
    -e ADDR=0.0.0.0 \
    -e SLED_PATH=/mnt/sled/db-0.34 \
    -p 8080:8080 \
    asonix/relay:0.3.85

这将使用存储在"./sled/db-0.34"的数据库和监听8080端口的中继启动

Cargo

安装cargo后,可以使用以下命令将中继安装到您的cargo bin目录

$ cargo install ap-relay

然后可以使用此命令运行它

$ ADDR=0.0.0.0 relay

这将使用存储在"./sled/db-0.34"的数据库和监听8080端口的中继启动

源代码

可以使用以下命令直接从该git仓库启动中继

$ git clone https://git.asonix.dog/asonix/relay
$ ADDR=0.0.0.0 cargo run --release

用法

要简单地运行服务器,命令如下

$ ./relay

管理

注意:服务器必须运行,才能使用以下命令更新列表

要了解任何其他任务,可以通过传递--help标志

An activitypub relay

Usage: relay [OPTIONS]

Options:
  -b <BLOCKS>       A list of domains that should be blocked
  -a <ALLOWED>      A list of domains that should be allowed
  -u, --undo        Undo allowing or blocking domains
  -h, --help        Print help information

要添加域名到阻止列表,使用-b标志并传递域名列表

$ ./relay -b asonix.dog blimps.xyz

要从不阻止列表中删除域名,只需传递带有-u标志的-b

$ ./relay -ub asonix.dog blimps.xyz

对于允许域名,规则相同,尽管域名可以通过-a标志允许

$ ./relay -a asonix.dog blimps.xyz
$ ./relay -ua asonix.dog blimps.xyz

配置

默认情况下,所有这些值都设置为开发值。它们从环境变量或工作目录中的.env文件中读取。

HOSTNAME=localhost:8080
ADDR=127.0.0.1
PORT=8080
DEBUG=true
RESTRICTED_MODE=false
VALIDATE_SIGNATURES=false
HTTPS=false
PRETTY_LOG=true
PUBLISH_BLOCKS=false
SLED_PATH=./sled/db-0.34

要在此服务器上运行生产环境,您可能希望设置其中大多数值

HOSTNAME=relay.my.tld
ADDR=0.0.0.0
PORT=8080
DEBUG=false
RESTRICTED_MODE=false
VALIDATE_SIGNATURES=true
HTTPS=true
PRETTY_LOG=false
PUBLISH_BLOCKS=true
SLED_PATH=./sled/db-0.34
RUST_LOG=warn
API_TOKEN=somepasswordishtoken
OPENTELEMETRY_URL=localhost:4317
TELEGRAM_TOKEN=secret
TELEGRAM_ADMIN_HANDLE=your_handle
TLS_KEY=/path/to/key
TLS_CERT=/path/to/cert
FOOTER_BLURB="Contact <a href=\"https://masto.asonix.dog/@asonix\">@asonix</a> for inquiries"
LOCAL_DOMAINS=masto.asonix.dog
LOCAL_BLURB="<p>Welcome to my cool relay where I have cool relay things happening. I hope you enjoy your stay!</p>"
PROMETHEUS_ADDR=0.0.0.0
PROMETHEUS_PORT=9000
CLIENT_TIMEOUT=10
DELIVER_CONCURRENCY=8
SIGNATURE_THREADS=2

描述

HOSTNAME

中继托管的主机名或IP地址。如果您在example.com上启动中继,那么这就是您的HOSTNAME。默认值为localhost:8080

ADDR

服务器绑定的地址。默认情况下,这是127.0.0.1,因此对于生产情况,应将其设置为0.0.0.0或另一个公开地址。

PORT

服务器绑定的端口,默认情况下为8080,但如有必要,可以更改。

DEBUG

当请求击中/inbox路由时,是否将传入的活动打印到控制台。默认值为true,但在生产情况下应设置为false。由于每个发送到中继的活动都是公开的,这并不代表安全风险。

RESTRICTED_MODE

此设置启用“允许列表”设置,只有通过relay -a命令明确启用的服务器才能加入中继。默认为false。如果未启用RESTRICTED_MODE,则手动允许通过relay -a的域没有效果。

VALIDATE_SIGNATURES

此设置强制检查传入活动的HTTP签名。默认为true

HTTPS

当前服务器是否运行在HTTPS端口上。这用于生成当前运行的中继的URL。默认设置为true

PUBLISH_BLOCKS

是否在服务器的nodeinfo元数据中发布被阻止的域列表。默认为false

SLED_PATH

存储连接服务器磁盘数据库的位置。默认为./sled/db-0.34

RUST_LOG

要打印的日志级别。可用级别为ERRORWARNINFODEBUGTRACE。您还可以指定模块路径以启用某些日志但禁用其他日志,例如RUST_LOG=warn,tracing_actix_web=info,relay=info。默认为warn

SOURCE_REPO

中继源代码的URL。默认为https://git.asonix.dog/asonix/relay,但如果你在其他地方托管分支,则应更改。

REPOSITORY_COMMIT_BASE

仓库提交哈希引用的基本路径。例如,Gitea的/src/commit/,GitLab的/tree/

API_TOKEN

用于访问管理API的密钥token。此值必须设置以使命令行功能正常。

OPENTELEMETRY_URL

导出opentelemetry跨度的URL。这主要用于调试。没有默认值,因为大多数人可能没有运行opentelemetry收集器。

TELEGRAM_TOKEN

用于运行中继管理机器人的Telegram机器人类令牌。没有默认值。

TELEGRAM_ADMIN_HANDLE

允许管理中继的Telegram用户的handle。没有默认值。

TLS_KEY

可选 - 如果你直接在互联网上运行中继并有一个TLS密钥来为你的中继提供HTTPS,则指定此值。

TLS_CERT

可选 - 如果你直接在互联网上运行中继并有一个TLS证书链来为你的中继提供HTTPS,则指定此值。

可选 - 在页面页脚中添加自定义注释。

LOCAL_DOMAINS

可选 - 由与中继相同的管理员运行的mastodon服务器的域。

LOCAL_BLURB

可选 - 中继的描述。

PROMETHEUS_ADDR

可选 - 绑定以提供prometheus抓取端点的地址。

PROMETHEUS_PORT

可选 - 绑定以提供prometheus抓取端点的端口。

CLIENT_TIMEOUT

可选 - 在检索和交付期间,中继将保持打开与远程服务器的连接多长时间(以秒为单位)。默认为10。

DELIVER_CONCURRENCY

可选 - 中继每个线程允许多少个交付请求在飞行中。默认为8。

签名线程

可选 - 覆盖用于签名和验证请求的线程数。默认值为 std::thread::available_parallelism()(它试图检测您有多少核心)。如果无法检测到正确的核心数,则回退到1。

'代理_URL'

可选 - HTTP代理的URL,用于转发出站请求

'代理用户名'

可选 - 通过HTTP基本认证提供给配置了代理_URL的HTTP代理的用户名

'代理密码'

可选 - 通过HTTP基本认证提供给配置了代理_URL的HTTP代理的密码

订阅

Mastodon管理员可以通过将/inbox路由添加到他们的中继设置中来订阅此中继。例如,如果服务器是https://relay.my.tld,则正确的URL将是https://relay.my.tld/inbox

Pleroma管理员可以通过将/actor路由添加到他们的中继设置中来订阅此中继。例如,如果服务器是https://relay.my.tld,则正确的URL将是https://relay.my.tld/actor

支持的Activity

  • 接受关注 {remote-actor},这是一个无操作
  • 拒绝关注 {remote-actor},向 {remote-actor} 发送取消关注的请求
  • 公告 {任何内容},{任何内容}被公告给监听服务器
  • 创建 {任何内容},{任何内容}被公告给监听服务器
  • 关注 {self-actor},成为中继的监听者,并将发送一个关注的请求
  • 关注公共,成为中继的监听者
  • 取消关注 {self-actor},停止监听中继,并发送取消关注的请求
  • 取消关注公共,停止监听中继
  • 删除 {任何内容},将删除 {任何内容}原样中继到监听服务器。请注意,除非此活动已用JSON-LD签名,否则此活动可能会被监听服务器拒绝
  • 更新 {任何内容},将更新 {任何内容}原样中继到监听服务器。请注意,除非此活动已用JSON-LD签名,否则此活动可能会被监听服务器拒绝
  • 添加 {任何内容},将添加 {任何内容}原样中继到监听服务器。请注意,除非此活动已用JSON-LD签名,否则此活动可能会被监听服务器拒绝
  • 移除 {任何内容},将移除 {任何内容}原样中继到监听服务器。请注意,除非此活动已用JSON-LD签名,否则此活动可能会被监听服务器拒绝

支持的发现协议

  • Webfinger
  • NodeInfo

已知问题

Pleroma和Akkoma不支持验证JSON-LD签名,这意味着许多活动(如删除、更新、添加和移除)将被拒绝,并显示类似WARN: Response from https://example.com/inbox, "Invalid HTTP Signature"的消息。这是正常的,并且不是中继的问题。

贡献

请随时为任何发现的问题提交问题。请注意,任何贡献的代码都将根据AGPLv3许可。

许可证

版权所有 © 2022 Riley Trautman

AodeRelay是免费软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款和条件下重新分发和/或修改它,许可证版本为3,或(根据您的选择)许可证的任何较新版本。

AodeRelay的发布是希望它将是有用的,但没有任何保证;甚至没有关于适销性或针对特定目的的适用性的暗示保证。有关详细信息,请参阅GNU通用公共许可证。本文件是AodeRelay的一部分。

您应该已经收到了AodeRelay的GNU通用公共许可证副本。如果没有,请参阅http://www.gnu.org/licenses/

依赖关系

~62–98MB
~2M SLoC