YJK

独立世界

Independent World
twitter
telegram

自建 Gotosocial | 一個 ActivityPub 聯邦社交網絡程序

GoToSocial 是一個使用 Golang 編寫的 ActivityPub 社交網絡伺服器,它是一個輕量級、安全的聯邦社交網絡入口,可讓用戶保持聯繫、發布和分享圖片、文章等內容。GoToSocial 強調用戶的隱私和自由,不會跟蹤用戶的行為,也不會為了向用戶展示廣告而收集他們的數據。

使用 GoToSocial 可以讓用戶進入聯邦社交網絡的世界,聯邦網絡是一種基於協議的社交網絡結構,它允許用戶從一個社交網絡實例互相跟隨、交流和分享內容。這種結構可以讓用戶自由選擇社交網絡平台,同時避免某個平台壟斷市場。用戶可以在不同的實例之間進行跟隨和互動,這樣就可以更好地保護用戶的隱私和自由。

使用 GoToSocial 還可以避免被廣告和推薦算法影響,因為 GoToSocial 不使用這些算法。GoToSocial 的時間軸是按照發佈時間排序的,用戶可以通過關注人和互動方式來定制自己的時間軸和體驗。此外,GoToSocial 的用戶體驗不是基於用戶的參與度和黏性,而是基於用戶的興趣和互動方式。這種設計可以讓用戶更自由地探索和發現內容,而不是受到平台算法的影響。

總之,使用 GoToSocial 可以讓用戶加入聯邦社交網絡的世界,保護用戶的隱私和自由,避免被廣告和推薦算法影響,探索和發現自己感興趣的內容。

—— 來自 ChatGPT

GoToSocial 是一個十分輕量(輕量到甚至沒有用戶界面,需要使用第三方程序登錄、兼容 Mastodon 應用進行使用)的 ActivityPub 聯邦社交網絡程序,自建 GoToSocial 可以避免您的信息因為所在實例倒閉、不可抗力等原因化為烏有。


一、使用:#

修改個人信息#

訪問 https://social.example.com/settings 使用帳號密碼登錄即可進行修改

發佈推文#

通過第三方 APP 進行發佈、瀏覽、關注等操作,可以使用 Mastodon 的客戶端進行:

二、搭建教程:#

1/ 自有 VPS 安裝#

安裝 Docker

curl -L get.docker.com | bash

創建安裝目錄

mkdir -p /var/www/gotosocial/data && cd /var/www/gotosocial

配置 docker-compose.yaml 文件

nano docker-compose.yaml

修改下方 social.example.com 為您自己的域名,並粘貼進去

version: "3.3"

services:
  gotosocial:
    image: superseriousbusiness/gotosocial:latest
    container_name: gotosocial
    user: 1000:1000
    networks:
      - gotosocial
    environment:
      GTS_HOST: social.example.com
      GTS_DB_TYPE: sqlite
      GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db
      GTS_LETSENCRYPT_ENABLED: "false"
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - ./data:/gotosocial/storage
    restart: "always"

networks:
  gotosocial:
    ipam:
      driver: default

運行

docker compose up -d

創建用戶

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

安裝 Nginx

# 以 Debian/Ubuntu 為例

apt install -y lsb-release ca-certificates apt-transport-https curl gnupg dpkg
 
curl -sS https://n.wtf/public.key | gpg --dearmor > /usr/share/keyrings/n.wtf.gpg
 
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/n.wtf.gpg] https://mirror-cdn.xtom.com/sb/nginx/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/n.wtf.list
 
apt update
 
apt install nginx-extras -y

安裝 ACME.SH

curl -L get.acme.sh | bash

重啟終端,創建 Nginx 配置文件

nano /etc/nginx/conf.d/gotosocial.conf

粘貼下方內容

server {
  listen 80;
  listen [::]:80;
  server_name social.example.com;
  root /var/www/gotosocial;
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

重啟 Nginx nginx -s reload,將域名指向 VPS 的 IP 地址,生成 SSL 證書

acme.sh --issue -d social.example.com -w /var/www/gotosocial --server letsencrypt

生成的證書大致如下

[Thu 12 Nov 2020 07:16:28 AM EST] Your cert is in  /root/.acme.sh/social.example.com/social.example.com.cer
[Thu 12 Nov 2020 07:16:28 AM EST] Your cert key is in  /root/.acme.sh/social.example.com/social.example.com.key
[Thu 12 Nov 2020 07:16:30 AM EST] The intermediate CA cert is in  /root/.acme.sh/social.example.com/ca.cer
[Thu 12 Nov 2020 07:16:30 AM EST] And the full chain certs is there:  /root/.acme.sh/social.example.com/fullchain.cer

我們需要其中的

/root/.acme.sh/social.example.com/fullchain.cer
/root/.acme.sh/social.example.com/social.example.com.key

再次編輯 Nginx 配置文件

nano /etc/nginx/conf.d/gotosocial.conf

按下方內容粘貼

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name social.example.com;
  root /var/www/gotosocial;
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name social.example.com;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;

  ssl_certificate /root/.acme.sh/social.example.com/fullchain.cer;
  ssl_certificate_key /root/.acme.sh/social.example.com/social.example.com.key;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /var/www/gotosocial;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/x-icon;

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

重啟 Nginx nginx -s reload,現在即可訪問您的 Gotosocial 了。

2/ 在 Fly.io 免費安裝#

準備:

  • 註冊 Fly.io 帳號,並綁卡(避免濫用);
  • 註冊 Cloudflare 並啟用 R2,啟用 R2 需要綁卡。新建一個儲存桶並創建一個 API 令牌。
  • 註冊 Yugabyte 帳號,並創建數據庫,地區選擇tokyo,創建過程記得保存用戶名及密碼,等創建成功後點右上角 connect 按鈕選擇 Connect to your Application - Parameters 獲取連接信息,我們需要其中的 Host Port Database

安裝 flyctl

# Linux
curl -L https://fly.io/install.sh | sh

# macOS
curl -L https://fly.io/install.sh | sh

# Windows,需要開啟 RemoteSigned: 管理員運行 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"

登錄

flyctl auth login

# 若登錄失敗使用
# flyctl auth login -i 
# 輸入帳號密碼進行登錄

創建安裝目錄

mkdir ~/gotosocial && cd gotosocial

創建 APP

flyctl launch --name YOURAPPNAME --image=superseriousbusiness/gotosocial:latest --region nrt --no-deploy

創建儲存卷,1G 足矣

flyctl volumes create social_data --region nrt --size 1

編輯當前目錄下的 fly.toml 配置文件,按下方配置(下方配置文件內容已按照 fly.io v2 部署平台進行相應的修訂)

app = "yjksocial"
primary_region = "nrt"

[build]
  image = "superseriousbusiness/gotosocial:latest"

[env]
  GTS_HOST = "social.example.com"
  GTS_DB_TYPE = "postgres"
  GTS_DB_PORT = 5433
  GTS_DB_ADDRESS = "之前記錄的數據庫 Host"
  GTS_DB_USER = "admin"
  GTS_DB_PASSWORD = "之前記錄的數據庫用戶密碼"
  GTS_DB_DATABASE = "yugabyte"
  GTS_DB_TLS_MODE = "enable"
  GTS_LETSENCRYPT_ENABLED = "false"
  GTS_STORAGE_BACKEND = "s3"
  GTS_STORAGE_S3_ENDPOINT = "Cloudflare R2 API 地址,記得去掉 “/倉庫名”"
  GTS_STORAGE_S3_ACCESS_KEY = "Cloudflare R2 API ACCESS KEY"
  GTS_STORAGE_S3_SECRET_KEY = "Cloudflare R2 API SECRET KEY"
  GTS_STORAGE_S3_BUCKET = "Cloudflare R2 倉庫名"
  GTS_STORAGE_S3_PROXY = true

[mounts]
  source="social_data"
  destination="/gotosocial/storage"

[http_service]
  internal_port = 8080
  force_https = true
  auto_stop_machines = false
  auto_start_machines = true
  min_machines_running = 1
  processes = ["app"]

啟動 APP

flyctl deploy

能成功訪問 https://YOURAPPNAME.fly.dev 則代表部署成功。

綁定域名,將您的域名 CNMAEYOURAPPNAME.fly.dev,然後運行

flyctl certs add social.example.com

等待幾分鐘即可。

創建用戶及設置管理員

# 在 fly.toml 文件目錄執行
flyctl ssh console
# 創建用戶
/gotosocial/gotosocial admin account create --username YOUR_USERNAME --email [email protected] --password 'SOME_VERY_GOOD_PASSWD'

# 設置管理員
/gotosocial/gotosocial admin account promote --username YOUR_USERNAME
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。