前略 鴉河雛です。
── というわけで、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 | 使うドメインを指定します |
port | 443 |
db/port | 15432(Dockerで指定したやつ) |
db/user | Dockerで指定したやつ |
db/password | Dockerで指定したやつ |
db/database | Dockerで指定したやつ |
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 ユーザ名
ここまで完了したら、ブラウザでアクセスしてみます。
こんな感じに表示されればOK、PinaforeとTuskyをお勧めされるのでどちらかにアクセスして、あとは普通にログインしてホームが表示されればOK!
ちなみにPinaforeはこんな感じです。
ただ、残念なことにユーザの編集みたいなのはないみたいです。
ついでにHyperspaceでも試しました。
こちらはユーザプロフィールの編集が可能でした。
所感
起動後から少し触っていましたが、特に連合していない状態のメモリ使用量は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
とりあえずこれで動くことを確認。
てことで、今日はこの辺で。
では、また。
Comments
No comments yet. Be the first to react!