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

アプリを作成

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"]

アプリを起動

flyctl deploy

https://YOURAPPNAME.fly.devに正常にアクセスできれば、デプロイ成功です。

ドメインをバインドし、ドメインをYOURAPPNAME.fly.devに CNAME 設定し、次に実行

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
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。