ActivityPub中继服务器是一个信息聚合服务器。
各个实例,例如Mastodon、Misskey可以通过订阅中继服务器来交换大量公开内容。它可以帮助小型服务器发现联邦宇宙中的其他服务器的内容,无需本站用户手动关注其他远程服务器上的用户。
再简单点说就是中继服务器可以为自己的站点提供丰富的信息流,让自己的站点可以看到更多其他站点的内容。
Activity-Relay是一个开源的ActivityPub中继服务器,项目地址:https://github.com/yukimochi/Activity-Relay
这篇文章记录一下Activity-Relay的安装与配置,以下操作在Debian11上完成。
安装需要用到的软件包:
apt -y update apt -y install curl git nginx python3-certbot-nginx redis-server
新建一个名为relay的用户和组,待会用这个用户来运行Activity-Relay:
useradd -r -m -d /var/lib/relay -s /usr/sbin/nologin -c "Activity-Relay" -U relay
安装golang:
curl -L https://go.dev/dl/go1.19.4.linux-amd64.tar.gz -o go1.19.4.linux-amd64.tar.gz tar -C /usr/local -xzf go1.19.4.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' > /etc/profile.d/golang.sh source /etc/profile.d/golang.sh
克隆项目代码并编译:
git clone "https://github.com/yukimochi/Activity-Relay.git" -b v1.2.4 cd Activity-Relay go build -o relay -ldflags "-X main.version=$(git describe --tags HEAD)"
复制编译好的二进制文件到/usr/local/bin:
mv relay /usr/local/bin
同时复制一份配置文件:
mv config.yml.example /var/lib/relay/config.yml
编辑配置文件:
nano /var/lib/relay/config.yml
你需要修改下面的配置:
REDIS_URL: redis://127.0.0.1:6379 RELAY_BIND: 127.0.0.1:8080 RELAY_DOMAIN: relay.example.com # 你的中继服务器域名 RELAY_SERVICENAME: Example Relay Service # 你的中继服务器名字
生成配置文件里面的actor.pem并设置正确的权限:
openssl genrsa | tee /var/lib/relay/actor.pem chmod 600 /var/lib/relay/actor.pem chown relay:relay /var/lib/relay/actor.pem
新建relay-api的systemd服务:
systemctl edit --full --force relay-api.service
写入如下配置:
[Unit] Description=YUKIMOCHI Activity-Relay API Server Documentation=https://github.com/yukimochi/Activity-Relay/wiki After=network.target network-online.target Requires=network-online.target [Service] Type=simple User=relay Group=relay ExecStart=/usr/local/bin/relay --config /var/lib/relay/config.yml server TimeoutStopSec=5s LimitNOFILE=1048576 LimitNPROC=512 PrivateTmp=true ProtectSystem=full AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target
新建relay-worker的systemd服务:
systemctl edit --full --force relay-worker.service
写入如下配置:
[Unit] Description=YUKIMOCHI Activity-Relay Job Worker Documentation=https://github.com/yukimochi/Activity-Relay/wiki After=network.target network-online.target Requires=network-online.target [Service] Type=simple User=relay Group=relay ExecStart=/usr/local/bin/relay --config /var/lib/relay/config.yml worker TimeoutStopSec=5s LimitNOFILE=1048576 LimitNPROC=512 PrivateTmp=true ProtectSystem=full [Install] WantedBy=multi-user.target
启动relay-api、relay-worker并设置开机自启:
systemctl enable --now relay-api relay-worker
配置nginx反向代理:
nano /etc/nginx/sites-available/relay
写入如下配置:
upstream relay { server 127.0.0.1:8080 max_fails=5 fail_timeout=60s; } server { listen 80; listen [::]:80; server_name relay.example.com; client_max_body_size 0; location / { proxy_pass http://relay; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }
启用新的nginx配置:
ln -s /etc/nginx/sites-available/relay /etc/nginx/sites-enabled/relay
签发ssl证书:
certbot --nginx
至此,中继服务器就搭建完成了,你的中继服务器地址将是:https://relay.example.com/inbox
你可以在mastodon添加中继服务器:
你也可以在misskey添加中继服务器:
接下来简单介绍一下如何管理你的中继服务器。
Activity-Relay自带一系列管理命令,可以帮助你管理中继服务器。在执行相关管理命令的时候,需要指定对应的配置文件才能正常工作。
如果你觉得每次执行命令都指定配置文件太麻烦的话,也可以直接进入到你的配置文件所在目录,这样执行命令的时候就不需要指定配置文件了:
cd /var/lib/relay
建议开启审批功能,可以防止滥用。开启后申请加入你中继服务器的实例需要得到你的允许才可以加入:
relay control config enable manually-accept
要关闭审批功能:
relay control config enable --disable manually-accept
当审批功能开启后,你可以使用下面的命令列出等待审核的实例:
relay control follow list
如果要同意一个实例加入:
relay control follow accept example.com
如果要拒绝一个实例加入:
relay control follow reject example.com
列出所有加入到中继服务器的实例域名:
relay control domain list
更多管理命令可参考:https://github.com/yukimochi/Activity-Relay/wiki/02.-Control
最后简单说一下,有很多中继服务器都有一个“首页”,在首页可以介绍一下你的中继服务器,以及告诉大家有哪些实例加入到你的中继服务器了。要实现这个的话,可以看看这个issue,修改一下nginx配置即可:https://github.com/yukimochi/Activity-Relay/issues/50
这东西是干什么用的呀???
方便不同的 ActivityPub 实例批量交换公开帖文,以丰富全局时间线(没有中继的话就只有存在关注关系或是被引用到的帖文会被发现)