GoToSocial 是一個輕量級、資源占用低的 ActivityPub 社交網路伺服器,兼容 Mastodon,可用於自建去中心化社交平台。
背景#
我之前自建過一次,不過使用較少,現在給它換了一個短的域名,直接用二級域名zyg.im
,(之前是一個子域gts.joomaen.top
)。
按照 ChatGPT 的回答,GoToSocial 是可以換域名的,不過我看官方文檔的描述好像不行,反正我是直接重新搞了一個,這次想一直用下去。
前期準備#
- 一個 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證書。
4. 這是我的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 YOUR@EMAIL.COM --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 就和網友們聊天好了,這樣用個幾年,回去翻看也會是很有趣的事情。
參考: