部署GoToSocial的一些小坑

雨云 RainYun.com 服务器,存储桶,游戏云,域名注册 积分换钱 持证

前言

前几天用星辰云的低价虚拟主机部署了一个激活码生成器,配套之前发布的付费小米手环应用和爱发电,组建了一个完整的软件激活系统。不过就在昨天,星辰云的虚拟主机在早上突然崩了,cname域名在全球都无法解析,停机了好几个小时,但是在电脑上改了host就能使用,工单中居然回复说这是“正常现象”。

于是我将整套服务转移回了之前用过的雨云,租了一台2H2G的Debian服务器,默认安装了宝塔面板。光运行这么个小网站算是大材小用了,我决定用docker搭建一个开源社交平台,以供自己使用。选来选去,我发现了GoToSocial这个项目(下文缩写为“GTS”),不仅低占用,还基于ActivityPub,可以与Mastodon等平台互通!

我的这台雨云服务器正在运行 GoToSocial 0.19.1 和一个微型PHP网站,如果要运行Mastodon或Misskey,2H2G仅仅是最低配置:

服务器状态

部署

配置文件

我在宝塔面板9.0中一键安装了Docker,后续工作将在命令行进行。

Tip:可以通过pwd命令查看当前文件夹的路径。

查看简体中文版的官方文档:https://docs.gotosocial.org/zh-cn/v0.19.1/getting_started/installation/container/#_2

根据上方的GTS官方文档,创建目录,从官方下载docker-compose.yaml文件并修改。

此时不要急着部署,先去下载config.yaml到同一目录(链接见下)。根据官方文档,在docker-compose.yaml文件中添加以下内容。如果volumes项已经存在,则加到已有内容的后面,注意缩进。文件路径按需修改。

配置文件:https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/example/config.yaml

1
2
3
4
5
6
7
8
services:
gotosocial:
command: ["--config-path", "/gotosocial/config.yaml"]
volumes:
- type: bind
source: /root/gotosocial/config.yaml
target: /gotosocial/config.yaml
read_only: true

然后开始修改config.yaml文件。尤其是hostaccount-domain这些部署后无法更改的配置项。详见官方文档:https://docs.gotosocial.org/zh-cn/v0.19.1/configuration/

使用子域名时

如果你要在子域名(如 social.example.com)上运行GTS,你的配置项host和account-domain可能不同,这时候就需要去你的域名提供商配置跳转。可以看看官方文档中提供的中文注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 字符串。在交换账户信息时使用的域名。当你希望服务器位于
# "gts.example.org",但希望账户域名为 "example.org" 时,这会更好看,
# 或更加简短易记。
#
# 为使此设置正常工作,你需要将 "example.org/.well-known/webfinger" 的请求
# 重定向到 "gts.example.org/.well-known/webfinger",以便 GtS 正常处理它们。
#
# 你还应该以同样的方式重定向 "example.org/.well-known/nodeinfo" 的请求。
#
# 你还应该以同样的方式重定向 "example.org/.well-known/host-meta" 的请求。
# 这个端点被许多客户端用于在主机名和账户域名不同时发现 API 端点。
#
# 空字符串(即,未设置)表示将使用 'host' 的相同值。
#
# 在你的服务器已经运行过一次后请不要更改此项,否则会导致问题!
#
# 在更改此设置前,请阅读安装指南的相应部分:
# https://docs.gotosocial.org/zh-cn/latest/advanced/host-account-domain/
#
# 示例: ["example.org","server.com"]
# 默认: ""
account-domain: ""

这是我的CloudFlare配置,仅供参考。在CloudFlare控制台打开你的域名,侧边栏->规则->概述->创建规则->重定向规则,然后使用下方的表达式,用来匹配。其中的“账号域名”需要改成与上述配置项account-domain相同的域名。

1
http.host eq "账号域名" and ((http.request.uri contains "nodeinfo") or (http.request.uri contains "host-meta") or (http.request.uri contains "webfinger"))

如果主机名是“账号域名”,并且URI包含“nodeinfo”或“host-meta”或“webfinger”,则进行重定向。

然后在页面下方的 URL重定向(类型为“动态”)中填写表达式,注意第一个参数需要改成自己的GoToSocial实例域名,前面加上https://,后面不加斜杠:

1
concat("https://social.example.com", http.request.uri)

状态代码可以选301(永久重定向)或302(临时重定向)。

CloudFlare重定向配置

最后点击保存按钮即可。

运行容器

在修改并保存config.yaml后,在同一目录下执行命令docker-compose up -d,不出意外的话,应该会出现Creating gotosocial ... done

等到命令执行完后,容器大概率是运行不起来的,因为sqlite3会报错(无法创建数据库)。执行命令chmod 777 data,把将来数据库所在目录设置为777权限。然后再次执行docker-compose up -d以启动容器。

转到宝塔面板->侧边栏->Docker->容器,如果容器名为gotosocial的状态是“运行中”,那么你的GTS实例已经成功运行起来了!

宝塔面板的Docker容器

我推荐你使用Nginx进行反向代理,自动部署SSL证书,具体步骤请看下一节。

Nginx反代

首先查看官方文档,修改docker compose文件:https://docs.gotosocial.org/zh-cn/v0.19.1/getting_started/reverse_proxy/#_3

在宝塔中依次打开:侧边栏->Docker->容器->你的GTS容器(名字通常是gotosocial)->反向代理,根据页面的问题提示填写后保存。

Docker容器的反向代理配置

然后再依次打开:侧边栏->网站->顶栏“反向代理”->刚刚添加的反代域名->设置->SSL,申请一个Let’s Encrypt证书,再应用这个证书即可。

给反向代理网站配置证书

然后你就可以访问属于你自己的社交平台了,GLHF!


部署GoToSocial的一些小坑
https://www.yuanzj.top/posts/47767d1.html
作者
yzl3014
发布于
2025年8月24日
许可协议