Joomaen

Joomaen's xlog

Joomaen
tg_channel
jike

GoToSocial 建置步驟

GoToSocial 是一個輕量級、資源占用低的 ActivityPub 社交網路伺服器,兼容 Mastodon,可用於自建去中心化社交平台。

pic

背景#

我之前自建過一次,不過使用較少,現在給它換了一個短的域名,直接用二級域名zyg.im,(之前是一個子域gts.joomaen.top)。

按照 ChatGPT 的回答,GoToSocial 是可以換域名的,不過我看官方文檔的描述好像不行,反正我是直接重新搞了一個,這次想一直用下去。

前期準備#

  • 一個 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證書。

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
  1. 啟動 GoToSocial
docker-compose up -d
  1. 創建用戶
# 將以下命令改為自己的用戶名、郵箱、強密碼

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
  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
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。