最近話題のマストドン。楽しそうですね。
Mastodon is…
TwitterはTwitter社が管理していますが、
Mastodonは分散型で稼働しています。
TwitterはTwitter社が大きなサーバを用意していますが、
Mastodonはオープンソースで誰でもサーバ(インスタンス)を立てることができます。
そうすると複数のサーバが立てられることになりますが、異なるサーバのユーザとコミュニケーションをとることも可能で、この繋がりを連邦と表現します。
サーバ内限定で発言したり、連邦全てに発言したりと自由度が高いです。
日本ではmstdn.jpが有名で、急激に人口を増やしています。
メリット/デメリット
メリット
- 企業に縛られない
Twitterがサービス終了と言ったら有無を言わさず終わりです。何も残りません。
また、その他言論制限がありません。あるとすれば他のサーバから国交断絶されるくらいです。
- 広告がない
有料プランも広告プランもありません。
ちなみにマストドンの初期資金はクラウドファンディングからなります。
- 効率的な情報交換
目的が設定されているインスタンスであれば、集まる人も同じ目的を持っているため効率的です。
(例:pixivのインスタンスは絵を自由に公開したい人が集まっています)
デメリット
- サーバ管理者に権利が委ねられている
アカウントを作る際にサーバを選ぶわけですが、管理者が飽きたり管理費不足でサーバを停止した場合アカウントが消えてしまいます。
なぜラズパイでサーバを立てたいのか
そもそもmstdn.jpのように1つのサーバへ多くの人が集まるのって分散型のメリットを消してしまっているような気がします。
Twitter社の役がmstdn.jpの管理者に移っただけですよね
自分専用のサーバを立てることで、管理は自己責任になり、他者とのコミュニケーションも連邦で可能です。
やめたいときはサーバを消せばいいだけです。
つまり、分散型のメリットを大きく生かせるのではないかと。
先述した効率的な情報交換はできませんが。
そう考えると自分1人+α程度であればラズパイぐらいのサイズがコスト面から考えて最適ではないかと。(処理的にいけるかは別として)
ということで、やってみましょう。
必要なものの準備
マストドンはDockerで入れられます。
正直Dockerは触ったことがないのでひたすらGoogle先生とお話していました。
以下まとめを参考にさせていただきました。
前提
raspbian入りで外部に接続できるラズパイ3があること。
ここを参考にしてください。
myDNSのサブドメインを独自ドメインにしたいのであれば、独自ドメインのDNSレコード設定で
ホスト:独自ドメイン
タイプ:cname
コンテンツ:myDNSのサブドメイン
にすればいけると思います。
gitのインストール
sudo apt-get install git
Dockerとdocker-composeのインストール
letsencryptのインストール
無料でCA証明書を発行してくれます。
git clone https://github.com/letsencrypt/letsencrypt.git cd letsencrypt ./letsencrypt-auto --help
nginxのインストール
sudo apt-get install nginx
mastodonの導入
ここでめっちゃハマってました。
公式のmastodonではarmに対応していないため、自分でhypriotのalpineからビルドに挑戦し、イメージのビルドまではいったんですが、docker-compose build/ runの段階でどうにもならず死んでいました。
するとどうでしょう。
もうあるじゃないですか。
ということで上記事を参考に進めていきます。
まずはrpi-mastodonをcloneします。
git clone https://github.com/gilir/rpi-mastodon.git
続いて以下コマンドを打ちます。
docker-compose up -d
エラーが出まくりますが、「これを実行してもう1回チャレンジしてくれ」的なことを言われるので、ひたすら従います。(6回くらい)
完全に服従したら以下のコマンドを3回繰り返し、キーを3つゲットします。
docker-compose run --rm web rake secret
.env.productionの設定
.env.production.sampleから.env.productionを作成し、編集します。
cp .env.production.sample .env.production emacs .env.production
変更点は以下のように
とりあえず動作を見たかったので、HTTPS対応をfalseにしました。
# REDIS_DB=0 DB_HOST=db DB_USER=好きなユーザ名 DB_NAME=好きなDB名 DB_PASS=好きなパス DB_PORT=5432 # Federation LOCAL_DOMAIN=<span style="color: #ff0000">あるなら独自ドメイン</span> LOCAL_HTTPS=false # Application secrets # Generate each with the `rake secret` task (`docker-compose run --rm web rake secret` if you use docker compose) PAPERCLIP_SECRET=先ほどのキー1 SECRET_KEY_BASE=先ほどのキー2 OTP_SECRET=先ほどのキー3 MTP_SERVER=sparkpostで入手 SMTP_PORT=587 SMTP_LOGIN=sparkpostで入手 SMTP_PASSWORD=sparkpostで入手 SMTP_FROM_ADDRESS=hoge@ドメイン (送信元用) SMTP_AUTH_METHOD=plain SMTP_ENABLE_STARTTLS_AUTO=true
SPARKPOSTの情報はこのページです。
APIキーはセキュリティ上1回しか表示されないので注意。見落としたら再発行しましょう。
データベースの設定
web rake secret後はデータベースの設定を行います。
docker exec -it データベースのコンテナ名 /bin/bash bash-4.3# su - postgres $ createuser -P 先ほどのユーザ名 Enter password for new role: Enter it again: $ createdb 先ほどのデータベース名 -O 先ほどのユーザ名 Ctrl + pqでコンテナから脱出
マイグレーションしてからアセットのコンパイルをします。
docker-compose run --rm web rails db:migrate docker-compose run --rm web rails assets:precompile
ここまできたらとりあえずテストです。
以下コマンドで何かのhtmlが返ってこなかったら間違っているかもです。
curl localhost:3000
nginxの設定
nginxの設定を行います。設定内容は公式を流用し、example.comを自分のドメインに変えてください。
本来ならばここで証明書の取得をするべきですが、私はとりあえずHTTPS非対応でいきました。
documentation/Production-guide.md at master · tootsuite/documentation · GitHub
sudo emacs /etc/nginx/conf.d/ドメイン.conf
起動
sudo systemctl restart nginx
起動したら他の回線から覗いてください。もしくはローカルのipに:3000をつけて見てください。
どうでしょう、動きましたか?
動いていないなら何かがおかしいです。
もう一度順番通りにできているか確認しましょう。
ここまで書いて何ですが、私はうまく動かないです。
リバースプロシキがうまく作動していないのか、"ローカルIP:3000"でしか見れないです。
外の世界から訪問するとnginxのウェルカムページが表示されます。
メールも届かない、、、
また加筆する予定ですが、取り急ぎここまで。
追記
メールに関しては単純な設定ミスでした。
また、Dockerを使うより専用機にした方が動作も軽く、いい感じに動きました。
以下記事を参考にしてください。