普通视图

宝塔面板Docker分域部署GoToSocial

2025年9月23日 21:27

宝塔面板Docker分域部署GoToSocial - 第1张图片

GoToSocial是什么,我在《WordPress集成Mastodon嘟文之插件篇-Include Mastodon Feed》有所提及。用官方的解释“GoToSocial是一个用Golang编写的ActivityPub社交网络服务器,它提供了一个轻量级、可定制且以安全为重点的入口,进入 Fediverse(联邦宇宙)”。也就是说GoToSocial和Mastodon一样,都是一个进入联邦宇宙的工具。进入联邦宇宙的工具可远远不止这两种哟,有兴趣的可以百度自己折腾下。有了Mastodon,为什么还有一部分人选择GoToSocial呢,正如我之前说过的,Mastodon太重量了,太吃服务器资源,至少需要2C2G的服务器,所以很多人感觉到花了这么大的成本,但是只能得了一点点的功能,感觉有些不值得。而GoToSocial却不同,他是非常的轻量,单用户使用的话,只占不到100M的内存。但是呢,GoToSocial只有服务端也就是我们正常说的后端没有前端,WEB版前端我们可以选择鹿鸣elk.zone等工具。

什么是分域部署GoToSocial,我们在部署GoToSocial时可以直接使用顶级域名来部署,但是用顶级域名无形之中增加了成本,所以很多人选择了用二级域名来部署GoToSocial。比如我部署GoToSocial的二级域名是social.laozhang.org,我创建的用户名是laozhang,那么在联邦宇宙里展示出的账号就是laozhang@social.laozhang.org。这样在联邦宇宙里展示的账号感觉太长不好看也没有个性,那我们就可以通过分域部署,来达到使用二级域名部署GoToSocial,但是在联邦宇宙里显示的用户名却是顶级域名,也就是让你可以装X。比如通过分域部署后,我的原来账号laozhang@social.laozhang.org在联邦宇宙里显示的是laozhang@laozhang.org。

特别提醒的是,如果用二级域名分域部署GoToSocial,务必在第一次启动 GoToSocial 前完成。用官方的解释是“一旦与他人联合后就无法更改域名布局。服务器会因此产生混淆,而你需要说服每个与你联合的实例管理员修改其数据库来解决问题。同时,你还需要在本地重新生成数据库,创建一个新的实例账户和加密密钥对。”

新建GoToSocial目录

在合适的位置新建GoToSocial目录,并建data文件夹,设置如下图。我习惯把Docker的目录都建在一起,方便管理。

宝塔面板Docker分域部署GoToSocial - 第2张图片

创建docker-compose.yaml并修改相关配置

在刚的GoToSocial目录下新建docker-compose.yaml,将下面的代码复制保存,注意修改为自己的配置。

services:
gotosocial:
image: superseriousbusiness/gotosocial:latest
container_name: gotosocial
user: 1000:1000
networks:
- gotosocial
pull_policy: always 
environment:
GTS_HOST:"social.laozhang.org" #实例地址
GTS_ACCOUNT_DOMAIN:"laozhang.org" #用户账户所属的域名,如果使用二级子域名而非主域搭建例请整行删除
GTS_DB_TYPE: sqlite #使用sqlite数据库
GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db
GTS_STORAGE_BACKEND: s3 # 使用S3存储 ,如果不需要可以删除包含STORAGE的环境变量
GTS_STORAGE_S3_BUCKET: user #桶名
GTS_STORAGE_S3_ENDPOINT: s3.bitiful.net #S3端点
GTS_STORAGE_S3_ACCESS_KEY: kmX5VsV8cB4ma8jeAg #
GTS_STORAGE_S3_SECRET_KEY: DJ9qG7pNAZy9 #密钥
GTS_STORAGE_S3_PROXY: true #代理S3,不会显示S3地址
GTS_ACCOUNTS_ALLOW_CUSTOM_CSS: true #允许自定义CSS
TZ: Asia/Chongqing #时区
GTS_SMTP_HOST: mail.cock.li #smtp服务器
GTS_SMTP_PORT: 587 #必须使用TLS
GTS_SMTP_USERNAME: admin@cock.li #用户名
GTS_SMTP_PASSWORD: ****** #密码
GTS_SMTP_FROM: admin@cock.li #邮箱地址
GTS_INSTANCE_LANGUAGES: zh #中文
GTS_ACCOUNTS_REGISTRATION_OPEN: true #开放注册
GTS_TRUSTED_PROXIES: 172.18.0.1/16 #可信代理
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./data:/gotosocial/storage #修改映射目录为第一步创建的GoToSocial目录
restart: "always"

networks:
gotosocial:
ipam:
driver: default
config:
- subnet: "172.18.0.0/16"
gateway: "172.18.0.1"

修改顶级域名重定向规则

打开顶级域名laozhang.org的网站设置,在配置文件里增加下面代码

    # GoToSocial 重定向规则,不玩gotosocial就删除
    location /.well-known/webfinger {
        rewrite ^.*$ https://social.laozhang.org/.well-known/webfinger permanent;
    }

    location /.well-known/host-meta {
        rewrite ^.*$ https://social.laozhang.org/.well-known/host-meta permanent;
    }

    location /.well-known/nodeinfo {
        rewrite ^.*$ https://social.laozhang.org/.well-known/nodeinfo permanent;
    }
     # GoToSocial 重定向规则,不玩gotosocial就删除,结束

运行、创建用户、增加管理员权限

使用ssh工具远程连接到服务器,并进入到刚才创建的GoToSocial目录

运行

docker compose up -d

创建用户,注意自行修改用户名、密码、邮箱

docker exec -it gotosocial ./gotosocial admin account create --username admin --email YOUR@EMAIL.COM --password SOME_VERY_GOOD_PASSWD ;

增加管理员权限

docker exec -it gotosocial ./gotosocial admin account promote --username admin

新建网站,反代

创建social.laozhang.org域名的网站,进行反代。至此全部完成,我们在正常管理gotosocial的时候,当然还是使用二级域名,分域的目的就是在联邦宇宙里显示的账号是顶级域名的。

宝塔面板Docker部署mastodon长毛象

2025年9月18日 23:06

宝塔面板Docker部署mastodon长毛象 - 第1张图片

暑假的时候就开始折腾mastodon了,只不过那个时候没有更新博客就没有做记录。mastodon的Docker方式部署,网上教程很多,我这也是东借西借,才形成了适合自己的部署方法。

什么是mastodon,Mastodon 是一款开源软件,它催生了一系列替代性社交媒体网站。Mastodon 是互联网上最大的去中心化社交网络。 它不是一个网站,而是由独立社区节点及其数以百万计的用户组成的网络,所有这些用户都能够无缝地相互交流。 无论你进入哪一个节点,你都可以与所有在 Mastodon 的人之间进行交流。

自建mastodon是很吃资源的,起步需要要求VPS的配置是2C2G,目前我的mastodon是部署在酷鸭数据的香港VPS上,速度还不错。目前我开启了全文搜索的情况下,内存占用达到3.4G。所以如果你的VPS配置不高的情况下,就不要折腾mastodon了,不过有一个很好的轻量级的替代品GoToSocial,内存占用才一百来M。

如果不自建而想体验mastodon的话,可以直接使用官方的mastodon.social或使用长毛象中文网cmx.im,我们俗称“草莓县”!

设置SWAP虚拟内存

mastodon比较吃内存,所以一般情况下,我们都会设置SWAP,SWAP的大小一般和物理内存相等即可。因为我们是在宝塔面板下操作的,所以能直接在面板操作就直接在面板操作,省得用命令了。

在软件商店里安装“Linux工具箱”,数秒安装完成后,打开Linux工具箱,找到“Swap虚拟内存”项,直接填写即可。

创建mastodon目录

在宝塔面板文件管理器里,直接在你想要的位置创建目录。比如我是创建在/www/mastodon/mastodon下的,因为数据盘就是挂载在www的目录下。

拉取镜像、修改docker-compose.yml配置文件

使用ssh工具远程连接到服务器,并进入到刚才创建的目录

cd /www/mastodon/mastodon

拉取镜像

如果需要升级到某指定版本,请将latest改成v4.4.3等版本号。

docker pull ghcr.io/mastodon/mastodon:latest

下载docker-compose.yml文件

wget https://raw.githubusercontent.com/mastodon/mastodon/main/docker-compose.yml

在宝塔面板文件管理器下,进入mastodon目录,打开docker-compose.yml文件,修改web、streaming、sidekiq分类下的image: ghcr.io/mastodon/mastodon后的版本号,可是加:latest”,也可以直接使用指定版本,比如“v4.4.3”。

开启全文搜索

我是直接在部署的时候就开启全文搜索,后期开启也可以。把docker-compose.yml文件里"es"分类的注释#号全删掉。注意这里有个坑,就是删掉es前的#号后,还得要再删除一个空格,前面空两格,否则安装时会报错。同时在web分类下把“- es”前的注释#号也删掉。

注意:开启全文搜索后,内存占用近1G,所以如果配置低的话,建议把这个功能关掉。

初始化PostgreSQL

初始化数据库

注意初始化代码中,一定要把mastodon目录修改为你自己创建的目录。

docker run --name postgres14 -v /www/mastodon/mastodon/postgres14:/var/lib/postgresql/data -e   POSTGRES_PASSWORD=设置数据库管理员密码 --rm -d postgres:14-alpine

进入数据库

docker exec -it postgres14 psql -U postgres

创建mastodon用户

CREATE USER mastodon WITH PASSWORD '数据库密码(最好和数据库管理员密码不一样)' CREATEDB;

退出数据库

\q

停止Docker

docker stop postgres14

配置Mastodon

创建.env.production文件

进行mastodon根文件夹中创建空白.env.production文件,可以用下面命令,也可以直接在宝塔面板下新建。

touch .env.production

运行引导

docker-compose run --rm web bundle exec rake mastodon:setup

引导安装过程就不赘述了,因为看不懂,我是直接用微信截图翻译的,笨人有笨办法。运行到最后,出现下面显示后,把下面的所有数据复制下来,粘贴到.env.production文件里。

Below is your configuration, save it to an .env.production file outside Docker:

注意,因为我开启了全文搜索功能,所以务必在.env.production文件里添加下面代码

ES_ENABLED=true
ES_HOST=es
ES_PORT=9200

启动Mastodon

docker-compose down
docker-compose up -d

文件夹赋权

chown 991:991 -R ./public
chown -R 70:70 ./postgres14

如果目录内也有elasticsearch文件夹后,也对其赋权。这个是全文搜索功能需要的。

chown 1000:1000 -R elasticsearch

再次重启Mastodon

docker-compose down
docker-compose up -d

到目前为止,全部完工。如果不出意外的话,查看下Docker容器,应该是有6个。其中可以看到mastodon-es-1这个容器占用内存就近1G,他就是全文搜索!

配置图片上传至第三方存储

我设置是把图片上传至CF的R2存储中,方法是在.env.production文件里添加以下代码,不懂的可以问AI,不要忘了把XXX换成自己的KEY!配置完后,重启mastodon搞定!

# 文件上传配置
S3_ENABLED=true
S3_PROTOCOL=https
S3_ENDPOINT=https://XXXXXXXXXXXXXX.r2.cloudflarestorage.com/
S3_ALIAS_HOST=img.suo.si
S3_HOSTNAME=img.suo.si
S3_BUCKET=XXXX
S3_REGION=auto
AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXu

新建网站,进行反代

把这个茬给忘了,在蜗牛的提醒下添加一条,可以参考《宝塔面板反向代理,用域名访问Triliu》。不过最新的宝塔面板,“网站”选项里里就有“新建反代”,设置原理是一样的。这样的好处就不会产生网站目录,更为方便易于管理。

❌