
GoToSocial 是一个轻量级、资源占用低的 ActivityPub 社交网络服务器,兼容 Mastodon,可用于自建去中心化社交平台。
背景
我之前自建过一次,不过使用较少,现在给它换了一个短的域名,直接用二级域名zyg.im
,(之前是一个子域gts.joomaen.top
)。
按照ChatGPT的回答,GoToSocial是可以换域名的,不过我看官方文档的描述好像不行,反正我是直接重新搞了一个,这次想一直用下去,请关注我: @[email protected]
前期准备
- 一个VPS并且安装Docker和Docker Compose
- 一个域名(子域也可以)
- 一个反向代理服务器(Nginx、Caddy等,我用的是1Panel上的OpenResty)
我是使用Docker Compose来搭建的,这样更加灵活,随便找一个目录就行,挂载目录就是在它的子目录中,方便迁移和备份。
搭建步骤
- 在VPS上你喜欢的地方新建一个文件夹作为工作目录,用来存放docker-compose 文件,以及一个目录来存储 GoToSocial 的数据。我是在
/opt
下,进入这个目录:
mkdir -p /opt/gotosocial/data
cd /opt/gotosocial
- 使用
wget
获取最新的docker-compose.yaml
wget https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/example/docker-compose/docker-compose.yaml
- 按需修改
docker-compose.yaml
,用你习惯的编辑器打开
vim docker-compose.yaml
1. 更改 GTS_HOST 环境变量为你运行 GoToSocial 的域名。
2. 取消时区注释,改为 TZ: Asia/Shanghai
3. 用户,默认情况下,Docker 化的 GoToSocial 以 Linux 用户/组 1000:1000 运行,但我测试不行,于是我改成了root用户的 user: 0:0
4. 端口方面只保留 - "8080:8080" ,我改成了8280,因为我使用反代,不用在这里配置LetsEncrypt证书。
- 这是我的
docker-compose.yml
version: "3.3"
services:
gotosocial:
image: superseriousbusiness/gotosocial:latest
container_name: gotosocial
user: 0:0
networks:
- gotosocial
environment:
# Change this to your actual host value.
GTS_HOST: zyg.im
GTS_DB_TYPE: sqlite
# Path in the GtS Docker container where
# the sqlite.db file will be stored.
GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db
# Change this to true if you're not running
# GoToSocial behind a reverse proxy.
GTS_LETSENCRYPT_ENABLED: "false"
# Set your email address here if you
# want to receive letsencrypt notices.
GTS_LETSENCRYPT_EMAIL_ADDRESS: ""
# Path in the GtS Docker container where the
# Wazero compilation cache will be stored.
GTS_WAZERO_COMPILATION_CACHE: /gotosocial/.cache
## For reverse proxy setups:
GTS_TRUSTED_PROXIES: "172.26.0.1/16"
## Set the timezone of your server:
TZ: Asia/Shanghai
ports:
- "8280:8080"
## For letsencrypt:
#- "80:80"
## For reverse proxy setups:
#- "127.0.0.1:8280:8080"
volumes:
# Your data volume, for your
# sqlite.db file and media files.
- ./data:/gotosocial/storage
# OPTIONAL: To mount volume for the WAZERO
# compilation cache, for speedier restart
# times, uncomment the below line:
- ./.cache:/gotosocial/.cache
restart: "always"
networks:
gotosocial:
ipam:
driver: default
- 启动GoToSocial
docker-compose up -d
- 创建用户
# 将以下命令改为自己的用户名、邮箱、强密码
docker exec -it gotosocial /gotosocial/gotosocial admin account create --username YOUR_USERNAME --email [email protected] --password 'SOME_VERY_GOOD_PASSWD'
# 以下命令将用户设为管理员
docker exec -it gotosocial /gotosocial/gotosocial admin account promote --username YOUR_USERNAME
- 反代端口,配置证书。我是用到1Panel,可以很方便的配置,你也可以使用acme.sh。如果使用1Panel的OpenResty,需要把
HTTPS
中的HTTP选项
设为HTTP可直接访问
,如果是默认的访问HTTP自动跳转到HTTPS
则会遇到循环重定向的问题。 - 现在可以访问你的域名,能看到GoToSocial的界面就说明搭建成功了。
使用
GoToSocial默认没有Web界面,只提供后端服务,这也是为什么它相比Mastodon占用资源更小。GoToSocial可以兼容Mastodon的客户端,我习惯用网页版,推荐鹿鸣 Elk输入你的域名,然后用邮箱和密码授权登录即可。
手机端可以使用Mastodon官方以及第三方程序。
小结
自建一个可以联通ActivityPub的程序很有趣,也是很有必要的尝试,数据完全在自己手中。我之前一直以为ActivityPub并不是完全去中心化,因为它是由多个实例构成的联邦,兼容的程序有Mastodon、Pleroma、Misskey等,就连最低占用的Pleroma都不能让普通人轻松搭建,那大家想用就只能去其他人的服务器,大型实例无疑又是另一个中心化的微博,小型实例又有随时关闭的风险,毕竟不是付费使用。有一个自托管的实例就显得很重要了,当然更极端一些,VPS商家也可能倒闭,最理想的情况是每人在自己家的电脑上运行属于自己的实例,这样数据全在本地。倒是可以通过Cloudflare Tunnel来实现随处访问。
我最近也在了解IPFS等去中心化存储,并将我的博客放在IPFS上,多重备份,多个域名,可这个只能放静态网站。
自建GoToSocial有一个问题,就是只有自己一个用户,无法直接发现其他用户,只能手动搜索之后,等待服务器和其他用户的服务器连接并获取到内容,前期得自己找人关注,后面顺着关注列表可以再关注其他人的关注,就多起来了。
之前一段时间我在使用Nostr,可我发现它也有一些问题,我在查看我发过的帖子时,有许多找不到了,我想是因为我前期有频繁换中继器,导致帖子被存在不同的Relay上,有点Relay我现在没有添加,所以获取不到记录。我后来也有自己搭建一个Nostr Relay,这个问题就好了很多。
我想将这个GoToSocial实例作为自己发帖的地方,Nostr就和网友们聊天好了,这样用个几年,回去翻看也会是很有趣的事情。
参考:
- 容器 - GoToSocial 文档
- 创建用户 - GoToSocial 文档
- 自建 Gotosocial | 一个 ActivityPub 联邦社交网络程序 - 独立世界 | Effective Notes