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 のクライアントと互換性があり、私はウェブ版を好んで使用しています。あなたのドメインを入力し、メールアドレスとパスワードで認証ログインするだけで済みます。モバイル端末では Mastodon の公式アプリやサードパーティ製アプリを使用できます。
小結#
ActivityPub に接続できるプログラムを自分で構築するのは非常に面白く、また必要な試みでもあります。データは完全に自分の手の中にあります。以前は ActivityPub が完全に分散型ではないと思っていましたが、複数のインスタンスから構成される連邦であり、互換性のあるプログラムには Mastodon、Pleroma、Misskey などがあります。最小限のリソースを消費する Pleroma でさえ、一般の人が簡単に構築できるわけではありません。そのため、他の人のサーバーを利用するしかなく、大規模なインスタンスは明らかに別の中央集権的な微博であり、小規模なインスタンスはいつでも閉鎖されるリスクがあります。結局のところ、自己ホスト型のインスタンスを持つことが非常に重要です。もちろん、より極端なことを言えば、VPS のプロバイダーが倒産する可能性もあります。理想的な状況は、各人が自宅のコンピュータで自分のインスタンスを実行し、データがすべてローカルにあることです。Cloudflare Tunnel を使用してどこからでもアクセスできるようにすることも可能です。
最近、IPFS などの分散ストレージについても学んでおり、私のブログを IPFS に置いています。複数のバックアップと複数のドメインがありますが、これは静的ウェブサイトのみをホストできます。
GoToSocial を自分で構築する際の問題は、ユーザーが自分だけであり、他のユーザーを直接発見できず、手動で検索してサーバーと他のユーザーのサーバーが接続されてコンテンツを取得するのを待つ必要があることです。初期段階では自分でフォローする人を見つける必要があり、その後はフォローリストを辿って他の人をフォローすることができます。
以前、Nostr を使用していましたが、いくつかの問題があることに気付きました。投稿した内容を確認していると、多くのものが見つからなくなっていました。これは、初期にリレーを頻繁に変更したため、投稿が異なるリレーに保存されてしまったからだと思います。現在追加していないリレーもあり、記録を取得できませんでした。その後、自分で Nostr リレーを構築したところ、この問題は大幅に改善されました。
この GoToSocial インスタンスを自分の投稿の場所として使用し、Nostr ではネットユーザーとチャットすることにしたいと思っています。数年後に振り返るのも非常に面白いことになるでしょう。
参考: