GoToSocialをためした

なんかうまくいってないけど・・

前略 鴉河雛です。

── というわけで、GoToSocialを試してみました。

GoToSocialとは

GoToSocialはその名前の通りGoで作られた軽量なサーバで、
Mastodonとの互換性を重視して作られているみたいです。

特徴は何といってもWebクライアントが付属しておらず、バックエンドのみということ!

なので利用するにはMastodonなどのクライアントが必要になります。

また、細かい設定がコンフィグから可能になっており、柔軟性も重視していることがうかがえます。

詳しくはリポジトリを確認してください。

ちなみに、GoToSocialはまだα版でリリースにはまだ時間がかかりそうな感じに見えます。
実装の状況はこちらでも確認できるので、気になる方はチェックしてみてください。

ラズパイでやってみる!

今回用意したのはRaspberry Pi 3B。
軽量とのことなのできっと余裕で動くでしょう!

一応ドキュメントもあるので軽く参考にしていきます。

事前にセットアップと一応Docker環境を用意しておきます。

準備

PostgreSQL

めんどくさいのでDockerで行きましょう。

version: '2.3'

services:
  postgres:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: gotosocial
      POSTGRES_PASSWORD: gotosocial
      POSTGRES_DB: gotosocial
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    ports:
      - '127.0.0.1:15432:5432'

とりあえず起動確認しておく。

GoToSocialのビルドと設定

続いてGoToSocial。
実はこちらもDockerを試そうと思ったんですが、動かなかったので普通にやります。

まずはドキュメント通り、Goが入っている環境でビルドする必要があるので、私の場合はWSLで環境を用意してビルドしました。

ビルドしたら、完成したgotosocialとWebディレクトリをラズパイにコピります。

続いてコンフィグ。

コンフィグは、こちらのものを同じディレクトリに用意して、イイ感じに修正していきます。

リバプロとか用意しなくても普通に動くみたいなので今回はそのように設定します。

項目内容
host使うドメインを指定します
port443
db/port15432(Dockerで指定したやつ)
db/userDockerで指定したやつ
db/passwordDockerで指定したやつ
db/databaseDockerで指定したやつ
storage/basePath私は直下(./storage)に設定
storage/serveBasePath/media (こっちのほうがいいかなって)
letsEncrypt/certDir私は直下(./storage/certs)に設定
letsEncrypt/emailAddress自分のアドレス

と、こんな感じでしょうか。

起動!

それでは起動します。

./gotosocial --config-path ./config.yaml  server start

起動するときはこんな感じでコンフィグのパスを指定してあげればOK。

特にエラーが出ずにポスグレにつないだよっていわれれば起動完了。

その後少し待つとLet’s Encryptで証明書の取得をしてくれます。

それが完了したらユーザの作成をします。

./gotosocial --config-path ./config.yaml admin account create \
   --username ユーザ名 \
   --email メアド \
   --password 'パスワード'

ユーザの承認。

./gotosocial --config-path ./config.yaml admin account confirm  --username ユーザ名 

ユーザのAdmin権限昇格

./gotosocial --config-path ./config.yaml admin account promote --username ユーザ名 

ここまで完了したら、ブラウザでアクセスしてみます。

gts1

こんな感じに表示されればOK、PinaforeとTuskyをお勧めされるのでどちらかにアクセスして、あとは普通にログインしてホームが表示されればOK!

ちなみにPinaforeはこんな感じです。
ただ、残念なことにユーザの編集みたいなのはないみたいです。 gts2

ついでにHyperspaceでも試しました。
こちらはユーザプロフィールの編集が可能でした。 gts3

所感

起動後から少し触っていましたが、特に連合していない状態のメモリ使用量はOS込みで200MBを切っており確かに軽量。
ラズパイでも全然大丈夫そうですが、人が増えた時どうなるかは不明。

設定の問題かストリーミングが一切機能せずTLが終始おかしい状態でした。
またラズパイで試したときはなんだかわからないけど画像がアップロードできなくなったり色々起きました。

普段はスマホとかデスクトップクライアントしか使わないよって人には個人的にかなりありだと思っていて、
ラズパイ3B相当の超軽量サーバでも動作可能なので、例えばVultrの350円くらいの512MBインスタンスとか借りても十分かもしれないです。(ストレージ別でw)

日々開発も進んでいるようで、個人的に今一番注目しているプロジェクトですが、
私はMastodonのWebUIが気に入っているので特に乗り換えたりする予定はないかなって思ってます・・。(え

とはいえ軽量なPleromaとかと比べても構築の難易度がすごおおおおおく楽なので慣れてない人でサクッと建てれて良いかなと。

と、感想はこんな感じ?

ちなみに、試した以下のクライアントでは動作しませんでした。

  • SubwayTooter
  • Fedilab
  • Whalebird

まだまだAPI足りてないって感じなんでしょうね。

おまけ

VultrでDockerを利用して立てたときのメモです。

よくわからず適当にやってるのであってるか不明。

  • Docker使用
  • nginxでリバプロ(なので証明書は自分で発行)
  • Ubuntuです

docker-compose.yaml

version: '2.3'

services:
  postgres:
    image: postgres:12.5-alpine
    restart: always
    environment:
      POSTGRES_USER: gotosocial
      POSTGRES_PASSWORD: gotosocial
      POSTGRES_DB: gotosocial
    volumes:
      - ./data/postgres:/var/lib/postgresql/data

  gotosocial:
    image: superseriousbusiness/gotosocial:0.1.0-SNAPSHOT
    restart: always
    environment:
      GTS_CONFIG_PATH: ./config.yaml
    ports:
      - '127.0.0.1:4001:4001'
    volumes:
      - ./data/gotosocial/config.yaml:/gotosocial/config.yaml
      - ./data/gotosocial/storage:/gotosocial/storage
    depends_on:
      - postgres
mkdir -p data/gotosocial/storage

nginx

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

upstream streaming {
    server 127.0.0.1:4001 fail_timeout=0;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name gs.korako.me;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/どめいん/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/どめいん/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  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;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://backend;
    proxy_buffering on;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    proxy_cache CACHE;
    proxy_cache_valid 200 7d;
    proxy_cache_valid 410 24h;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    add_header X-Cached $upstream_cache_status;
    add_header Strict-Transport-Security "max-age=31536000";

    tcp_nodelay on;
  }

Mastodonのやつですが・・w

とりあえずこれで動くことを確認。

てことで、今日はこの辺で。
では、また。