GoToSocial 搭建步骤

2025年2月8日 18:56:50
截屏2025-02-08 19.02.56

GoToSocial 是一个轻量级、资源占用低的 ActivityPub 社交网络服务器,兼容 Mastodon,可用于自建去中心化社交平台。

背景

我之前自建过一次,不过使用较少,现在给它换了一个短的域名,直接用二级域名zyg.im,(之前是一个子域gts.joomaen.top)。

按照ChatGPT的回答,GoToSocial是可以换域名的,不过我看官方文档的描述好像不行,反正我是直接重新搞了一个,这次想一直用下去,请关注我: @[email protected]

前期准备

  • 一个VPS并且安装Docker和Docker Compose
  • 一个域名(子域也可以)
  • 一个反向代理服务器(Nginx、Caddy等,我用的是1Panel上的OpenResty)

我是使用Docker Compose来搭建的,这样更加灵活,随便找一个目录就行,挂载目录就是在它的子目录中,方便迁移和备份。

搭建步骤

  1. 在VPS上你喜欢的地方新建一个文件夹作为工作目录,用来存放docker-compose 文件,以及一个目录来存储 GoToSocial 的数据。我是在/opt下,进入这个目录:
mkdir -p /opt/gotosocial/data

cd /opt/gotosocial
  1. 使用wget获取最新的 docker-compose.yaml
wget https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/example/docker-compose/docker-compose.yaml
  1. 按需修改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证书。
  1. 这是我的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
  1. 启动GoToSocial
docker-compose up -d
  1. 创建用户
# 将以下命令改为自己的用户名、邮箱、强密码

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
  1. 反代端口,配置证书。我是用到1Panel,可以很方便的配置,你也可以使用acme.sh。如果使用1Panel的OpenResty,需要把HTTPS中的HTTP选项设为HTTP可直接访问,如果是默认的访问HTTP自动跳转到HTTPS则会遇到循环重定向的问题。
  2. 现在可以访问你的域名,能看到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就和网友们聊天好了,这样用个几年,回去翻看也会是很有趣的事情。


参考:

  1. 容器 - GoToSocial 文档
  2. 创建用户 - GoToSocial 文档
  3. 自建 Gotosocial | 一个 ActivityPub 联邦社交网络程序 - 独立世界 | Effective Notes

Tags: